我正在使用Bresenham线算法来绘制一条简单的线。 我需要帮助使用此算法来创建具有相等边和角度的多边形。 边将是由Bresenham算法创建的线,但是如何使用创建的线来绘制具有X个边和相等角度的多边形?
以下是我使用的线算法:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(Color.RED);
for (double t = 0; t < 1; t += 0.01) {
Point2D p = between(p1, p2, t);
g2d.fillRect((int)p.getX(), (int)p.getY(), 5, 5);
}
g2d.dispose();
}
public Point2D between(Point p1, Point p2, double time) {
double deltaX = p2.getX() - p1.getX();
double deltaY = p2.getY() - p1.getY();
double x = p1.getX() + time * deltaX;
double y = p1.getY() + time * deltaY;
return new Point2D.Double(x, y);
}
提前致谢。
答案 0 :(得分:0)
假设N边多边形的第(i-1)条边在点x(i-1),y(i-1)处结束并且以角度a(i-1)相对旋转到水平轴。因此,下一个边缘将以角度旋转:
a(i) = a(i-1) + pi - (N-2)/N*pi
并将结束:
x(i) = x(i-1) + L * cos(a(i))
y(i) = y(i-1) + L * sin(a(i))
其中L是一条边的长度。因此,将i从1迭代到N并连接点,您将获得多边形。
如果要使用其中心点x(c),y(c)和包含圆的半径R来构建多边形,请按以下方式计算点坐标:
x(i) = x(c) + R * cos(2*pi*i/N)
y(i) = y(c) + R * sin(2*pi*i/N)