【发布时间】:2012-02-20 15:05:55
【问题描述】:
我有一个点和一组形状。我需要知道该点是否包含在这些形状的复合形状中。也就是说,所有形状相交的地方。
但这是容易的部分。
如果该点在复合形状之外,我需要在该复合形状中找到最接近该点的位置。
这些形状可以是以下类型:
- 方形
- 圈子
- 环(圆形,中心切出另一个圆形)
- 反圆(基本上只是圆形孔和该孔之外的永无止境的填充,或者到画布的末端必须对其大小进行限制)
- 圆的一部分(如饼图)
- 环的一部分(如上,但
- 行
下面的示例有一个倒圆(最大的圆,周围有灰色)、一个环(左上角)、一个正方形和一条线。 如果我们不考虑这条线,那么橙色部分就是要约束的形状。如果考虑到线条,则线条的饱和橙色部分就是要约束的形状。
黑色小点代表需要约束的点。蓝点代表所需的结果。 (a 1、b 2 等) 点“f”没有相应的约束结果,因为它已经在橙色区域中。 就本例而言,只有点“e”被限制在直线上,所有其他点都被限制在橙色区域。
如果没有任何形状相交,则无法约束该点。如果约束由两条相互交叉的线组成,那么每个点都将被约束到相同的位置(线交叉的确切位置)。
我找到了接近此的方法,但没有一种方法可以结合起来产生上述功能。 我发现了一些类似的问题:
半圆内的点 What algorithm can I use to determine points within a semi-circle?
离影片剪辑最近的点 Flash: Closest point to MovieClip
通过 Minkowski Sum 的最近点(如果我可以将复合形状转换为多边形,这将起作用) http://www.codezealot.org/archives/153
选择最接近点的多边形边缘(类似于上面) For a point in an irregular polygon, what is the most efficient way to select the edge closest to the point?
PS:我注意到橙色区域实际上可能在某些屏幕上显示为黄色。无论如何,它是彩色区域。
【问题讨论】:
-
你有多少种形状?您关心的效率是多少?
-
至少 1 个正方形(通常等于 flash 中的舞台),但除此之外,形状的数量和类型会有所不同。在大多数情况下,我希望有大约 2-4 个形状,但对于更复杂的情况,可能会达到 15 个。不过理论上是无限的。它们可以是任何类型的组合。效率几乎无关紧要,我什至考虑过绘制形状,然后使用生成的位图数据。
-
所有的形状都是通过动作脚本绘制的,所以我可以使用它们的数学属性/描述。
标签: actionscript-3 algorithm geometry computational-geometry trigonometry