Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > пересечение отрезка и треугольника


Автор: mathbeginer 17.5.2011, 10:18
в интернете много ссылок на алгоритм пересечения отрезка и треугольника, основанный на поиска точки пересечения прямой и плоскости, затем проверки положения точки относительно треугольника (внутри или нет). Ниже приводиться его реализация. Но, почемуто не работает, некоторые отрезки, пересекающие полигон, допускаются. Какие ошибки, недочеты могут быть в приведенном ниже коде ?????

Код

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



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)