Помощь - Поиск - Пользователи - Календарь
Полная версия: Пересечение треугольников
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rian
Здравствуйте, есть у кого функция для определения пересечения двух треугольников. Результат булевый да\нет? можно и чисто математическое решение, но функцией будет лучше.
Client
Сначала определяешь, пересекаются ли хоть какие-то стороны стороны, определяешь координаты этой точки, и проверяешь ее на принадлежность к одному из треугольников.
Rian
Цитата(Client @ 16.01.2008 16:39) *

Сначала определяешь, пересекаются ли хоть какие-то стороны стороны


Но у меня ни одна сторона не пересекается, а треугольники да.
есть просто функция типа function trianglecheck(p1,p2,p3,p4,p5,p6):boolean;
p1=x,y,z
volvo
Цитата
есть у кого функция для определения пересечения двух треугольников

Тебе сюда: АлгоЛист - Пересечение: Два треугольника
Rian
Цитата(volvo @ 16.01.2008 17:09) *


Благодарю, конечно, там много полезной информации, тока я ничего не понял.
Читаю как какие-то иероглифы.

int tri_tri_intersect(float V0[3],float V1[3],float V2[3],
* float U0[3],float U1[3],float U2[3])
это то?
volvo
Угу... То самое... В начале (в комментариях же написано:
Цитата
* int tri_tri_intersect(float V0[3],float V1[3],float V2[3],
* float U0[3],float U1[3],float U2[3])
*
* parameters: vertices of triangle 1: V0,V1,V2
* vertices of triangle 2: U0,U1,U2
* result : returns 1 if the triangles intersect, otherwise 0
)
Rian
Цитата(volvo @ 16.01.2008 18:26) *

Угу... То самое... В начале (в комментариях же написано:)


Ну не знаааю я Си.
float V0[3] это типа вершина с тремя координатами в виде массива?

Для Delphi ничего нет? wink.gif

volvo
Цитата
Для Delphi ничего нет?
Есть же программа готовая - неужели так сложно переконвертировать ее в Дельфи? Я где-то на форуме (в разделе ОС и ПО, кажется) давал ссылку на конвертер, да там и вручную - дел на полчаса максимум: все макросы сделать процедурами (а лучше - функциями) и все...

Update:
Вот набросок, вроде бы нигде не ошибся - тестируй...

Rian
volvo, класс, работает!!! good.gif Огромнейшее спасибо!
И код довольно быстрый.
turion64-100 000 итераций за 50 мс

только стало интересно как работает такое описание типа через case:

type
TMyPoint = record
case boolean of
false: (X, Y, Z: double);
true: (arr: array[0 .. 2] of double);
end;

volvo
Цитата
как работает такое описание типа через case
Обычная запись с вариантной частью: одновременно можешь обращаться к координатам точки как через поля X, Y, Z, так и через элементы массива arr[i], фактически поля, описанные в разных метках селектора (false и true) находятся в одном месте памяти. На X "накладывается" arr[0], на Y - накладывается arr[1], и на Z - arr[2].

Я очень часто такое использую, если мне надо в разных местах обращаться по-разному к полям записи. Где-то удобнее работать с именованными полями, где-то с массивом значений. Это - универсальный способ...
Rian
Цитата(volvo @ 17.01.2008 20:09) *

Обычная запись с вариантной частью:

понял, ещё интересней
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.