Can someone please check my Matlab code to rotate a hyperbola and see what I am doing wrong

Please find the attached pdf tutorial for matlab and multilateration.

page 4. Please see code in the codebox below however when run it does not rotate the hyperbola as per the picture on page 4. It is in a different position?

Why is this?
% Program to plot the hyperbola
% y^2/a^2 - x^2/b^2 = 1
% The hyperbolae are open up/down, so that x is the independent variable
% for plotting. (Using the form x^2/a^2 - y^2/b^2 = 1 requires that y be
% the independent variable, which is awkward programming-wise.)
clear % all variables
figure(1), hold off % start a new figure
set(gca,'FontSize',14) % adjust fontsize
xmax = 30; ymax = 20;
x = linspace(-xmax,xmax,1001);
 
a = 5; b = 3;
theta=60*pi/180; % in radians, 1 radian = 180/pi degrees
xoff=10;
yoff=5;
y=sqrt(((x.^2)./(b^2)+1).*a^2); % corresponding y values
[xout,yout] = xfm1(x,y,theta,xoff,yoff); % rotation and shift
 
plot(xout,yout)
hold on % add to current plot
[xout,yout] = xfm1(x,-y,theta,xoff,yoff); % rotation and shift of negative part
plot(xout,yout) % Plot other half of hyperbola
 
axis([-xmax xmax -ymax ymax]) % specify axis limits
xlabel('x')
ylabel('y')
 
% Add axes
plot([0 0],[-ymax ymax],'k') % y axis
plot([-xmax xmax],[0 0],'k') % x axis
title(['Hyperbola $y^2/a^2 - x^2/b^2 = 1$; $a$ = ', num2str(a), ...
', $b$ = ', num2str(b),';'],'Interpreter','latex')
% Add axes
plot([0 0],[-ymax ymax],'k') % y axis (black line - k)
plot([-xmax xmax],[0 0],'k') % x axis

Open in new window

LVL 1
jtiernan2008Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
yuk99Connect With a Mentor Commented:
Usually positive angles rotate counterwise, negative clockwise. If you want opposite direction, just change both sines signes in rotatino matrix, or use negative angle. Again line along y axis has 0 degree.
0
 
yuk99Commented:
I got almost the same figure as on your tutorial with this code without changing anything. I used the same xfm1 function file as we discussed before.
Do you get any figure with this code. If yes, how it's different from what you need? If no, do you get any errors?
0
 
jtiernan2008Author Commented:
thanks for your response

yes, I know I must be doing something wrong....
please see the attached with the code run and a screenshot from the tutorial.
It appears to not rotate the same.
pic.jpg
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
yuk99Commented:
Change your rotation matrix in xfm1 function. I think we discussed this before. Change the sign for sines.
0
 
yuk99Commented:
0
 
jtiernan2008Author Commented:
"BTW I think you made a wrong rotation matrix. No, it's correct, but rotate in not usual direction. It should be
xfm = [cos(theta) -sin(theta); ...
      sin(theta) cos(theta"

=> But it is the same as you can see below;
function [xout,yout] = xfm1(xin,yin,theta,x_offset,y_offset)
% Program to rotate and translate x,y values from x",y" to x,y space.
% Written to plot hyperbolas for time of arrival code.
% theta value assumed to be in radians.
 
%  rotation matrix
xfm = [cos(theta) -sin(theta); ...
      sin(theta) cos(theta)];
% make x,y values into a column vector
r_in = [xin; yin];
% rotate 
r_out = xfm*r_in;
x = r_out(1,:); y = r_out(2,:);
xout = x + x_offset; 
yout = y + y_offset;

Open in new window

0
 
jtiernan2008Author Commented:
thanks a million..
I understand now
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.