Главная страница
    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.006 c
2-1250168712
Sergey2
2009-08-13 17:05
2009.10.18
checksum


1-1217338897
9899100
2008-07-29 17:41
2009.10.18
WindowState


15-1250254148
Копир
2009-08-14 16:49
2009.10.18
Цифра против аналогии.


15-1250092497
El
2009-08-12 19:54
2009.10.18
Torrent


3-1228301781
tipman
2008-12-03 13:56
2009.10.18
Транзакция в dbase





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский