2013-07-12 60 views
3

我有(x,y)-坐标的二维三角形的所有三个角落。现在,我要检查是否有(xp,yp)一个观点是三角形内: 我知道两种方法(只在理论上,尚未实现),以检查:不同的三角形计算方法

  • 与向量:

    vec_0A + vec_AB*lambda + vec_AC*my = vec_0P 
    
    lambda + my =< 1 
    
  • 与直线方程:

计算AB,AC,BC的三个线性方程,并检查每个方程如果P是左/右。

问题1: 它必须是准确的,因为我的角落和点的典型(x,y) - 值如下所示: - (-0.049721957725789148, 0.024809768773549616)小数点

问题后2> 18的位置: 它应该有不错的表现,因为我想检查P是否在三角形(ABC)内部或者三角形(DEF)内部或三角形(GHI)内部或三角形内部(JKL)内还是所有三角形内部。我必须用10,000点才能做到这一点。

我在某处看到矢量方式并不准确。真正? 你知道其他一些检查方法吗? 你推荐哪种检查方式?

+0

看不到任何向量方法的问题。准确度将取决于您的硬件。这[后](http://stackoverflow.com/questions/2049582/how-to-determine-a-point-in-a-triangle)有一些更多的信息。 – dwxw

+0

这看起来可能很有用:http://www.blackpawn.com/texts/pointinpoly/ – user2357112

+0

这两种方法都是有效的,它们本身并没有任何不准确的地方。第一种方式应该快一点,恕我直言。我不知道你有多少次需要检查这些10k点,但不应该花太长时间。关于精度:Python的'float'是双精度的,它给你一个16位十进制数的精度。如果你需要更多的东西,总会有['decimal'](http://docs.python.org/2/library/decimal.html)(尽管这样会更慢)。 – Carsten

回答

3

像这样的问题总是寻找图书馆......这是一个数学问题,可能在图书馆有一个解决方案。一个简单的回答:

import matplotlib 
matplotlib.path.Path.contains_points # is the function you are looking for 

检查文档字符串的使用说明。