2017-06-15 3 views
2

J'essaie de dessiner l'ellipse de Fresnel et une ligne entre deux points (x1, y1) et (x2, y2). De plus j'essaye de faire tourner l'ellipse en utilisant atan2. D'abord, je ne comprends pas pourquoi l'axe rouge dessiné n'est pas le même que l'axe principal imaginaire de l'ellipse. Ils ont à la fois un angle et une longueur différents. Deuxièmement, je ne suis pas sûr si j'utilise les bonnes formules pour dessiner une ellipse avec rotation.Dessin (Fresnel) ellipse et grand axe

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

Répondre

0

Je ne vois pas de problème à faire une ellipse avec rotation dans votre code. J'ai été surpris que la ligne rouge ne semble pas correspondre à l'axe principal.

Si vous avez tracé l'ellipse sans rotation avec son axe principal, puis pivotée, elle a exactement la même apparence que votre image.

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); 

Je pense donc qu'il peut être dû à Jaggies ou tout autre artefact en raison de lissage dans Matlab graphique. Je ne peux pas comprendre non plus. Je comprends que ma réponse ne soit pas la meilleure, mais vous obtenez confirmation de ma part de ce phénomène intéressant. J'ai couru dans Matlab 2017a. Par ailleurs, la seule préoccupation que j'ai trouvée dans votre code ne concerne pas le dessin de l'ellipse. Je crois en cette ligne

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

devrait être

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

Je suis d'accord avec @Y. Chang, je pense que le code est correct modulo le changement de r, et par souci d'exhaustivité, notez que ce problème disparaît si vous appelez

axis equal 

donc je suppose qu'il doit faire avec plotting Matlab, mais je ne Je ne comprends pas pourquoi. Merci d'avoir repéré ce problème!

+0

J'ai un tracé totalement faux en utilisant l'axe égal – kosar