How to rotate a hyperbola drawn along with the reference line?
6 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Matt J
on 23 May 2024
Edited: Matt J
on 23 May 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 Comments
More Answers (0)
See Also
Categories
Find more on Filter Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!