MATLAB Answers


Plotting curves with increasing radius

Asked by James
on 21 Aug 2013

Dear all,

I wanted to know if there is any way to plot a curve with increasing radius. This curve has to go around a circle.

Thanks for your help.


on 21 Aug 2013

@ Roger Stafford: A spiral does not work because, I am not looking for a circle. I want a curve with increasing radius (from a fixed point) over a part of a circle. It would be easier to explain if could just show you a picture of what I was trying to achieve. Sorry about the confusion.

@ Image Analyst: I will be glad to upload an image but I am not sure how to do so here. If you could guide me I will do that. Sorry for the confusion.

Bring up your diagram somehow on the computer, be it in Photoshop or whatever. Type alt-Printscreen to capture the current window into the clipboard. Go to and type control-V to paste it in. Note the URL it gives you and come back here and tell us what it is.

on 21 Aug 2013

@ Image Analyst: Thank you telling me how to do that. Below is the URL for the image. Hope it helps. The figure is of 3 different curves. The center is a circle, the other two I have the data for them but I am not sure not to plot them.


No products are associated with this question.

3 Answers

Answer by Walter Roberson
on 21 Aug 2013
 Accepted answer

Your sample diagram look like spirals to me, other than that the radius might not be increasing linearly.

Use pol2cart() to switch between an (r, theta) form vs (x,y) coordinates.


on 21 Aug 2013

I did try that but this is the result As you can see there is no full circle there. Maybe that's a mistake with my data or something else. May be its right and I just need to trim the curves.

Anyways, thank you for your time and help. I really appreciate it.

I see a circle and two spirals. Is this what you're looking for?

    theta = linspace(pi/2+2*pi, pi/2, 100);
    r = cell(3,1);
    r{1} = ones(size(theta));  % The circle
    r{2} = linspace(1, 0.5, 60); % Spiral in
    r{3} = linspace(1, 1.5, 60); % Spiral out
    for ii = 1:3
        [x{ii}, y{ii}] = pol2cart(theta(1:length(r{ii})), r{ii});
    xy = [x;y]; plot(xy{:}); axis equal;
on 21 Aug 2013

@Kelly Kearney: Thank you. That works perfect.

Answer by Image Analyst
on 21 Aug 2013

You say "I have the data for them" so why don't you just use the plot() function and plot them? Am I missing something???

  1 Comment

on 21 Aug 2013

I have cropped the curve and that does make it better but I cannot get it to plot the full circle. I tried using a circle function for the circle but that failed too. Here is my code:

vehicle.a = 1.4; vehicle.b = 1.6; vehicle.m = 1600; vehicle.k = 1.5;
vehicle.l = vehicle.a + vehicle.b; vehicle.I = vehicle.m*vehicle.k^2;
vehicle.Cf = 6e4; vehicle.Cr = 6e4; vehicle.Ct = vehicle.Cf + vehicle.Cr;
% steering characteristics of the vehicle
steer.u = 1:1:40;
steer.a = [1.4 1.5 1.6]; steer.b = [1.6 1.5 1.4];
for i = 1:3
    loop.a = steer.a(i);
    loop.b = steer.b(i);
    steer.s (:,i) = (loop.a*vehicle.Cf - loop.b*vehicle.Cr)/vehicle.Ct;
% Relations of turn radius and vehicle speed for constant steer angle = degtorad (3);
for j = 1:3
    loop.s = steer.s(j);
    for i = 1:40
        loop.Vx = steer.u(i);
        steer.R(i,j) = (vehicle.l/*(1-(((vehicle.Ct*loop.s*vehicle.m)/(2*vehicle.l^2*vehicle.Cf*vehicle.Cr))*loop.Vx^2));
% Change in turn radius with vehivle speed
loop.R = 50;
for j = 1:3
    loop.s = steer.s(j);
    for i = 1:40
        loop.Vx = steer.u(i);,j) = (vehicle.l/loop.R)*(1-(((vehicle.Ct*loop.s*vehicle.m)/(2*vehicle.l^2*vehicle.Cf*vehicle.Cr))*loop.Vx^2));
for i = 1:3
    steer.r = abs(,i));
    [loop.r,loop.theta] = spiral(steer.r);
    steer.radius(:,i) = loop.r(:,1);
    steer.theta(:,i) = loop.theta(:,1);
%Change of turning with increase of vehicle speed. 
figure (4)
hold on
title('Change of turning with increase of vehicle speed')
hold off

The code is not yet cleaned up but that is no problem. Thank you for for taking such an interest in helping me.

Answer by David Sanchez
on 21 Aug 2013

Try this out:

[x,y] = meshgrid(1:150,1:100);
[th, rho] =  cart2pol(x - 75,y - 50); % convert to polar
% spiral centered at (75,50)
Img = sin(r/3 + th);
imagesc(Img); colormap(hot);
axis equal; axis off;

  1 Comment

on 21 Aug 2013

Thank you for your help, but I am not looking to plot a spiral. I wanted to plot a curve with the radius increasing from a fixed distance.

Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!