如何使用Python检查2D点是在2D闭合贝塞尔曲线的内部还是外部?

如何使用Python检查2D点是在2D闭合贝塞尔曲线的内部还是外部?

你好

在我的2d软件中,有两个可用输入:

XY点数组

[(x,y),(1,1),(2,2),3),(-1,...]

和另一个表示闭合的2D贝塞尔曲线手柄的矩阵

[((x,(x,y)),((-1,-1),2)),((1,3)),...]

如何使用python检查点在给定曲线的内部还是外部?最好使用numpy

iCMS 回答:如何使用Python检查2D点是在2D闭合贝塞尔曲线的内部还是外部?

我不知道贝塞尔曲线的原理,因此,如果第二点列表是一种表示贝塞尔曲线的压缩方式,请首先尝试以所需的精度对曲线的一些点进行采样。 因此,您的曲线上有n个点,然后可以应用简单的PIP算法:https://en.wikipedia.org/wiki/Point_in_polygon

如果您想知道如何以编程方式进行操作,稍后可以详细解释。

,

我不能在这里编写代码,因为我需要整个程序来正确理解,但是我可以提供两种方法来做到这一点。

  1. 最困难的方法是通过折线逼近每个贝塞尔曲线。然后,根据wiki,您可以使用两种技术:
  • 射线投射算法:该算法的简写:您放置了一条射线,该射线从一个点开始,穿过整个多边形到达另一个点。有些线位于多边形内,有些线位于多边形外。然后检查特定点属于哪条线,如下所示:

enter image description here

这种方法的巨大缺点是精度取决于您将曲线近似于多段线的程度。

  1. 第二种方法是使用位图。例如,将点设置为白色,然后将曲线下方的区域渲染为黑色,然后查看点是否仍为白色。这种方法更准确,最快,因为您可以使用GPU进行渲染。

与第一个方法相关的一些链接:

  1. https://pomax.github.io/bezierinfo/#intersections
  2. http://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node80.html
本文链接:https://www.f2er.com/1667630.html

大家都在问