Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];

Вниз

Что делает следующий код с векторами?   Найти похожие ветки 

 
novai   (2009-08-13 08:44) [0]


type
TQuat = packed record
 X,Y,Z,W: single;
end;

TVector = packed record
 X,Y,Z: single;
end;

...

function QmulV(q: TQuat; v: TVector): TVector;
var
a11,a12,a13: single;
a21,a22,a23: single;
a31,a32,a33: single;
Norm: single;
begin
with q do begin
 Norm := 1/(x*x + y*y + z*z + w*w);
 a11 :=   (w*w + x*x - y*y - z*z)*Norm;
 a12 := 2*(x*y - w*z)*Norm;
 a13 := 2*(x*z + w*y)*Norm;
 a21 := 2*(x*y + w*z)*Norm;
 a22 :=   (w*w + y*y - x*x - z*z)*Norm;
 a23 := 2*(y*z - w*x)*Norm;
 a31 := 2*(x*z - w*y)*Norm;
 a32 := 2*(y*z + w*x)*Norm;
 a33 :=   (w*w + z*z - x*x - y*y)*Norm;
end;
result.X:= a11*v.X+a12*v.Y+a13*v.Z;
result.Y:= a21*v.X+a22*v.Y+a23*v.Z;
result.Z:= a31*v.X+a32*v.Y+a33*v.Z;
end;


 
novai   (2009-08-13 08:45) [1]

и для чего нужно W? в

TQuat = packed record
X,Y,Z,W: single;
end;


 
MBo ©   (2009-08-13 09:05) [2]

преобразование кватерниона в матрицу аффинного преобразования и применение этого преобразования к вектору


 
brother ©   (2009-08-13 09:19) [3]

а можно ли узнать угол поворота по каждой из осей относительно центра плоскостей и как?
Direction.x
Direction.y
Direction.z


 
MBo ©   (2009-08-13 09:23) [4]

>а можно ли узнать угол поворота по каждой из осей относительно центра плоскостей и как?

Если я правильно понял вопрос, то в статьях о кватернионах можно найти функции преобразования кватерниона в эйлеровы углы


 
brother ©   (2009-08-13 09:45) [5]

ух, сколько информации, нашел вот:

void QuaternionToAxisAngle(Quaternion quat, Vector * axis, float * angle) {
 float sinAngle;
 
 QuaternionNormalize(&quat);
 sinAngle = sqrt(1.0f - (quat.w * quat.w));
 if (fabs(sinAngle) < 0.0005f) sinAngle = 1.0f;
 axis->x = (quat.x / sinAngle);
 axis->y = (quat.y / sinAngle);
 axis->z = (quat.z / sinAngle);
 *angle = (acos(quat.w) * 2.0f);
}

и

void QuaternionNormalize(Quaternion * quat) {
 float magnitude;
 
 magnitude = sqrt((quat->x * quat->x) + (quat->y * quat->y) + (quat->z * quat->z) + (quat->w * quat->w));
 quat->x /= magnitude;
 quat->y /= magnitude;
 quat->z /= magnitude;
 quat->w /= magnitude;
}

кто сможет помоч перевести на делфи?


 
MBo ©   (2009-08-13 09:52) [6]

это не то - здесь находится угол поворота не относительно  осей координат (которых три), а относительно оси, заданной кватернионом


 
brother ©   (2009-08-13 09:53) [7]

эээ, тады ой)


 
novai   (2009-08-13 09:59) [8]

Вот что у меня не получается:

этими процедурами получаю позицию и ориентацию:

procedure GetActorGlobalPosition(actor: dword; x,y,z: psingle); stdcall; external DLL;
procedure GetActorGlobalOrientation(actor: dword; x,y,z,w: psingle); stdcall;
external DLL;


в GLScene куб имеет positin(x,y,z) и direction(x,y,z)

вот я и не могу применить
GetActorGlobalOrientation к direction


 
Ega23 ©   (2009-08-13 10:34) [9]

<OFFTOP>
Борис, а потом ты ещё удивляешься, почему все тебя математиком считают... :)))
</OFFTOP>


 
MBo ©   (2009-08-13 14:04) [10]

Ega23 ©   (13.08.09 10:34) [9]
<OFFTOP>
Ну, как известно, достаточно пары ведер пива, и все выясняется :)
</OFFTOP>


 
Дуп   (2009-08-13 17:06) [11]

Давно не ходил в форумы. Такие вопросы обычно в игры складывали. Сейчас там скучно. А они оказывается тут. Понятно.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
10-1160503048
WQSing
2006-10-10 21:57
2009.10.18
name по dispid


2-1250700077
Lex_okha
2009-08-19 20:41
2009.10.18
Помогите решить проблему


2-1250058131
Sergey2
2009-08-12 10:22
2009.10.18
деление без остатка


2-1250832350
GlTech
2009-08-21 09:25
2009.10.18
Указатели


2-1250337245
Чипырик
2009-08-15 15:54
2009.10.18
Вопрос по БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский