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

C++ 如何确定一组坐标是否为正多边形的顶点?,c++,algorithm,math,computational-geometry,C++,Algorithm,Math,Computational Geometry,我有一个工作类,可以生成给定的正多边形:多边形中心、多边形半径和边数。两个私有成员函数的实现细节 类接口如下所示: class RegularPolygon: public Closed_polyline{ public: RegularPolygon(Point c, int r, int n) : center(c), radius(r), sidesNumber(n) { generatePoly(); } private: Point cent

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

类接口如下所示:

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。构造函数首先需要对传递的坐标进行有效性检查:

我最初的想法是:

检查每对坐标是否产生相同的边长。 检查由一对坐标相对方向生成的每条线。它们之间的角度应为360/多边形边 问题: 如何检查所有线是否正确定向,即它们的相对定向? 是否有任何标准算法可以确定一组坐标是否为正多边形的顶点? 注: 检查并回答有关生成坐标的所有问题后。我没有找到我要找的东西

1按顺时针顺序,与向量一起传递:顶点


可以找到所有其他要编译的文件:。FLTK可以找到。

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

幸运的是,找到多边形的中心有一个简单的方法:你所需要做的就是平均两个维度的坐标。在掌握中心坐标的情况下,验证

从中心到每个顶点的距离相同,并且 连续顶点之间的角度相同,且该角度等于2π/N弧度
这两项检查足以确保您具有正多边形。您不需要检查连续顶点之间的距离。

请记住,此处必须使用ε比较。@Bartek Banachewicz您的意思是某些差异应该小于“是”,准确地说。瞧,你只能回答这组顶点形成一个精度为0.00的正多边形。。。01@simplicisveritatis您不需要旋转多边形,只需平均每个维度中其顶点的坐标即可。无论多边形的方向如何,该公式都有效。加上1,这太棒了!
RegularPolygon(vector<Point>& vertices)
   :center(), radius(), sideNumber()
{
   // validity check of the elements of vertices
}