【发布时间】:2011-07-14 14:03:09
【问题描述】:
有谁知道我如何开始在 java 中绘制极坐标图并在该图上绘制一些点?我的意思是圆圈和线条,我希望用类似swing的东西来做到这一点,而不是使用像Jfreechart这样的任何库 谢谢
【问题讨论】:
有谁知道我如何开始在 java 中绘制极坐标图并在该图上绘制一些点?我的意思是圆圈和线条,我希望用类似swing的东西来做到这一点,而不是使用像Jfreechart这样的任何库 谢谢
【问题讨论】:
你可能想看看Lissajous curves; a = 5, b = 4 (5:4) 的示例如下所示。
附录:一旦你了解了如何在 xy 坐标中绘制点,那么你应该看看converting between polar and Cartesian coordinates。
public class LissajousPanel extends JPanel {
private static final int SIZE = 400;
private GeneralPath path = new GeneralPath();
@Override
public Dimension getPreferredSize() {
return new Dimension(SIZE, SIZE);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
double dt = Math.PI / 180;
int w = getWidth() / 2;
int h = getHeight() / 2;
path.reset();
path.moveTo(w, h);
for (double t = 0; t < 2 * Math.PI; t += dt) {
double x = w * Math.sin(5 * t) + w;
double y = h * Math.sin(4 * t) + h;
path.lineTo(x, y);
}
g2d.setColor(Color.blue);
g2d.draw(path);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new LissajousPanel());
f.pack();
f.setVisible(true);
}
});
}
}
【讨论】:
Java2D 是官方 JDK 的一部分,非常适合您的目的。您可以在此处找到 Java 文档:Java2d
【讨论】:
您需要使用 Java2D 来绘制符合您需要的圆/多边形。在您希望绘制的控件的public void paint(Graphics g) 方法中,您可以绘制到 Graphics 对象。可能有帮助的各种事情的一些示例:
//Draw a polygon
public void paint(Graphics g)
{
int xVals[] = {25, 145, 25, 145, 25};
int yVals[] = {25, 25, 145, 145, 25};
g.drawPolygon(xVals, yVals, xVals.length);
}
//Draw an ellipse/circle
public void paint(Graphics g)
{
int xPos = 50;
int yPos = 50;
int xWidth = 100;
int yWidth = 100;
g.drawOval(xPos, yPos, xWidth, yWidth);
}
请记住,drawOval、drawRect 等调用的位置是形状的左上角,而不是形状的中心。如果您希望椭圆以 50 为中心,宽度为 100,则需要将 xPos 和 yPos 设置为 0。
【讨论】:
paint(...) 方法(除非你必须这样做)。而是覆盖组件的 paintComponent(...) 方法。