How to rotate a hyperbola drawn along with the reference line?
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have an equation of calculating the radius of hyperbola for drawing specific maps. However, I could only draw hyperbola at origin.
For instance. I want to draw the hyperbola between two points at some known distance. In the code below, I have used the equation to plot the hyperbola when the line is horizontal and starts at original. For finding the xy coordinates, I use the cosine and sine components and then plot.
However, in cases where I have the same distance between the points but not at origin (I tried xy coordinates with same magnitude but different location and rotation), I cannot construct the rotated hyperbola. Is there a way to draw the rotated parabola?
Additionally, my way is inspired from `excel` and is very unituitive. Is there a more convenient way to construct hyperbola in Matlab?
clc
clear all
close all
%% Input values
D = 250; % mm distance
c = 4; % mm/s velocity
del = 10; % a constant
theta = deg2rad(0:5:360); % a variable
for i = 1:length(theta)
angle = theta(i);
R(i) = 1/2*(D*D - del*del*c*c)/(del*c + D*cos(angle)); % Equation of radius of hyperbola
x1(i) = 0;
y1(i) = 0;
x2(i) = R(i)*cos(angle);
y2(i) = R(i)*sin(angle);
end
pta = [0 250];
ptb = [0 0];
figure
tiledlayout(2,1)
nexttile
hold on
plot(pta,ptb,'-o');
plot(x2,y2,'.r')
xlim([0 D])
nexttile
hold on
ptc = [50 250];
ptd = [40 190];
plot(ptc,ptd,'-o');
xlim([0 250])
ylim([0 250])
There may be a simple solution, forgive my trignomatry skills and I will appreciate your help in this regard.
All the best.
2 Kommentare
Akzeptierte Antwort
Matt J
am 23 Mai 2024
Bearbeitet: Matt J
am 23 Mai 2024
%% Input values
D = 250; % mm distance
c = 4; % mm/s velocity
del = 10; % a constant
theta = deg2rad(0:5:360); % a variable
for i = 1:length(theta)
angle = theta(i);
R(i) = 1/2*(D*D - del*del*c*c)/(del*c + D*cos(angle)); % Equation of radius of parabola
x1(i) = 0;
y1(i) = 0;
x2(i) = R(i)*cos(angle);
y2(i) = R(i)*sin(angle);
end
pta = [0 250];
ptb = [0 0];
[cx,cy]=deal(100,200); %translation
pta=pta+cx; ptb=ptb+cy; x2=x2+cx; y2=y2+cy;
h=plot(pta,ptb,'-o',x2,y2,'.r'); axis equal
rotate(h,[0,0,1],30,[cx,cy,0])
axis([mean(pta),mean(ptb)]+[-D;D])
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Filter Analysis finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!