Чертеж (френелевский) эллипс и большая ось

Я пытаюсь нарисовать эллипс Френеля и линию между двумя точками (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

Эллипс Френеля

2 ответа

Я согласен с @Y. Чанг, я думаю, что код правильный по модулю изменения в r, и для полноты заметим, что эта проблема исчезает, если вы звоните

axis equal

так что я думаю, это связано с построением матлаба, но я не понимаю почему. Спасибо, что обнаружили эту проблему, хотя!

Я не вижу проблем в создании эллипса с вращением в вашем коде. Я был удивлен, что красная линия не совпадает с главной осью.

Если вы построили эллипс без вращения вместе с его большой осью, а затем повернули, он выглядит точно так же, как ваша картинка.

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

Поэтому я думаю, что это может быть связано с Jaggies или другим артефактом из-за сглаживания в графике Matlab. Я тоже не могу понять. Я понимаю, что мой ответ может быть не самым лучшим, но вы получите подтверждение от моего конца относительно этого интересного явления. Я бегал в Matlab 2017a.

Кстати, единственное беспокойство, которое я обнаружил в вашем коде, это не прорисовка эллипса. Я верю в эту линию

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

должно быть

r = sqrt(lambda*a)/2;% b=r %secondaxis/2
Другие вопросы по тегам