【问题标题】:Draw polygon with equal sides and angles绘制边和角相等的多边形
【发布时间】:2014-05-25 22:45:06
【问题描述】:

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

    }

提前致谢。

【问题讨论】:

    标签: java swing polygon bresenham


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 2016-04-08
      • 2016-03-25
      • 1970-01-01
      • 2016-03-19
      • 2013-04-08
      • 1970-01-01
      • 2023-01-30
      相关资源
      最近更新 更多