Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

I have this polar function:

r = A / log(B * tan(t / 2 * N)

where A, B, N are arbitary parameters and t is the angle theta in the polar coordinate system.

Example graph for A=8, B=0.5, N=4

Sample graph

How can I plot this function onto a cartesian coordinate grid so I get an image like the one above?

thanks

share|improve this question

migrated from stackoverflow.com Jan 1 '11 at 22:24

This question came from our site for professional and enthusiast programmers.

8  
-1. Seriously look at en.wikipedia.org/wiki/Polar_coordinate_system and find out how to convert (r,t) into (x,y). If you have a programming question then post it again at SO. –  ja72 Jan 1 '11 at 21:39
1  
This is not a simple matter of converting polar to cartesian so this is in fact a programming question. If you would have bothered to use your brain you could've probably figured that out by reading my answer to this question which I posted about 43 minutes before your unnecessary comment and downvote. Jerk. –  Raoul Duke Jan 1 '11 at 21:58
2  
Whether it is a valid description doesn't change the fact that it is unprofessional. I also don't understand why this question was migrated. –  Qiaochu Yuan Jan 2 '11 at 15:03
1  
1  

2 Answers 2

Incomplete pseudocode sample, but you should get the idea:

for t in [0, 2pi):
    r = /* whatever you got depending on t */
    x = r * cos(t)
    y = r * sin(t)
    draw line to (x,y)
share|improve this answer
1  
Thanks for your answer but I'm sorry to say this is not very helpful. This won't produce a smooth curve. How would you do that exactly with this pseudocode? Also please elaborate on how to iterate from 0 to 2pi because this is a continuous range of real numbers this isn't as easy as your pseudocode makes it out to be. –  Raoul Duke Jan 1 '11 at 20:10
2  
The answer exactly matches the question. Never in the original question metions that the answer has to produce a smooth curve (to what criteria?) –  ja72 Jan 1 '11 at 21:34
1  
@ jalexiou I wrote "so I get an image like the one above" –  Raoul Duke Jan 1 '11 at 22:00

Ok, I figured it out. Some example Java code:

import static java.lang.Math.*;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class TestPolarPlot {
    public static void main(String[] args) {
    final int width = 512;
    final int height = 512;
    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
    Graphics g = img.getGraphics();
    g.setColor(Color.black);
    g.fillRect(0, 0, width, height);
    g.setColor(Color.white);
    final double A = 8;
    final double B = 0.5;
    final double N = 4;
    final double scale = 128;
    final double zoom = 50;
    final double step = 1 / scale;
    Point last = null;
    final Point origin = new Point(width/2, height/2);

    for (double t = 0; t <= 2*PI; t+= step) {
        final double r = zoom * polarFunction(t, A, B, N);
        final int x = (int)round(r * cos(t));
        final int y = (int)round(r * sin(t));
        Point next = new Point(x, y);
        if (last != null) {
            g.drawLine(origin.x + last.x, origin.y + last.y,
                origin.x + next.x, origin.y + next.y);
        }
        last = next;
    }

    JFrame frame = new JFrame("testit");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new JLabel(new ImageIcon(img)));
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

    public static double polarFunction(double t, double A, double B, double N) {
        return A / log(B * tan(t / (2 * N)));
    }
}

I didn't expect this to create smooth curves but it works pretty well.

alt text alt text

share|improve this answer

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.