Massaraksh: Все сообщения за 22 Июня 2019 года

 
ПнВтСрЧтПтСбВс
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Massaraksh

аксакал
★☆
3X>> Путин запретил авиасообщение с Грузией - Россия 24 - YouTube
Полл> Сейчас грузинских оппозиционеров начнут бить.
Полл> Возможно, ногами.
Полл> И совсем не полиция.
Не обольщайся.
+
+1
-
edit
 

Massaraksh

аксакал
★☆
Когда-то разбирался, сделал даже какую-то библиотеку работы с ними
//========================================// // Квантернионы // //========================================// type TQuaternion=record w,x,y,z:Extended; end; //-Умножить кватернион на скаляр procedure MultQuatKf(A:TQuaternion;kf:Extended;var X:TQuaternion); begin X.w:=A.w*kf;X.x:=A.x*kf;X.y:=A.y*kf;X.z:=A.z*kf; end; //-Умножить кватернион на кватернион procedure MultQuat(A,B:TQuaternion;var X:TQuaternion); begin X.w:=A.w*B.w-A.x*B.x-A.y*B.y-A.z*B.z; X.x:=A.w*B.x+A.x*B.w+A.y*B.z-A.z*B.y; X.y:=A.w*B.y-A.x*B.z+A.y*B.w+A.z*B.x; X.z:=A.w*B.z+A.x*B.y-A.y*B.x+A.z*B.w; end; //-Скалярное произведение кватернионов function MultScalQuat(A,B:TQuaternion):Extended; begin Result:=A.w*B.w+A.x*B.x+A.y*B.y+A.z*B.z; end; //-Сложить кватернион с кватернионом procedure AddQuat(A,B:TQuaternion;var X:TQuaternion); begin X.w:=A.w+B.w;X.x:=A.x+B.x;X.y:=A.y+B.y;X.z:=A.z+B.z; end; //-Модуль кватерниона function ModQuat(A:TQuaternion):Extended; begin Result:=Sqrt(Sqr(A.w)+Sqr(A.x)+Sqr(A.y)+Sqr(A.z)); end; //-Сопряжение кватерниона procedure ComplQuat(A:TQuaternion;var X:TQuaternion); begin X.w:=A.w;X.x:=-A.x;X.y:=-A.y;X.z:=-A.z; end; //-Норма кватерниона function NormQuat(A:TQuaternion):Extended; begin Result:=Sqr(A.w)+Sqr(A.x)+Sqr(A.y)+Sqr(A.z); end; //-Обратный кватернион procedure InvQuat(A:TQuaternion;var X:TQuaternion); var b:Extended; begin b:=ModQuat(A); ComplQuat(A,X);X.w:=X.w/b;X.x:=X.x/b;X.y:=X.y/b;X.z:=X.z/b; end; //-Нормировать вектор procedure NormalizeVector(A:T3Vector;var X:T3Vector); var v:Extended; begin v:=Sqrt(Sqr(A.x)+Sqr(A.y)+Sqr(A.z)); X.x:=A.x/v;X.y:=A.y/v;X.z:=A.z/v; end; //-Создать кватернион из вектора и угла вращения procedure CreateQuat(A:T3Vector;angle:Extended;Q:TQuaternion); begin NormalizeVector(A,A); Q.w:=Cos(angle/2); Q.x:=A.x*Sin(angle/2); Q.y:=A.y*Sin(angle/2); Q.z:=A.z*Sin(angle/2); end; //-Умножить кватернион на вектор procedure MultQuatVect(A:TQuaternion;B:T3Vector;var X:TQuaternion); begin X.w:=-a.x*b.x-a.y*b.y-a.z*b.z; X.x:=a.w*b.x+a.y*b.z-a.z*b.y; X.y:=a.w*b.y-a.x*b.z+a.z*b.x; X.z:=a.w*b.z+a.x*b.y-a.y*b.x; end; //-Поворот вектора кватернионом procedure QuatTransformVector(Q:TQuaternion;V:T3Vector;var X:T3Vector); var TQ:TQuaternion; begin MultQuatVect(Q,V,TQ); InvQuat(Q,Q); MultQuat(TQ,Q,TQ); X.x:=TQ.x; X.y:=TQ.y; X.z:=TQ.z; end; 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru