Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab generating parametric curves

  1. Jan 14, 2010 #1
    I want to graph the following parametric curve using matlab:

    x = 31cos(t)-7cos(31/7)t
    y = 31sin(t)-7sin(31/7)t

    0 ≤ t ≤ 14π

    This is the code I used:

    Code (Text):
    syms t
    t=[0:1:19*pi]
    x=31*cos(t)-7*cos(31/7)*t;
    y=31*sin(t)-7*sin(31/7)*t;
    plot(t,y,t,x)
    But the graph which Matlab generated is very different from what it's supposed to look like. Is there a problem with my codes? How do we graph this parametric curve (it's a complex curve)? Thanks.
     
  2. jcsd
  3. Jan 15, 2010 #2

    MATLABdude

    User Avatar
    Science Advisor

    When you use a (2D) parametric equation, you don't express x or y in terms of each other, you do it in terms of a third variable (as you've done). However, at the end of the day, you should still have a set of X-Y coordinates.

    Instead of plotting x as a function of t, and then plotting y as a function of t (as you're doing), just plot y as a function of x:
    >> plot(x, y)
     
  4. Jan 15, 2010 #3
    Well, the curve I'm trying to produce is supposed to look like this:

    [​IMG]

    But when I even use this code:

    Code (Text):
    syms t
    t=[0:1:19*pi]
    x=31*cos(t)-7*cos(31/7)*t;
    y=31*sin(t)-7*sin(31/7)*t;
    plot(x, y)
    I get this graph:

    [​IMG]

    I can't see the problem. :confused:
     
  5. Jan 15, 2010 #4

    MATLABdude

    User Avatar
    Science Advisor

    Are you sure of your equations? I Googled for parametric spirograph equation and got the following webpage:
    http://linuxgazette.net/133/luana.html

    You may want to try again with:
    x=31*cos(t) - 7*cos((31/7)*t);
    y=31*sin(t) - 7*sin((31/7)*t);

    I don't know if you know about the MATLAB axis command, but you can use it (or rather 'axis square') to have equal scaling on both axes:
    http://www.mathworks.com/access/helpdesk/help/techdoc/ref/axis.html

    EDIT: You may also wish to use a smaller step size for t, say 0.1 or 0.01 instead of 1, as you currently have it.
     
  6. Jan 15, 2010 #5
    As MatlabDude has already pointed out, the problem lies with the parametric equations you're using. For example, the following equivalent Mathematica code

    Code (Text):
    x[t_] := 31 Cos[t] - 7 Cos[31/7] t;
    y[t_] := 31 Sin[t] - 7 Sin[31/7] t;
    ParametricPlot[{x[t], y[t]}, {t, 0, 19 \[Pi]}]
     
    gives the parametric plot


    [​IMG]

    On the other hand, the modified parametric equations

    Code (Text):
    x[t_] := 31 Cos[t] - 7 Cos[31 t/7];
    y[t_] := 31 Sin[t] - 7 Sin[31 t/7];
    ParametricPlot[{x[t], y[t]}, {t, 0, 19 \[Pi]}]
     
    give you the desired plot:

    [​IMG]
     
  7. Jan 15, 2010 #6
    Okay thanks A LOT guys. :)
     
  8. Jan 15, 2010 #7
    By the way, when you are ploting this in Mathematica, what is the code for changing the color of the plot?
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Matlab generating parametric curves
Loading...