в интернете много ссылок на алгоритм пересечения отрезка и треугольника, основанный на поиска точки пересечения прямой и плоскости, затем проверки положения точки относительно треугольника (внутри или нет). Ниже приводиться его реализация. Но, почемуто не работает, некоторые отрезки, пересекающие полигон, допускаются. Какие ошибки, недочеты могут быть в приведенном ниже коде ?????
| Код | def intersection_line_and_triangle(x,y,tri): ieps=0.01 eps=0.000001 a=tri[0];b=tri[1];c=tri[2];n=normal(tri) znam=dot(n,x-y) if abs(znam)<eps: return False mu=dot(n,x-a)/znam if mu<0 or mu>1: return False z=x+mu*(y-x);za=a-z;zb=b-z; zc=c-z # if linalg.norm(z-a)<=ieps or linalg.norm(z-b)<=ieps or linalg.norm(z-c)<=ieps: # return True mza=linalg.norm(za);mzb=linalg.norm(zb);mzc=linalg.norm(zc) if abs(arccos(dot(za,zb)/mza/mzb)+arccos(dot(zb,zc)/mzb/mzc)+arccos(dot(zc,za)/mzc/mza)-2.*pi)<eps: return True else: return False
|
|