Хорошо, я понял. Пример кода Java:
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)));
}
}
Я не ожидал, что это создаст гладкие кривые, но это работает очень хорошо.
-1. Серьезно посмотрите http://en.wikipedia.org/wiki/Polar_coordinate_system и узнайте, как преобразовать (r, t) в (x, y). Если у вас есть вопрос программирования, отправьте его снова в SO. – ja72
@Raoul, ваш вопрос не содержал ссылок на какой-либо язык программирования. Дело в том, что ваш вопрос - это NPR, и только ваш ответ и правильная маркировка делают это (едва). Кроме того, призывать кого-то к рывкам за то, что вы правы, здесь неприемлемо. – Will
Язык программирования нерелевантный псевдокод достаточно хорош, но я просил, как рисовать непрерывную кривую, как изображение, которое я разместил, поэтому по существу я хотел знать, как реализовать плоттер, который создал изображение, которое я показал. Я не понимаю, как это оффтоп. Также я не вижу, как jalexiou прав, потому что он полностью пропустил вопрос о том, что очевидно. Может быть, вопрос может быть не достаточно ясным, но кто-то извергает кого-то из-за того, что это неприемлемое поведение от моего POV, и я называю это тем, что есть, если вам это нравится или нет. –