IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Пересечение треугольников, Надоело сквозь стены ходить
Rian
сообщение 16.01.2008 16:21
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


Здравствуйте, есть у кого функция для определения пересечения двух треугольников. Результат булевый да\нет? можно и чисто математическое решение, но функцией будет лучше.


Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
Client
сообщение 16.01.2008 17:39
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Сначала определяешь, пересекаются ли хоть какие-то стороны стороны, определяешь координаты этой точки, и проверяешь ее на принадлежность к одному из треугольников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rian
сообщение 16.01.2008 18:06
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


Цитата(Client @ 16.01.2008 16:39) *

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


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


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.01.2008 18:09
Сообщение #4


Гость






Цитата
есть у кого функция для определения пересечения двух треугольников

Тебе сюда: АлгоЛист - Пересечение: Два треугольника
 К началу страницы 
+ Ответить 
Rian
сообщение 16.01.2008 18:39
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


Цитата(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])
это то?


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.01.2008 19:26
Сообщение #6


Гость






Угу... То самое... В начале (в комментариях же написано:
Цитата
* 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
сообщение 16.01.2008 20:07
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


Цитата(volvo @ 16.01.2008 18:26) *

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


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

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



--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.01.2008 0:45
Сообщение #8


Гость






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

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



Сообщение отредактировано: volvo - 17.01.2008 13:15


Прикрепленные файлы
Прикрепленный файл  __tri_tri.pas ( 8.11 килобайт ) Кол-во скачиваний: 205
 К началу страницы 
+ Ответить 
Rian
сообщение 17.01.2008 20:49
Сообщение #9


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


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;



Прикрепленные файлы
Прикрепленный файл  triangle_check.rar ( 12.12 килобайт ) Кол-во скачиваний: 148


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.01.2008 21:09
Сообщение #10


Гость






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

Я очень часто такое использую, если мне надо в разных местах обращаться по-разному к полям записи. Где-то удобнее работать с именованными полями, где-то с массивом значений. Это - универсальный способ...
 К началу страницы 
+ Ответить 
Rian
сообщение 17.01.2008 21:46
Сообщение #11


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


Цитата(volvo @ 17.01.2008 20:09) *

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

понял, ещё интересней


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 13:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"