Пересечение треугольников, Надоело сквозь стены ходить |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Пересечение треугольников, Надоело сквозь стены ходить |
Rian |
Сообщение
#1
|
Знаток Группа: Пользователи Сообщений: 396 Пол: Мужской Репутация: 9 |
Здравствуйте, есть у кого функция для определения пересечения двух треугольников. Результат булевый да\нет? можно и чисто математическое решение, но функцией будет лучше.
Эскизы прикрепленных изображений -------------------- Objective-C, Unity3d
|
Client |
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
Сначала определяешь, пересекаются ли хоть какие-то стороны стороны, определяешь координаты этой точки, и проверяешь ее на принадлежность к одному из треугольников.
|
Rian |
Сообщение
#3
|
Знаток Группа: Пользователи Сообщений: 396 Пол: Мужской Репутация: 9 |
Сначала определяешь, пересекаются ли хоть какие-то стороны стороны Но у меня ни одна сторона не пересекается, а треугольники да. есть просто функция типа function trianglecheck(p1,p2,p3,p4,p5,p6):boolean; p1=x,y,z -------------------- Objective-C, Unity3d
|
volvo |
Сообщение
#4
|
Гость |
Цитата есть у кого функция для определения пересечения двух треугольников Тебе сюда: АлгоЛист - Пересечение: Два треугольника |
Rian |
Сообщение
#5
|
Знаток Группа: Пользователи Сообщений: 396 Пол: Мужской Репутация: 9 |
Благодарю, конечно, там много полезной информации, тока я ничего не понял. Читаю как какие-то иероглифы. 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
|
volvo |
Сообщение
#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 |
Сообщение
#7
|
Знаток Группа: Пользователи Сообщений: 396 Пол: Мужской Репутация: 9 |
Угу... То самое... В начале (в комментариях же написано:) Ну не знаааю я Си. float V0[3] это типа вершина с тремя координатами в виде массива? Для Delphi ничего нет? -------------------- Objective-C, Unity3d
|
volvo |
Сообщение
#8
|
Гость |
Цитата Для Delphi ничего нет? Есть же программа готовая - неужели так сложно переконвертировать ее в Дельфи? Я где-то на форуме (в разделе ОС и ПО, кажется) давал ссылку на конвертер, да там и вручную - дел на полчаса максимум: все макросы сделать процедурами (а лучше - функциями) и все...Update: Вот набросок, вроде бы нигде не ошибся - тестируй... Сообщение отредактировано: volvo - Прикрепленные файлы __tri_tri.pas ( 8.11 килобайт ) Кол-во скачиваний: 255 |
Rian |
Сообщение
#9
|
Знаток Группа: Пользователи Сообщений: 396 Пол: Мужской Репутация: 9 |
volvo, класс, работает!!! Огромнейшее спасибо!
И код довольно быстрый. turion64-100 000 итераций за 50 мс только стало интересно как работает такое описание типа через case:
Прикрепленные файлы triangle_check.rar ( 12.12 килобайт ) Кол-во скачиваний: 189 -------------------- Objective-C, Unity3d
|
volvo |
Сообщение
#10
|
Гость |
Цитата как работает такое описание типа через case Обычная запись с вариантной частью: одновременно можешь обращаться к координатам точки как через поля X, Y, Z, так и через элементы массива arr[i], фактически поля, описанные в разных метках селектора (false и true) находятся в одном месте памяти. На X "накладывается" arr[0], на Y - накладывается arr[1], и на Z - arr[2].Я очень часто такое использую, если мне надо в разных местах обращаться по-разному к полям записи. Где-то удобнее работать с именованными полями, где-то с массивом значений. Это - универсальный способ... |
Rian |
Сообщение
#11
|
Знаток Группа: Пользователи Сообщений: 396 Пол: Мужской Репутация: 9 |
-------------------- Objective-C, Unity3d
|
Текстовая версия | 15.05.2024 9:56 |