2017-06-15 88 views
2

我想绘制菲涅耳椭圆和两点(x1,y1)和(x2,y2)之间的一条线。另外,我正在尝试使用atan2旋转椭圆。 首先,我不明白为什么绘制的红轴与椭圆的想象主轴不一样。他们有不同的角度和长度。其次,我不确定我是否使用正确的公式来绘制旋转椭圆。绘制(菲涅耳)椭圆和长轴

f=217.25; 
Ht=45; 
Hr=2.5; 

figure (10); 
x1=0; 
x2=2.415512976422468e+04; 
y1=2.609242854399548e+02+Ht;% Ht is trasmitter antenna height 
y2=40.819199999995895+Hr;% Hr is receiver antenna height 

% plot line of sight (major axis of ellipse) 
hold on,plot([x1 x2],[y1 y2],'r') 

% Plot 1st Fresnel zone - ELLIPSE 
fr=f*1e6;% f in Hz 
c=2.997925e8;% speed of light in m/s 
lambda=c/fr; % wavelength in meters 
a = 1/2*sqrt((x2-x1)^2+(y2-y1)^2); %majoraxis/2 
r = sqrt(lambda*a/2);% b=r %secondaxis/2 

t = linspace(0,2*pi,300); 
X = a*cos(t); 
Y = r*sin(t); 
w = atan2(y2-y1,x2-x1); %angle of two points 
x = (x1+x2)/2 + X*cos(w) - Y*sin(w); 
y = (y1+y2)/2 + X*sin(w) + Y*cos(w); 
hold on, plot(x,y,'-k') 
grid on 

Fresnel ellipse

回答

0

我没有看到你的代码使椭圆与旋转的任何问题。我很惊讶红线似乎不符合主轴。

如果您绘制的椭圆不随其主轴一起旋转,然后旋转,它看起来与您的图片完全相同。

X = a*cos(t); 
X = [X -a]; 
Y = r*sin(t); 
Y = [Y 0]; 
x = xmid + X*cos(w) - Y*sin(w); 
y = ymid + X*sin(w) + Y*cos(w); 

所以我觉得可能是由于在Matlab图形平滑是由于Jaggies或其他产物。我也无法理解。我知道我的答案可能不是最好的答案,但你从我的最终确认这个有趣的现象。我在Matlab 2017a中运行。

顺便说一句,我在你的代码中发现的唯一问题不在于椭圆图。我相信,在这一行

r = sqrt(lambda*a/2);% b=r %secondaxis/2 

应该

r = sqrt(lambda*a)/2;% b=r %secondaxis/2 
0

我@Y同意。长安,我认为该代码是正确的模r中的变化,并为完整起见,请注意,如果你调用

axis equal 

,所以我猜它与MATLAB绘图做这个问题就不存在了,但我不不明白为什么。感谢您发现这个问题!

+0

我有一个完全错误的情节使用轴平等 – kosar