![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поворот вектора.
йцукен © (2004-12-20 19:47:00)Даны единичные вектора a1(x1,y1,z1) и a2(x2,y2,z2)
Как повернуть вектор a1 в направление вектора a2 на угол alpha?
йцукен (2004-12-21 17:31:00) [1]Всем большое спасибо.
Попробую разобраться.
Da Stranger (2004-12-21 11:18:00) [2]Если на GLScene, то используй функцию VectorAngleLerp(a1,a2,t) из VectorGeometry, где t - степень поворота. Если t=0, то полученный вектор будет совпадать с a1, если t=1, то с a2. Если 0<t<1, то он будет между ними.
MBo (2004-12-21 08:05:00) [3]P,Q - исходные точки
Fi- угол между векторами OP,OQ
t-параметр интерполяции
1. Получаем угол Fi между векторами OP и OQ через скалярное произведение.
2. Получаем единичный вектор u, лежащий на оси вращения - векторное произв.
3. Координаты точки с параметром t 0..1 на искомой дуге -
P*[M=Матрица вращения на угол Alpha=t*Fi вокруг оси, проходящей через O c направл. вектором u]
можешь также погуглить по SLERP - spherical linear interpolation
Я на такое выражение наткнулся:
slerp(t,P,Q) = [sin((1-t)*Fi)*P+sin(t*Fi)*Q]/sin(Fi)
однако в нем была ошибка - отсутствовало Q во втором слагаемом, так что до использования лучше досконально проверить
SLERP, кстати, несложно считается при кватернионном представлении.