Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何确定环点';方向正确吗?_Math_Geometry_Polygon - Fatal编程技术网

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;
}

您需要包括case
i==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());