Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绘制等边等角多边形_Java_Swing_Polygon_Bresenham - Fatal编程技术网

Java 绘制等边等角多边形

Java 绘制等边等角多边形,java,swing,polygon,bresenham,Java,Swing,Polygon,Bresenham,我使用Bresenham直线算法来画一条简单的直线。 我需要使用此算法创建具有相等边和角度的多边形的帮助。 边将是由Bresenham算法创建的线,但是如何使用创建的线来绘制边数为X且角度相等的多边形 以下是我使用的直线算法: protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g

我使用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);

    }
受保护的组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g.create();
g2d.setColor(Color.RED);
对于(双t=0;t<1;t+=0.01){
点2dp=介于(p1,p2,t)之间;
g2d.fillRect((int)p.getX(),(int)p.getY(),5,5);
}
g2d.dispose();
}
公共点2D之间(点p1、点p2、双倍时间){
double deltaX=p2.getX()-p1.getX();
双deltaY=p2.getY()-p1.getY();
double x=p1.getX()+时间*deltaX;
双y=p1.getY()+时间*deltaY;
返回新的点2d.Double(x,y);
}
提前感谢。

假设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)