Clear Filters
Clear Filters

How to rotate a hyperbola drawn along with the reference line?

6 views (last 30 days)
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.

Accepted Answer

Matt J
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])

More Answers (0)

Products


Release

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!