Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Mathematica can use ContourPlot to draw implicit Cartesian equations, but doesn't seem to have a similar function to plot an implicit polar equation, for example

$\theta ^2=\left(\frac{3 \pi }{4}\right)^2 \cos (r)$

What's the best way to do this?

share|improve this question
    
Well, it's a good question and I see solutions people are coming up with are different. Always interesting to see and compare, no harm in it. –  Vitaliy Kaurov Jan 23 '12 at 20:39
    
@David can I ask why you removed the "storytelling paragraph"? I only wanted to let people know that I planned to answer myself, and would have deleted it myself later. –  one-more-minute Jan 23 '12 at 20:56
    
We don't want to discourage people from answering questions. Even if you have one solution, there might be others that are enlightening for yourself or others. –  Brett Champion Jan 23 '12 at 21:01
    
Makes sense, I just didn't want to make others spend their time repeating a solution I already have written out. Nevermind, as you said, all contributions are helpful. –  one-more-minute Jan 23 '12 at 21:09

5 Answers 5

up vote 20 down vote accepted

Since ContourPlot[] returns a GraphicsComplex, you could also replace the point list of the plot with g @@@ pointlist where g is the coordinate transformation. For example

f[r_, th_] := th^2 - (3 Pi/4)^2 Cos[r]
g[r_, th_] := {r Cos[th], r Sin[th]} 

pl = ContourPlot[f[r, th] == 0, {r, 0, 8 Pi}, {th, 0, 2 Pi}, PlotPoints -> 30];
pl[[1, 1]] = g @@@ pl[[1, 1]];

Show[pl, PlotRange -> All]

which produces

Mathematica graphics

The advantage of this method is that it also works for coordinate transformations for which the inverse transformation is hard to find.

share|improve this answer
    
cheeky, cheeky... +1 –  acl Jan 23 '12 at 20:43
4  
Very interesting point, applying the coordinate transformation to the finished plot. However, I think this might fail for high frequency functions/coordinate systems etc., since after plotting things like the step distance between points are already set. –  David Jan 23 '12 at 20:46
    
This is basically what I ended up doing, I turned it into a self-contained function so I'll post it up later. +1 for reading my mind. @David I did find that quality was reduced but bumping up MaxRecursions helps without slowing things down too much. –  one-more-minute Jan 23 '12 at 20:49
1  
I would include AspectRatio -> Automatic in Show so that this "looks nice." –  Mr.Wizard Jan 24 '12 at 14:20

If you allow negative radii, there's another entire half of the solution:

PolarPlot[
   Evaluate[Flatten[
      Table[{-ArcCos[(16 t^2)/(9 Pi^2)], ArcCos[(16 t^2)/(9 Pi^2)]} + k 2 Pi, 
            {k, -2, 2}]
      ]], 
   {t, -Pi, Pi}, 
   PlotStyle -> Table[Directive[Thick, Hue[i/10]], {i, 10}]
   ]

enter image description here

share|improve this answer

All the other three solutions use ContourPlot. Here's a solution using PolarPlot.

PolarPlot[{ArcCos[#2^2/(3 π/4)^2] + 2 π #1, 
    -ArcCos[#2^2/(3 π/4)^2] + 2 π (#1 + 1)} & @@ QuotientRemainder[Abs@ θ, 2 π], 
    {θ, -7 π, 8 π}, PlotStyle -> {Thick, Darker@Green}]

enter image description here

This makes use of the fact that the solution to $\theta^2=\displaystyle\left(\frac{3\pi}{4}\right)^2\cos(r)$ is

$$r=\pm\arccos\left(\frac{16\theta^2}{9\pi^2}\right)+2\pi n,\ n\in\mathbb{Z}$$

share|improve this answer

You can do something like this:

ContourPlot[ArcTan[x,y]^2 == (3 Pi/4)^2 Cos[Sqrt[x^2 + y^2]], 
{x, -23, 23}, {y, -23, 23}, ContourStyle -> Directive[Thick, Orange]]

enter image description here

share|improve this answer
    
I think you're still missing a square on the 3Pi/4. –  Brett Champion Jan 23 '12 at 21:21
    
@BrettChampion Yes, thanks, have to get my math straight ;-) –  Vitaliy Kaurov Jan 24 '12 at 2:15

Does this

ContourPlot[
 Evaluate@With[
   {r = Sqrt[x^2 + y^2],
    \[Theta] = ArcTan[x, y]},
   \[Theta]^2 - Cos[r] \[Equal] 0
   ],
 {x, 0.1, 4 Pi}, {y, 0, 4 Pi}
 ]

work?

Plot:

Mathematica graphics

share|improve this answer
    
This is a great method, unfortunately it's not as useful if you want to specify the plotting range in polar, rather than cartesian, coordinates. +1 for your ContourPlot substitution, this is something I tried originally but couldn't get to work. –  one-more-minute Jan 23 '12 at 21:17
    
@myk thanks, Heike's is definitely cleverer and also more useful if you can't invert the transformation easily –  acl Jan 23 '12 at 21:20

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.