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

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

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

 
 Ответить  Открыть новую тему 
> Пересечение треугольников, Надоело сквозь стены ходить
сообщение
Сообщение #1


Знаток
****

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

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


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


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

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


Профи
****

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

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


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


Знаток
****

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

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


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

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


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


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


Гость






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

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


Знаток
****

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

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

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


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

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


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

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



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


Гость






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

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



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


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


Знаток
****

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

Репутация: -  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 килобайт ) Кол-во скачиваний: 96


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


Гость






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

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


Знаток
****

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

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


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

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

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


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

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

 





- Текстовая версия 3.12.2020 11:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name