首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

点圆段
EN

Stack Overflow用户
提问于 2014-11-29 17:14:29
回答 4查看 969关注 0票数 2

我有一个圆圈,我想把它分成几个段,都是由X和Y坐标定义的。如何测试一个点(X,Y)是否在某一段中?

最好是一个代码示例。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-11-29 17:41:47

  1. 如果x&y尚未相对于圆的中心,则减去圆心的坐标: X -=圆圈.x y -=圈.y
  2. 使用atan2获取圆起源点的角度: 角= atan2(y,x)
  3. 对于x轴以下的点,此角度为负值,因此调整为始终为正: if (角< 0)角+= 2* pi
  4. 假设分段间距相等,则使用此公式获得段的索引: 段=地板(角* numSegments) / (2 *pi)

如果您发现结果是将圆圈对面的一个段引用到您想要的内容,那么您可能必须在开始时执行y = -y,或者在结束时执行segment = (numSegments - 1) - segment,以正确的方式将其翻转,但它基本上应该能工作。

票数 -1
EN

Stack Overflow用户

发布于 2014-11-29 17:41:18

您不需要为此使用三角函数(通常,只要有可能,就应该避免三角学。)它导致了太多的精度,领域,和周边的问题)。

要确定一个点P是否是A点的逆时针方向(在由经过原点的有向直线的左侧定义的半平面中),您可以检查Ax*Py - Ay*Px结果的符号。这通常被称为“垂直点积”,与三维交叉积的Z坐标相同。

如果有两个点A和B(B定义“特定常规武器公约”-最大程度)定义了一个扇区,而且该扇区不到圆的一半,则A的“特定常规武器公约”和B的“特定常规武器公约”中的任何点都可以归类为该部门。

这只剩下一半以上的区域。显然,给定的一组点最多只能定义一个这样的部门。有一些聪明的事情你可以用角度二分法来做,但是最简单的方法可能是,如果你不能把它们归类为其他区域的话,就像在那个扇区一样。

哦,忘了说--决定分数的顺序,以便将它们与部门配对。不是违背我以前的建议,但这里最简单的事情是按照他们的atan2 (而不是atan)对它们进行排序。永远不要使用atan)。

票数 2
EN

Stack Overflow用户

发布于 2014-11-29 17:32:40

使用以圆心为中心的极坐标系,检查角坐标(维基百科文章中的φ)。

您对φ的具体操作取决于如何定义您的段。例如,如果有以0弧度开头的n相等段,floor(φ * n / (2 * π))将给出段号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27204826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档