Войти
ПрограммированиеФорумОбщее

Вращение и кватернионы. Сборник рецептов. (Комментарии к статье)

Страницы: 1 2 3 Следующая »
#0
9:44, 21 авг. 2004

Комментарий к Статье Вращение и кватернионы. Сборник рецептов

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


#1
9:44, 21 авг. 2004

Для лучшего понимания статьи хорошо бы еще все описанные функции представить математически(с использованием матриц, квантерионов), а не только с помощью кода.

#2
11:29, 21 авг. 2004

real-Shadow
Статья ориентирована на практическое использование кватернионов, поэтому не содержит мат . выводов.
И лично для меня НАМНОГО понятнее строчки кода чем математические формулы.

Прошло более 1 года
#3
17:13, 27 авг. 2005

Пояснения к коду в статье
Лучше всего скачать исходники + рекомендуемые реализации векторов (из Nebula Device)


%  скалярное произведение векторов

  •   векторное произведение векторов

  • TINY - маленько число , за пределами используемой точности .  например (0.000001) .

    #4
    19:55, 27 авг. 2005

    >Как мы видим, при конвертировании используется только умножения и сложения, что является несомненным преимуществом на современных процессорах.
    очень порадовало слово "современных" :)))

    #5
    19:56, 27 авг. 2005

    minorlogic
    >TINY - маленько число , за пределами используемой точности . например (0.000001) .
    в С++ лучше использывать std::numeric_limits<float>::epsilon()

    #6
    20:51, 27 авг. 2005

    Скалярное произведение полезно тем, что дает косинус половины угла между двумя кватернионами умноженную на их длину.
    1) Фраза построена неправильно: косинус ... угла и умноженную.
    2) Непонятно: результат произведения один, кватернионов два, а длина снова одна, но их - так на чью длину умножен результат? На сумму/произведение/среднее длин исходных кватернионов? Судя по всему, всё же на произведение длин исходных кватерионов, однако результат длиной уже не является.

    #7
    21:18, 27 авг. 2005

    CyberZX
    Почему лучше? Это все-лишь навсего самое маленькое число, которое прибавленное к 1 даст уже не 1. Погрешность при вычислении может быть гораздо больше.
    А всяки TINY и EPSILON лучше вообще не использовать, их использование говорит о том, что программисту было лень придумать числено устойчивый алгоритм.

    #8
    23:05, 27 авг. 2005

    CyberZX
    Именно на современных ! По моим тестам на пне третьем всетаки деление с плавающей точкой иногда было медленнее умножения, объяснить не могу , может компилятор проглючил , но разница была , причем за предплами точности измерения.  Настаивать на этом не буду , в любом случае есть много процессоров кроме x86.

    Про epsilon , tiny я придерживаюсь взглядов _Winnie, если они появились , значит гдет лень было устоичивое решение искать . Лично меня в формуле , shortest_arc это обломило, до конца не додумал , за что стыдно :(


    arabesc
    Первый блин комом , в статье и стиль страдает и предложения длинные , и много других недостатков. Это еще неплохо , потому что мне помогли статью причесать в свое время. В оригинале , она была еще хуже. Пульцеровской премии мне не видать :(

    Но зато математика (тьху тьху) вроде не глючила.

    Всем спасибо за коментарии !

    #9
    2:07, 28 авг. 2005

    minorlogic
    Лично меня в формуле , shortest_arc это обломило, до конца не додумал , за что стыдно :(
    И тем не менее, тут ссылаются. И этот же код включен в обновление для CD к книге.

    Первый блин комом
    Статьи после публикации не подлежат редактированию?

    Спасибо за труд! :)

    #10
    11:53, 28 авг. 2005

    arabesc
    Прикольно! Вот так вот , глюки и перетекают из одного источника в другой :). Не то что бы , глюк , но до конца недодуманное решение.

    Прошло более 1 года
    #11
    21:55, 29 окт. 2006

    Так, разбирался со статьёй и натолкнулся на это:

    qq' = [ vv' + wv' + w'v, ww – v•v' ]
    Опечатка, я так полагаю ( ww ), пожалуй должно быть так:
    qq' = [ vv' + wv' + w'v, wW' – v•v' ]
    (апостроф после второй w).
    Или нет?

    И натолкнувшись на это, я начал лазить по глобалу, чтобы лучше разобраться с кватернионами. Нашёл эту статью в википедии: Кватернионы

    Так вот, посчитал сам умножение, получил совершенно другой результат:

    (x+yi+zj+wk) * (x'+y'i+z'j+w'k) = xx' + xy'i + xz'j + xw'k + yx'i + yy'i^2 + yz'ij +  yw'ik +
    + zx'j + zy'ji + zz'j^2 + zw'jk + wx'k + wy'ki + wz'kj + ww'k^2 =
    = xx' + xy'i + xz'j + xw'k + yx'i - yy' + yz'k - yw'j + zx'j - zy'k - zz' + zw'i + wx'k + wy'j - wz'i - ww' =
    = (xx' - yy' - zz' - ww') + (xy' + yx' + zw' - wz')i + (xz' - yw' + zx' + wy')j + (xw' + yz' - zy' + wx')k
    Т.е. во-первых - (xx' - yy' - zz' - ww') никак не равно ww' - vv'=ww' - xx'-yy'-zz'  - даже если поменять знаки на обратные.
    Во-вторых: обычно v(x,y,z) = xi + yj + zk. А тут получается, что наоборот: v(x,y,z) = xk + yj + zi. Странно...
    Вроде я в вычислениях не ошибся... Может кто-нибудь разъяснит мне, что здесь к чему?

    #12
    22:26, 29 окт. 2006

    Arks
    >Опечатка, я так полагаю ( ww ), пожалуй должно быть так:...
    Да.

    >Так вот, посчитал сам умножение, получил совершенно другой результат:...
    Ты i, j, k не там расставил.

    #13
    8:30, 30 окт. 2006

    > Ты i, j, k не там расставил.
    Ах, ну да...)) Всё сходится. Вопрос закрыт.

    Прошло более 9 месяцев
    #14
    20:49, 29 июля 2007

    #include "mathlib/vector.h" - взять можно сдесь http://nebuladevice.cubik.org/documentation/nebula2/dir_000004.shtml.
    Но дним этим файлом не обойтись.

    Страницы: 1 2 3 Следующая »
    ПрограммированиеФорумОбщее