HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Вопросы по 3D математике
Если не сложно, прошу ответить
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2090

Рейтинг



Smile Вопросы по 3D математике

В общем засел за написание полностью софтверного движка на (J2ME). Сделал отрисовку полигона с заданным цветом, также бэкграунд цветом и картинкой. Но столкнулся с такой трудностью - вращение полигона вокруг произвольной оси работает очень очень криво. Вот формула(вращение по оси Y):

code:
double x = (double)vec.x+(double)(v.x-vec.x)*cos[r]-(double)(v.z-vec.z)*sin[r]; double z = (double)vec.z+(double)(v.x-vec.x)*sin[r]+(double)(v.z-vec.z)*cos[r];

v - это вершина, которую передвигаем(вращаем), vec - вектор, вокруг которого поворачиваем, то есть ось поворота, r - это градус поворота, а cos[],sin[] - это массивы с заранее посчитанными косинусами и синусами углов от 0 до 360. Проблема заключается в том, что вращение начинается, затем доходит до 1/4 оборота, останавливается, потом полигон съезжает вбок до оси вращения, и в таком же положении - полуразвороте едет в противоположную сторону, затем разворачивается и цикл повторяется. В общем что то расчитыватся не так, а что я никак не могу понять, потому что формулы выверял уже 10 раз. Бьюсь над этим уже третий день. Есть ли у вас какие-нибудь мысли на этот счет?

__________________
-Brain is dead-

Сообщить модератору | IP: Записан
Сообщение: 75625

Старое сообщение 06-04-2011 18:18
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35058
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


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

И вообще, неплохо бы записать видео или хотя бы нарисовать, а то я не могу представить себе, что именно у тебя там едет и в какую сторону.

__________________

Сообщить модератору | IP: Записан
Сообщение: 75626

Старое сообщение 06-04-2011 20:28
-
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2090

Рейтинг



XaeroX благодарствую за ответ. Погуглил по поводу твоих соображений, нашел ошибку в своей формуле Насчет матриц честно говорю - я их делал, но большого толку от них не увидел. Может я неправильно их делал? В моем варианте, матрица - это 2д массив double Matrix[2][2]. Чтобы умножить точку или вектор на матрицу, получается:

code:
newx = vec.x + (v.x-vec.x) * Matrix[0][0] + (v.z-vec.z) * Matrix[0][1]; newz = vec.z + (v.x - vec.x) * Matrix[1][0] + (v.z-vec.z) * Matrix[1][1];

В чем преимущество в конкретной ситуации так и не понял. Может еще не дошел до этого уровня

__________________
-Brain is dead-

Сообщить модератору | IP: Записан
Сообщение: 75632

Старое сообщение 07-04-2011 04:47
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35058
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | IP: Записан
Сообщение: 75633

Старое сообщение 07-04-2011 06:15
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33059
Нанёс повреждений: 392 ед.

Рейтинг



Одно могу сказать точно - реализовать без матриц поворот по всем осям одновременно - крайне нетривиальная задача.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 75634

Старое сообщение 07-04-2011 07:20
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35058
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Дядя Миша
Ну, есть еще кватернионы

__________________

Сообщить модератору | IP: Записан
Сообщение: 75637

Старое сообщение 07-04-2011 07:55
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33059
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
XaeroX писал:
Ну, есть еще кватернионы

угу, и углы эйлера. Но матрицами - прощщщще.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 75641

Старое сообщение 07-04-2011 09:25
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 05:25. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Вопросы по 3D математике
Если не сложно, прошу ответить
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024