Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

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

 
Кубоид   (2007-01-15 06:45) [0]

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


 
Кубоид   (2007-01-15 07:19) [1]

Исходники ODE:
http://opende.svn.sourceforge.net/viewvc/opende/

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


 
Elen ©   (2007-01-15 07:56) [2]


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

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


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

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


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

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

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


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

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


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

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


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


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

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


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

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


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


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


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


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

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

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

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

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


 
MBo ©   (2007-01-16 07:05) [10]

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

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


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


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


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


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


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

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


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

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


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


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


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


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


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

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


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


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

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


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


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


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


 
ors_archangel ©   (2007-01-17 06:25) [18]


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

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


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

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

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

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


 
ors_archangel ©   (2007-01-17 08:37) [20]


> Думкин ©   (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 08:50) [21]

> 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.

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



Страницы: 1 вся ветка

Текущий архив: 2007.02.04;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.237 c
2-1169154336
Mettt
2007-01-19 00:05
2007.02.04
TTimeStamp


3-1163190542
Zurius
2006-11-10 23:29
2007.02.04
Ошибка приложения, технология ADO, Access


15-1168781554
Суперинтендант
2007-01-14 16:32
2007.02.04
Помогите


1-1165865929
Ihtiandr
2006-12-11 22:38
2007.02.04
Изменить расскладку клавиатуры


8-1149905507
Anonym
2006-06-10 06:11
2007.02.04
Выбор микрофона