我有一个工作类,可以生成正则多边形:多边形中心和多边形半径和边数。两个私有成员函数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
}
我最初的想法是:
答案 0 :(得分:4)
如果你能找到多边形的中心,你的任务就会简单得多。然后你就可以检查从中心到每个顶点的距离,以验证顶点在圆上的位置,还可以检查从中心到每个顶点的角度。
幸运的是,有一个easy formula用于查找多边形的中心:您需要做的就是平均两个维度中的坐标。掌握中心坐标,验证
这两项检查足以确保您具有正多边形。您无需检查连续顶点之间的距离。