Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пересечение отрезка и треугольника, чего-то он не работает 
:(
    Опции темы
mathbeginer
Дата 17.5.2011, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.4.2011

Репутация: нет
Всего: нет



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

Код

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




Это сообщение отредактировал(а) mathbeginer - 17.5.2011, 10:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0368 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.