Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python检查二维点是否位于二维闭合贝塞尔曲线的内部或外部?_Python_Math_Bezier_Curve_Points - Fatal编程技术网

如何使用Python检查二维点是否位于二维闭合贝塞尔曲线的内部或外部?

如何使用Python检查二维点是否位于二维闭合贝塞尔曲线的内部或外部?,python,math,bezier,curve,points,Python,Math,Bezier,Curve,Points,你好, 在我的2d软件中,我有两个可用的输入: XY点的数组 [(x,y),(1,1),(2,2),(2,3),(-1,3),...] 和另一个表示闭合二维贝塞尔曲线控制柄的矩阵 [((x,y),(x,y),(x,y)), ((-1,-1),(1,1),(1,2)), ((1,1),(2,2),(2,3)), ...] 如何使用python检查点是否位于给定曲线的内部或外部?我不知道贝塞尔曲线的理论是怎样的,所以如果你的第二个点列表是一种表示贝塞尔曲线的压缩方法,首先尝试以你想要的精度

你好,

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

XY点的数组

[(x,y),(1,1),(2,2),(2,3),(-1,3),...]
和另一个表示闭合二维贝塞尔曲线控制柄的矩阵

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

如何使用python检查点是否位于给定曲线的内部或外部?我不知道贝塞尔曲线的理论是怎样的,所以如果你的第二个点列表是一种表示贝塞尔曲线的压缩方法,首先尝试以你想要的精度对曲线的一些点进行采样。 因此,曲线上有n个点,然后可以应用一个简单的PIP算法:


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

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

  • 最困难的方法是用一条多段线来近似每个Bézier曲线。然后,根据以下步骤,您可以使用两种技术:
    • 光线投射算法:该算法的简写:放置一条光线,光线从一个点开始,穿过整个多边形到达另一个点。有些直线位于多边形内部,有些位于多边形外部。然后检查特定点所属的线,如下所示:

    • 绕组编号算法:。因此,如果卷绕编号非零,则该点位于多边形内
    这种方法的最大缺点是精度取决于曲线与多段线的近似程度

  • 第二种方法是使用位图。例如,将点设置为白色,然后将曲线下的区域渲染为黑色,然后查看点是否保持白色。这种方法更精确,速度更快,因为可以使用GPU进行渲染
  • 以及与第一种方法相关的一些链接:


  • 不,我只是有一些贝塞尔手柄作为输入。对不起,我错过了第二个矩阵。这是可能的,但首先我必须阅读如何将曲线定义为参数方程也许您可以提供样本(但完整)输入数据、一些“测试点”和预期结果?这将使其他人(至少是我)在给出答案时更愿意提供帮助,也更自信。我刚刚意识到,在过去的某个时候,实际上有一个专门的章节是关于确定形状的点,显然在过去7年的某个时候,它消失了。我目前正在完全重做底漆的技术堆栈,所以我想我必须重新介绍该部分。