Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как написать функцию проверки столкновений двух сфероидов? [D7]


Страницы:   1 2

Кубоид ©   (2007-01-15 06:45:00) 

Сфероид - это сфера с произвольными размерами по осям.
Задаётся матрицей 4x4. GLScene.
Как проверить столкновения сфер знаю. А вот как со сфероидами, которые могут быть вытянутыми - без понятия.
Или хотя бы может кто нибудь знает как сделать проверку столкновения сферы со сфероидом?


Думкин   (2007-01-17 08:50:00) [1]

> ors_archangel ©   (17.01.07 08:37) [20]

Честно, - не понял.

Тот первый метод, что я предложил - не верен. Прямая проходящая через центры может выйти из одного и войти в другой, но при этом эллипсоиды могут пересекаться.

Множители Лагранжажа.
http://iasa.org.ua/iso.php?lang=rus&ch=5&sub=2

Я специально привел пример со сферой в центре. Посмотрите почему я прихожу к выводу, что надо искть экстремумы на втором эллипсоиде функции x^2+y^2+z^2.

Если не понятно - отвечу позже.


ors_archangel   (2007-01-17 08:37:00) [2]


> Думкин ©   (17.01.07 06:52) [19]

Ты меня не убедил. Почему нельзя задать эллипсоид центром, вращением по осям и радиусами a,b,c? Тогда задачу столкновения двух эллипсоидов можно было бы свести к задаче принадлежности точки эллипсоиду, увеличив радиусы эллипсоида на радиус сферы (она получена после аффиного преобразования). Дальше, как ты и предлагал, переходим в новую систему координат: перенося её на минус центр эллипсоида и поворачивая вокруг осей на углы, противоположные тем, что задают эллипсоид. Тогда столкновение есть, если sqr x/a + sqr y/b + sqr z/c < 1. При аффином преобразовании, преобразовывающем один из эллипсоидов в сферу, проще перерассчитать новые радиусы второго эллипсоида, чем итерационно искать экстремум, а что такое множители Лагранжа, я не знаю, может и эффективно считаются, я знаю только интерполяционный многочлен Лагранжа и ещё теорему, про сущ c: f(b)-f(a)=(b-a)f '(c), если есть непрерывность и чё-то там есчо


Думкин   (2007-01-17 06:52:00) [3]

> ors_archangel ©   (17.01.07 06:25) [18]

Нет параметрически не надо. Можно пойти 2-мя путями для обоснования решения совершенно одинаковыми - либо перенести один в начало и превратить в сферу, либо работать с уже данными формулами эллипсоидов. Затраты одинаковые, но первый способ легче объяснить - почему работает.

Затем надо найти экстремум функций на множестве задаваемом функциями.
А это либо множители Лагранжа, либо итерации. Тут уже Яндекс в помощь - расписано много где.


ors_archangel   (2007-01-17 06:25:00) [4]


> Кубоид  
> Ну так и переведи нам, если такой умный.

На формумах обычно отвечают на вопросы, а не на оскорбления.
Imho лучше бы параметрически задал эллипс (например, положение в пространстве и поворот вокруг вокруг базовых осей), тогда математику из [3] можно было бы применять.


Кубоид   (2007-01-17 06:06:00) [5]


> ors_archangel ©   (16.01.07 13:54) [16]
> >  перевести с математического на русский.
> Математическая запись интернациональна, она - ноты в музыке,
>  которую пишет программист


Ну так и переведи нам, если такой умный.


ors_archangel   (2007-01-16 13:54:00) [6]


>  перевести с математического на русский.

Математическая запись интернациональна, она - ноты в музыке, которую пишет программист


Рамиль   (2007-01-16 09:30:00) [7]


> Кубоид   (16.01.07 07:07) [11]

Если ты будешь так разговаривать, то тебе никто не переведет.


Кубоид   (2007-01-16 07:38:00) [8]


> MBo ©   (16.01.07 07:05) [10]
>
> http://www.geometrictools.com/Documentation/IntersectionOfEllipsoids.
> pdf
> я бы не сказал, что простая задача...


Да. Это первая ссылка в Гугле на "Intersection of Ellipsoids".
Только кто бы это смог перевести с математического на русский.
Чего и как считать совершенно непонятно.


Думкин   (2007-01-16 07:15:00) [9]

