【发布时间】:2018-10-30 21:11:43
【问题描述】:
我的问题与这个问题有关:c++ Sorting 2D Points clockwise,但不知何故,该解决方案对我不起作用。我正在尝试逆时针排序 4 个 2d 点。
这是我的代码:
typedef struct p {
float x,y;
} Point;
double getClockwiseAngle(Point p) {
double angle = 0.0;
angle = atan2(p.x, -p.y);
return angle;
}
bool comparePoints(Point p1, Point p2) {
return getClockwiseAngle(p1) < getClockwiseAngle(p2);
}
int main() {
...
sort(givenPoints.begin(), givenPoints.end(), comparePoints);
...
}
示例: 输入 (-4, 2), (1, 4), (0,1), (-1, 4)
输出 (-4, 2), (-1, 4), (1, 4), (0,1)
【问题讨论】:
-
答案是使用
-atan2。您正在使用atan2。看出区别了吗? -
是的,你是对的,但输出仍然是错误的,只是现在点的顺时针排序不正确,而不是逆时针。
-
嗯,这就是你复制的。如果您不更改任何内容,则不会以不同的方式排序。您可能需要将
getClockwiseAngle(p1) < getClockwiseAngle(p2)更改为getClockwiseAngle(p1) > getClockwiseAngle(p2) -
改变你告诉我的只是把我带到我原来的输出。您基本上是将“-”从一个地方移动到另一个地方。
标签: c++ sorting 2d points convex