编程语言
首页 > 编程语言> > python – 一个点在图形的内部或外部(顶点和边缘)?

python – 一个点在图形的内部或外部(顶点和边缘)?

作者:互联网

我有一个由边{E}和顶点{V}组成的图G. {V}中的顶点以2-D坐标表示.图形是平面的,这意味着没有两条边相交.

图G有一些循环,假设一个点在图中,如果它落在G的一个循环中.一个循环的例子可能是A — B — C — A,其中A,B和C是顶点,—是边缘.

现在给出一个点(x,y),我如何确定它是在图形内部还是外部?最简单的方法或最简单的方法是什么?

我正在使用Python,如果这有帮助的话.

更新:是的,所有边都是直线.

解决方法:

@Peter de Rivaz提供了一个基本的见解,尽管没有证据:如果它位于由图的外顶点形成的船体内部,则该点位于环内.我们可以通过证明:

>船体内的任何一点都在一个循环内
>船体外的任何点都不在任何循环内

第一个很容易证明:船体内的任何一点都在一个循环内,因为船体本身就是一个循环.

第二个可以通过reductio ad absurdum来证明.非常非正式地,对于船体外部的一个点在一个环内,需要在船体外面至少有一个顶点,并且它要在环内形成一个至少有两个其他顶点的环,这样点就是在同一个循环里面.但是,循环外不能有任何顶点,因为根据定义,所有顶点都在其中.因此,通过减少荒谬,船体外部没有任何循环内的点.

既然我们确信我们有正确的方法来测试我们想要的东西,我们仍然需要一种算法来判断一个点是否在船体内部.这可以通过简单扩展ray casting algorithm来实现.

基本上,我们从所有顶点的列表开始,按垂直坐标排序.然后,对于每对连续的顶点,我们“创建”它们之间的水平线和check what is the first and last edge that the line intersects.这两个边是船体的一部分.如果测试点位于这两个边缘中的任何一个之间,则它将位于船体内部.

这是前3次迭代的图形表示:

标签:python,algorithm,graph-theory
来源: https://codeday.me/bug/20190629/1324906.html