我有一个圆圈,我想把它分成几个段,都是由X和Y坐标定义的。如何测试一个点(X,Y)是否在某一段中?
最好是一个代码示例。
发布于 2014-11-29 17:41:47
atan2获取圆起源点的角度:
角= atan2(y,x)如果您发现结果是将圆圈对面的一个段引用到您想要的内容,那么您可能必须在开始时执行y = -y,或者在结束时执行segment = (numSegments - 1) - segment,以正确的方式将其翻转,但它基本上应该能工作。
发布于 2014-11-29 17:41:18
您不需要为此使用三角函数(通常,只要有可能,就应该避免三角学。)它导致了太多的精度,领域,和周边的问题)。
要确定一个点P是否是A点的逆时针方向(在由经过原点的有向直线的左侧定义的半平面中),您可以检查Ax*Py - Ay*Px结果的符号。这通常被称为“垂直点积”,与三维交叉积的Z坐标相同。
如果有两个点A和B(B定义“特定常规武器公约”-最大程度)定义了一个扇区,而且该扇区不到圆的一半,则A的“特定常规武器公约”和B的“特定常规武器公约”中的任何点都可以归类为该部门。
这只剩下一半以上的区域。显然,给定的一组点最多只能定义一个这样的部门。有一些聪明的事情你可以用角度二分法来做,但是最简单的方法可能是,如果你不能把它们归类为其他区域的话,就像在那个扇区一样。
哦,忘了说--决定分数的顺序,以便将它们与部门配对。不是违背我以前的建议,但这里最简单的事情是按照他们的atan2 (而不是atan)对它们进行排序。永远不要使用atan)。
发布于 2014-11-29 17:32:40
使用以圆心为中心的极坐标系,检查角坐标(维基百科文章中的φ)。
您对φ的具体操作取决于如何定义您的段。例如,如果有以0弧度开头的n相等段,floor(φ * n / (2 * π))将给出段号。
https://stackoverflow.com/questions/27204826
复制相似问题