Прошел по ссылке - там, как раз и описано то, что я предложил. Поэтому последите за своей речью.


Думкин   (2007-01-16 07:10:00) [10]


> Кубоид   (16.01.07 07:07) [11]

Я его нашел и описал. Как верно заметил Борис - задача не очень простая. И для ее понимания видимо надо знать чуток больше, чем знаете вы - раз не в состоянии понять того, что я описал. Удачных поисков простых решений.


Кубоид   (2007-01-16 07:07:00) [11]


> Думкин ©   (16.01.07 06:18) [9]
> И что? Нам же надо только факт столкновения выявить? А он
> для аффинных преобразований инвариантен.


Хары выпендриваться. Если ты уже понял, что сказал чушь, то лучше не усугулбяй, а молча поищи правильное решение.


MBo   (2007-01-16 07:05:00) [12]

http://www.geometrictools.com/Documentation/IntersectionOfEllipsoids.pdf
я бы не сказал, что простая задача...

При чтении нужно представлять себе общее уравнение поверхностей второго порядка и его выражение в матричной форме.


Думкин   (2007-01-16 06:18:00) [13]

> Кубоид   (16.01.07 04:48) [6]

Я то? Я то понял. А вот вы видимо ни разу. Но задавайте вопросы - не стесняйтесь. :)

> Кубоид   (16.01.07 05:22) [8]

И что? Нам же надо только факт столкновения выявить? А он для аффинных преобразований инвариантен. А что через кого вычисляется - я не в курсе. Я для эллипсоида расписывал. А где и как вы его храните - дело десятое.


Кубоид   (2007-01-16 05:22:00) [14]


> Думкин ©   (15.01.07 08:15) [3]
> Речь об эллипсоиде? В случае двух элипсоидов задача с водится
> к столкновению сферы и элипсоида. Так как имеется аффиное
> преобразование переводящее один из эллипсоидов в сферу.


Если речь об умножении MatrixMultiply на обратную матрицу вычисленную через функцию InvertMatrix, то тогда оси второго сфероида уже не будут взаимоперпендикулярными.


Кубоид   (2007-01-16 04:55:00) [15]

Непойму. Newton с открытыми исходниками? Если да, то где на sourceforge они лежат?


Кубоид   (2007-01-16 04:48:00) [16]


> Думкин ©   (15.01.07 08:34) [5]
> Можно подумать в таком направлении: когда мы один элипсоид
> засунули в начало координат и хорошо повернули - чтобы оси
> его и коороси совпадали, то можно рассмотреть такую функцию
> x^2/a^2+y^2/b^2+z^2/c^2 и найти ее эктсремумы на втором
> элипсоиде - они будут, потому что множество компактное.

Ты сам то понял, что сказал?


Думкин   (2007-01-15 08:34:00) [17]

Можно подумать в таком направлении: когда мы один элипсоид засунули в начало координат и хорошо повернули - чтобы оси его и коороси совпадали, то можно рассмотреть такую функцию x^2/a^2+y^2/b^2+z^2/c^2 и найти ее эктсремумы на втором элипсоиде - они будут, потому что множество компактное. Посмотреть на величины экстремумов. Оба меньше 1 - внутри, оба больше 1 - снаружи, по очереди - столкновение.


Думкин   (2007-01-15 08:20:00) [18]

Хотя подумалось тут - этого мало будет. :(


Думкин   (2007-01-15 08:15:00) [19]

> Сфероид - это сфера с произвольными размерами по осям.


А параллелепипед - это куб с произвольными размерами по осям. А кактус - это недоразвитый ежик.

Речь об эллипсоиде? В случае двух элипсоидов задача с водится к столкновению сферы и элипсоида. Так как имеется аффиное преобразование переводящее один из эллипсоидов в сферу. При этом пересекаемость будет инвариантна к преобразованию.

Затем можно перенести элипсоид в начало координат - чтобы удобнее было. Провести через центры прямую. Найтй 2 точки на сфере принадлежащие этой прямой.
Точка внутри эллипсоида(в начале координат), для нее верно x^2/a^2+y^2/b^2+z^2/c^2<1 и с братным знаком - вовне. От этого и плясать.


Elen   (2007-01-15 07:56:00) [20]


> Такое ощущение, что там нет функций столкновений ... Или
> это я не нашёл?

Если речь идет о GLScene то можно попробовать определить столкновения черезCollisionManager


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо