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
}