Math 如何确定环点';方向正确吗?
基于 我想出了以下代码:Math 如何确定环点';方向正确吗?,math,geometry,polygon,Math,Geometry,Polygon,基于 我想出了以下代码: bool PointsClockwise(const std::vector<MyPoint>& points) { double sum = 0.0; for(size_t i = 0; i < points.size() - 1; ++i) sum += (points[i+1].x()-points[i].x()) * (points[i+1].y()+points[i].y()); return sum >
bool PointsClockwise(const std::vector<MyPoint>& points)
{
double sum = 0.0;
for(size_t i = 0; i < points.size() - 1; ++i)
sum += (points[i+1].x()-points[i].x()) * (points[i+1].y()+points[i].y());
return sum > 0.0;
}
它是逆时针顺序的,但函数返回true
谢谢 您在求和时遗漏了一条线段,即连接最后一个点和第一个点的线段。 试试看:
bool PointsClockwise(const std::vector<MyPoint>& points)
{
double sum = 0.0;
for(size_t i = 0; i < points.size() - 1; ++i)
sum += (points[i+1].x()-points[i].x()) * (points[i+1].y()+points[i].y());
sum += (points[0].x()-points[points.size()-1].x()) * (points[0].y()+points[points.size()-1].y());
return sum > 0.0;
}
bool points顺时针(const std::vector&points)
{
双和=0.0;
对于(大小i=0;i0.0;
}
您需要包括casei==points.size()-1
,但要做到这一点,您需要在循环中进行一些模块化运算,或者分离出最后一次迭代。实际上,只需初始化sum
到最后一次迭代:
double sum = (points[0].x() - points[points.size() - 1].x())
* (points[0].y() + points[points.size() - 1].y());
并在
i
Ah处结束迭代。事实并非如此。修改我的答案。马上,忘了结尾:)谢谢。
double sum = (points[0].x() - points[points.size() - 1].x())
* (points[0].y() + points[points.size() - 1].y());