【发布时间】:2013-08-21 13:09:14
【问题描述】:
给定一个四边形的四个整数点,可以是任何类型(如菱形、矩形、梯形、平行四边形、正方形或普通四边形),我如何逆时针对这些点进行排序(不使用 atan2()函数或任何双点计算),这样我就不会以对角线作为它的边?
我已经将这样的代码编码为 struct :
typedef struct {
long long x,y ;
} point ;
vector<point> p ;
在不使用任何双点计算的情况下,我无法弄清楚 sort 函数中的比较函数以 CCW 顺序对点进行排序。有人可以帮我吗?
【问题讨论】:
-
四边形的形状不明确怎么办?请参阅此图像的最后一个(右下)示例:en.wikipedia.org/wiki/File:Six_Quadrilaterals.svg。这四个点可以用来画几个不同的四边形,这可能会改变你对排序的含义。
-
您无法以一种或另一种方式使用小数。您可以使用分子和分母自己实现精确分数,但简单地使用浮点数更容易。您无法解决这个问题,因为在您的算法中的某个时刻,您将不得不比较点彼此之间的角度。要计算这些角度,没有办法绕过小数。这就引出了一个问题:为什么要避免“双分”?
-
顺便说一句,tan(a)