|
|
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Вот код на Java (библиотека libgdx - но можно просто забить и представить, что это псевдокод) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Суть: по плоскости катится кубик в заданном направлении x,y (как видно из кода). Как-то надо крутить этот кубик правильно. Ок, поперёк движения в сторону направляю вектор и вокруг него верчу кубик. Но он достигает границы и отскакивает (угол падения == углу отражения) и движется дальше в новом направлении. Как выбрать новый вектор вращения - вообще хз. может, подскажет кто по этой части? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 02:17 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Если чисто физика, то V = [ w * r ], где V - линейная скорость, w - угловая скорость (на вашем языке - вектор вращения), r - радиус-вектор. Все три величины - вектора, [_*_] означает ВЕКТОРНОЕ произведение. Если на пальцах - если вы смотрите на вращающееся колесо и с ВАШЕЙ точки зрения оно вращается ПО часовой стрелки, то V вектор соответственно направлен слева направо, а вектор w - ОТ ВАС. Если же с ВАШЕЙ точки зрения колесо вращается ПРОТИВ часовой стрелки, то V вектор направлен справа налево, а вектор w - НА ВАС. Ну а теперь, зная как направлен вектор линейной скорости до и после отскока от стенки сами уж как-нибудь прикиньте что происходит с "вектором вращения" и насколько градусов он разворачивается из-за удара. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 03:07 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
mikhail_nЕсли чисто физика, то V = [ w * r ], где V - линейная скорость, w - угловая скорость (на вашем языке - вектор вращения), r - радиус-вектор. Все три величины - вектора, [_*_] означает ВЕКТОРНОЕ произведение. Если на пальцах - если вы смотрите на вращающееся колесо и с ВАШЕЙ точки зрения оно вращается ПО часовой стрелки, то V вектор соответственно направлен слева направо, а вектор w - ОТ ВАС. Если же с ВАШЕЙ точки зрения колесо вращается ПРОТИВ часовой стрелки, то V вектор направлен справа налево, а вектор w - НА ВАС. Ну а теперь, зная как направлен вектор линейной скорости до и после отскока от стенки сами уж как-нибудь прикиньте что происходит с "вектором вращения" и насколько градусов он разворачивается из-за удара. Успехов. Сравнение с колесом не корректное. Нужно считать разницу углов плоскости кубика. Кубик ударяется гранью, в зависимости от угла простраственной позиции кубика либо перекатывается через грань и соприкасается верхней относительно пространственного расположения гранью, либо не перекатывается и ударяется о препядствие плоскостью грани , либо нижней гранью . Поведение во многом будет зависеть от коэфициента трения-скольжения материалов кубика и грани , упругости материалов, силы ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 10:37 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
аппроксимация: кубик катится в соответствии с физикой шара прямолинейно, равномерно. В данном случае да, шар - не колесо. Сравнение не корректное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 13:48 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Сравнение с колесом не корректное. Нужно считать разницу углов плоскости кубика. Кубик ударяется гранью, в зависимости от угла простраственной позиции кубика либо перекатывается через грань и соприкасается верхней относительно пространственного расположения гранью, либо не перекатывается и ударяется о препядствие плоскостью грани , либо нижней гранью . Поведение во многом будет зависеть от коэфициента трения-скольжения материалов кубика и грани , упругости материалов, силы ..... Да. А ещё Земля круглая, а вода мокрая. аппроксимация: кубик катится в соответствии с физикой шара прямолинейно, равномерно. В данном случае да, шар - не колесо. Сравнение не корректное. И што, у катящегося шара вектора V и w находятся между собой в каких-то других отношениях, чем у колеса? Ну замените "колесо" на "шар" в моём посте, от этого СОДЕРЖАТЕЛЬНО в нём НИЧЕГО не изменится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 20:30 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Charles Weyland, может просто подправлять ориентацию кубика при каждом вызове Move? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation the multiplication of unit quaternions corresponds to the composition of three-dimensional rotations ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2016, 05:07 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Пётр, В том-то и проблема, что кубик начинает вращаться вокруг своих локальных осей, которые вращаются вместе с ним. Сейчас попытаюсь обрисовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 00:17 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
А, чуть ошибся в картинке. Красная стрелка вообще вниз должна быть направлена. Но суть изложил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 00:19 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Поправил пару погрешностей в иллюстрации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 00:23 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Это вопрос на тему геймдева и физики столкновений. И его уместно задавать не в этом форуме а там где тусят геймдевы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 00:26 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
задал, там вообще молчком. А Пётр хотя бы попытался помочь. Сейчас пытаюсь как-то этот вектор правильно вращать, чтобы вокруг него уже весь кубик вращать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 00:41 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
боже-боже-боже мой!! оно работает! Да, Пётр был прав, надо mulLeft! Спасибо!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 02:50 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Charles Weylandзадал, там вообще молчком. А Пётр хотя бы попытался помочь. Сейчас пытаюсь как-то этот вектор правильно вращать, чтобы вокруг него уже весь кубик вращать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 17:14 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Charles WeylandДа, Пётр был прав, надо mulLeft!Как и с матрицами, порядок кватернионов в умножении имеет значение (обычно q1 * q2 ≠ q2 * q1), он влияет на то, в каком порядке будут делаться преобразования координат. Но в разных API/библиотеках это по-разному сделано, например: OpenGL: new_vec = mat_3 * mat_2 * mat_1 * old_vec (вектор -- столбец) Direct3D: new_vec = old_vec * mat_1 * mat_2 * mat_3 (вектор -- строка) А с libgdx я никогда не работал, поэтому и написал, что надо экспериментировать. https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Quaternion.html Код: java 1. Multiplies this quaternion with another one in the form of this = this * other ... Код: java 1. Multiplies this quaternion with another one in the form of this = other * this maytonЭто вопрос на тему геймдева и физики столкновений.Не, здесь нет физики (то, что делается физическими движками PhysX, Havok, Bullet), здесь чисто кинематика. Ну и за кадром остался простенький collision detection (кубик докатывается до стенки ⇒ меняем направление движения). maytonИ его уместно задавать не в этом форуме а там где тусят геймдевы.Простые вопросы по разработке игр можно и в этом форуме задавать. А вот вопросы типа «Разработка ММО игры» -- да, смысла мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 20:39 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Пётр, сможете дать ещё одну подсказку на эту же тему? Я сделал так, чтобы кубик вращался с помощью мыши. Т.е. куда я мышь веду, в ту сторону он и вращается. Вопрос: как узнать, на какой стороне лежит кубик? Казалось бы, ответ: узнать, на какой угол повёрнут кубик относительно X, относительно Y и относительно Z с помощью getAngleAround(ось). Ради эксперимента я воспользовался ещё просто некоторым getAngle() - угол, на который повёрнут кватернион. Код: sql 1. 2. 3. 4. (для справки: Vector3.X - это вектор (1; 0; 0)) углы выдаются в градусах Стал выводить эти углы ради эксперимента прямо на экран. Вопрос: почему при незначительно мелком изменении так меняются углы? И меняются они как-то хаотично почти, скачут на очень большие значения. Не могу проследить зависимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 00:30 |
|
||
|
Кватернионы знает кто-нибудь? Брошенные кубики как правильно вращать?
|
|||
|---|---|---|---|
|
#18+
Charles Weyland Вопрос: как узнать, на какой стороне лежит кубик?Я бы делал так. Сначала вычисляем, где находятся центры граней, в мировой системе координат: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. (hs, 0, 0) -- центр первой грани в локальной системе координат кубика face_1_center -- центр первой грани в мировой системе координат и т. д. А потом просто смотрим, центр какой грани ниже всего: Код: java 1. 2. 3. 4. 5. 6. 7. Charles Weyland Казалось бы, ответ: узнать, на какой угол повёрнут кубик относительно X, относительно Y и относительно Z с помощью getAngleAround(ось). Код: sql 1. 2. 3. (для справки: Vector3.X - это вектор (1; 0; 0)) углы выдаются в градусах Стал выводить эти углы ради эксперимента прямо на экран. Вопрос: почему при незначительно мелком изменении так меняются углы? И меняются они как-то хаотично почти, скачут на очень большие значения. Не могу проследить зависимости. Смысл метода getAngleAround я не особо понял из документации. Попробуйте лучше углы Эйлера (yaw, pitch, roll), для них есть специальные методы: getYaw, getPitch, getRoll. Углы Эйлера не должны бешено скакать. Charles WeylandРади эксперимента я воспользовался ещё просто некоторым getAngle() - угол, на который повёрнут кватернион. Код: sql 1. Единичный кватернион задаёт преобразование координат типа «поворот». На какой угол этот поворот, как раз можно узнать с помощью этого метода, насколько я понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 03:30 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39211567&tid=1340748]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 413ms |

| 0 / 0 |
