up2wing 发表于 2009-6-3 02:49

大虾帮忙看下我的半个圆怎么没有了?

我写的一个程序,想质点绕半圆后再沿直线运动,但是不知道为什么右边的半圆怎么没有了?!应该怎么改进啊?请高手帮忙看下,谢谢!
clear;clc;
n=5;l=100;%变量声明
r=l/(2*(n-1));
y=-r:pi/500:50;%分段函数
x=0:pi/500:30;
len=length(y);
for i=1:len
    if (y(i)<0)
      y(i)=-(sqrt(r^2-(x(i)-r)^2));
    elseif (y(i)>=0)
      x(i)=2*r;
    end
end

comet(x,y);
plot(x,y);
axis equal;
grid

wwbeyond 发表于 2009-6-3 07:24

for i=1:len
    if (y(i)<r)
      y(i)=-(sqrt(r^2-(x(i)-r)^2));
    elseif (y(i)>=r)
      x(i)=2*r;
    end
end

up2wing 发表于 2009-6-3 10:21

回复 沙发 wwbeyond 的帖子

刚去睡了一会~~~~~
真是太感谢了~~~:@)

我又看了一下,但是不明白为什么改成r就可以了?我想的是y值<0的时候就是一个完整的半圆啊~~~还请高手指点一下哈:@)

[ 本帖最后由 ChaChing 于 2009-6-3 12:48 编辑 ]

ChaChing 发表于 2009-6-3 19:20

改成r後, y<0的确是一个完整的半圆!

xiezhh 发表于 2009-6-3 21:45

因为从你的程序和数据来看,圆的方程为
(x-r)^2+y^2=r^2
你一开始赋值y=-r:pi/500:50; x=0:pi/500:30; 此时的x与y不等长,你后面的程序要重新赋值,
而当x=0:pi/500:2*r时y对应的数据是y=-r:pi/500:r,所以应该用y(i)<r,不知说明白了没有。

实际上你的程序还可以改写为
n = 5;
l = 100;%变量声明
r = l/(2*(n-1));
t = linspace(-pi,0,2000);
y0=linspace(0,50,500);
x = ;
y = ;
comet(x,y);
plot(x,y);
grid
axis equal;

up2wing 发表于 2009-6-3 23:51

回复 5楼 xiezhh 的帖子

是的哈~~~:@D
你的比我的简单多了,真是高手啊!领教了!非常感谢!
其实也可以只把步长改下,y=-r:pi/1000:50; x=0:pi/500:30;也能得到结果了。
也谢谢以上各位~:loveliness:
页: [1]
查看完整版本: 大虾帮忙看下我的半个圆怎么没有了?