如何确定一组坐标是否是正多边形的顶点?

时间:2015-09-23 13:58:23

标签: c++ algorithm math computational-geometry

  

我有一个工作类,可以生成正则多边形:多边形中心多边形半径边数。两个私有成员函数here的实现细节。

类接口如下所示:

class RegularPolygon: public Closed_polyline{
public:
    RegularPolygon(Point c, int r, int n)
        : center(c), radius(r), sidesNumber(n) 
    { generatePoly(); }

private:
    Point center;
    int radius;
    int sidesNumber;
    void generatePoly();
    void rotateCoordinate(Point& axisOfRotation, Point& initial, 
                          double angRads, int numberOfRotations);
};

问题:

我被要求实现第二种使用生成正多边形的方法 一组坐标 1 。构造函数首先需要对传递的坐标执行有效性检查

RegularPolygon(vector<Point>& vertices)
   :center(), radius(), sideNumber()
{
   // validity check of the elements of vertices
}

我最初的想法是:

  1. 检查每对坐标是否产生相同的边长。
  2. 检查每条线(由一对坐标生成)的相对方向。 (它们应该相互成角度360 / 多边形
  3. 问题:

    1. 如何检查所有线条是否正确定位,即它们的相对方向? solved
    2. 是否有任何标准算法可以确定一组坐标是否是正多边形的顶点?
    3. 注意:

      检查[1]以及有关生成坐标的所有问题和答案后。我没有找到我正在寻找的东西。

      1按顺​​时针顺序,使用向量传递:vertices

      可以找到所有用于编译的附加文件:here。可以找到 FLTK here

1 个答案:

答案 0 :(得分:4)

如果你能找到多边形的中心,你的任务就会简单得多。然后你就可以检查从中心到每个顶点的距离,以验证顶点在圆上的位置,还可以检查从中心到每个顶点的角度。

幸运的是,有一个easy formula用于查找多边形的中心:您需要做的就是平均两个维度中的坐标。掌握中心坐标,验证

  • 从中心到每个顶点的距离是相同的,
  • 连续顶点之间的角度相同,并且该角度等于2π/ N弧度

这两项检查足以确保您具有正多边形。您无需检查连续顶点之间的距离。