![]() |
1
12
见 this 它是用c++编写的,也可以用同样的方法用c++编写。 对于凸多边形太容易了:
这是它的c#代码,我没有检查边盒。
我用简单的矩形来测试它很好:
linq查询说明:
|
|
2
58
我查过这里的代码,都有问题。 最好的方法是:
|
![]() |
3
26
在我的项目中,接受的答案对我不起作用。我最终使用了找到的代码 here .
|
![]() |
4
7
可以使用光线投射算法。它在维基百科的页面上有很好的描述 Point in polygon problem . 这就像计算光线从外部到该点接触多边形边界的次数一样简单。如果它接触偶数次,则该点位于多边形外部。如果它碰到奇数次,那点就在里面。 若要计算光线接触的次数,请检查光线与所有多边形边之间的交点。 |
|
5
4
meowNET anwser不包括多边形中的多边形顶点和完全位于水平边上的点。如果需要精确的“包含”算法:
|
![]() |
6
3
完整的算法和C代码可在
http://alienryderflex.com/polygon/
|
![]() |
7
3
我的答案来自这里: Link 我把C代码转换成C并使之生效
可以使用以下示例进行测试:
|
![]() |
8
1
我推荐Kai Hormann(爱尔兰根大学)和Alexander Agathos(雅典大学)这篇15页的精彩论文。它整合了所有最好的算法,并将允许您检测缠绕和光线投射解决方案。 The Point in Polygon Problem for Arbitrary Polygons 该算法实现起来很有趣,非常值得。然而,它是如此的复杂,以至于我对它的任何部分都没有意义。我会坚持说,如果你想要最有效和最通用的算法,我确信这就是它。 由于算法是高度优化的,因此变得复杂,因此需要大量的阅读才能理解和实现。然而,它结合了光线投射和缠绕数算法的优点,结果是一个同时提供两个答案的数字。如果结果大于零且为奇数,则该点完全包含,但如果结果为偶数,则该点包含在自折叠的多边形的一部分中。 祝你好运。 |
![]() |
9
1
我的PointInPolygon函数的业务关键实现(正如OP似乎正在使用的那样)是对水平线、垂直线和对角线进行单元测试的,行上的点包含在测试中(函数返回true)。 这似乎是一个老问题,但之前的所有跟踪示例都有一些缺陷:不要考虑水平或垂直多边形线、多边形边界线或边的顺序(顺时针、逆时针)。 下面的函数通过了我提出的测试(正方形、菱形、对角线交叉、总共124个测试),测试的点在边上、顶点上,以及边和顶点的内部和外部。 代码对每个连续的多边形坐标对执行以下操作:
算法可以很容易地适应浮点数和双倍数(如果需要)。 顺便说一下,我想知道在过去的近10年里,有多少软件是用来检查多边形中的某个点的,但在某些情况下却失败了。
|
![]() |
10
0
这是个老问题,但我优化了答案:
使用IEnumerators和IEnumerables。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 6 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 6 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 6 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 6 月前 |