Your question, your audience. Choose who sees your identity—and your question—with question security.

http://www.experts-exchange.com/Programming/Languages/MatLab/Q_24269123.html

following on from the above;

I understand the concept better now thanks to the link provided

the function xfm1 rotates a point on the locus of the hyperbola about 60 degrees from P(x',y') to P(x",y") around (xo,yo).

but I am stuck on how xfm1 below is incorporated into create_hyperbola as in the code box below;

Can someone please help

following on from the above;

I understand the concept better now thanks to the link provided

the function xfm1 rotates a point on the locus of the hyperbola about 60 degrees from P(x',y') to P(x",y") around (xo,yo).

but I am stuck on how xfm1 below is incorporated into create_hyperbola as in the code box below;

Can someone please help

```
% 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); % array of x values for plot : This function generates vector with 1001 points equally distributed between -xmax and xmax.
%1001 is probably to have 500 points on one side (>0), 500 on another side (<0) and to include 0 itself. So you will have
%more natural numbers.
a = 5; b = 3;
y=sqrt(((x.^2)./(b^2)+1).*a^2); % corresponding y values
plot(x,y)
hold on % add to current plot
plot(x,-y) % Plot other half of hyperbola
% plot the elipse
% y^2/a^2 - x^2/b^2 = 1
y=sqrt(((-x.^2)./(b^2)+1).*a^2); % corresponding y values
plot(x,y)
plot(x,-y) % Plot other half of elipse
axis([-xmax xmax -ymax ymax]) % specify axis limits
xlabel('x')
ylabel('y')
title(['Hyperbola and elipse $y^2/a^2 - x^2/b^2 = 1$;$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
f1=sqrt(a.^2+b.^2);
f2=-(sqrt(a.^2+b.^2));
plot([0 0],[f1 f2],'.')
text(0,f1,'\leftarrow +d','VerticalAlignment','middle','HorizontalAlignment','left')
text(0,f2,'\leftarrow -d','VerticalAlignment','middle','HorizontalAlignment','left')
f3=sqrt(a.^2-b.^2);
f4=-(sqrt(a.^2-b.^2));
plot([0 0],[f3 f4],'.')
text(0,f3,'\leftarrow +c','VerticalAlignment','middle','HorizontalAlignment','left')
text(0,f4,'\leftarrow -c','VerticalAlignment','middle','HorizontalAlignment','left')
text(0,a, '\leftarrow +a')
text(0,-a, '\leftarrow -a')
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;
```

You can read more about m-files, scripts and functions here:

http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f7-38085.html

I should add, that function can be in the same m-file with another function, is it's nested function. If you are interested in this, see here:

http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f4-39683.html

but how do i import the rotated values?

do I use x = linspace(-xmax,xmax,1001);

how do I use the function xfm1(xin,yin,theta,x_offse

thats where I am getting confused

When you call function in Matlab, input and output parameters names do not have to match those in function implementation.

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

```
theta=1; % in radians, 1 radian = 180/pi degrees
xoff=0;
yoff=0;
[xout,yout] = xfm1(x,y,theta,xoff,yoff);
plot(xout,yout)
```

```
% 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); % array of x values for plot : This function generates vector with 1001 points equally distributed between -xmax and xmax.
%1001 is probably to have 500 points on one side (>0), 500 on another side (<0) and to include 0 itself. So you will have
%more natural numbers.
a = 5; b = 3;
y=sqrt(((x.^2)./(b^2)+1).*a^2); % corresponding y values
plot(x,y)
hold on % add to current plot
plot(x,-y) % Plot other half of hyperbola
% plot the elipse
% y^2/a^2 - x^2/b^2 = 1
y=sqrt(((-x.^2)./(b^2)+1).*a^2); % corresponding y values
plot(x,y)
plot(x,-y) % Plot other half of elipse
axis([-xmax xmax -ymax ymax]) % specify axis limits
xlabel('x')
ylabel('y')
title(['Hyperbola and elipse $y^2/a^2 - x^2/b^2 = 1$;$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
f1=sqrt(a.^2+b.^2);
f2=-(sqrt(a.^2+b.^2));
plot([0 0],[f1 f2],'.')
text(0,f1,'\leftarrow +d','VerticalAlignment','middle','HorizontalAlignment','left')
text(0,f2,'\leftarrow -d','VerticalAlignment','middle','HorizontalAlignment','left')
x1=10;
y1=sqrt(((x1.^2)./(b^2)+1).*a^2);
line([0 x1], [f1 y1],'color','r')
line([0 x1], [f2 y1],'color','r')
f3=sqrt(a.^2-b.^2);
f4=-(sqrt(a.^2-b.^2));
plot([0 0],[f3 f4],'.')
text(0,f3,'\leftarrow +c','VerticalAlignment','middle','HorizontalAlignment','left')
text(0,f4,'\leftarrow -c','VerticalAlignment','middle','HorizontalAlignment','left')
text(0,a, '\leftarrow +a')
text(0,-a, '\leftarrow -a')
theta=1; % in radians, 1 radian = 180/pi degrees
xoff=0;
yoff=0;
[xout,yout] = xfm1(x,y,theta,xoff,yoff);
plot(xout,yout)
```

tutorial

toa.pdf

toa.pdf

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.

Theta=60 deg, Xo=10, Yo=5.

Basically now before drawing anything you need to transform x and y coordinates with your function. Then plot new coordinates.

I didn't put focus points on the figure. Hope you can do it.

Open in new window