| Matemática :: Quaternion. matemática :: Quaternion é uma classe Perl para representar quaternições. |
Baixe Agora |
Matemática :: Quaternion. Classificação e resumo
- Licença:
- Perl Artistic License
- Nome do editor:
- Jonathan Chin
- Site do editor:
- http://search.cpan.org/~jchin/
Matemática :: Quaternion. Tag
Matemática :: Quaternion. Descrição
Matemática :: Quaternion é uma classe Perl para representar quaternições. Matemática :: Quaternion é uma classe Perl para representar quaternions.synopsis usar matemática :: Quaternion QW (SLERP); Meu $ Q = Matemática :: Quaternion-> Novo; # Faça uma nova unidade Quaternion # Faça uma rotação sobre o eixo (0,1,0) Minha $ Q2 = Matemática :: Quaternion-> NOVO ({AXIS => , Ângulo => 0.1}) ; meu @V = (1,2,3); # Um vetor. meu @Vrotated = $ Q2-> rotate_vector (@V); # Gire @V sobre (0,1,0). Meu $ Q3 = Matemática :: Quaternion :: Rotação (0.7,2,1,4); # Uma rotação diferente. Meu $ Q4 = SLERP ($ Q2, $ Q3.0.5); # Rotação interpolada. Meu @Vinterp = $ Q4-> Rotate_Vector (@V); Este pacote permite criar e manipular quaternições. Uma quaternion é um objeto matemático desenvolvido como uma espécie de generalização de números complexos, geralmente representados por uma matriz de quatro números reais, e é freqüentemente usado para representar rotações no espaço tridimensional. Veja, por exemplo, http: // mathworld. wolfram.com/quaternion.html Para mais detalhes sobre a matemática de Quaternions.Quaternions pode ser adicionado, subtraído e dimensionado apenas como números complexos ou vetores - eles também podem ser multiplicados, mas a multiplicação de quaternion não comutar. Ou seja, se você tiver Quaternões $ Q1 e $ Q2, em geral $ Q1 * $ Q2! = $ Q2 * $ Q1. Isto está relacionado ao seu uso na representação de rotações, que também não se movam. Se você quer apenas representar rotações e não se importar com os detalhes matemáticos internos, isso deve ser tudo que você precisa saber: Todas as quordernas têm uma quantidade chamada "Norm", semelhante ao comprimento de um vetor. Uma quaternião com norma igual a 1 é chamada de "unidade quaternion". Todas as Quaternões que representam as rotações são a unidade Quaternions. se você ligar para novo () sem nenhum argumento, ele lhe dará uma unidade quaternion que não representa rotação: $ Q = Matemática :: Quaternion-> Novo; você pode fazer uma quaternion que representa uma quaternion rotação de um dado ângulo (em radianos) sobre um dado eixo: $ qrot = math :: quaternion-> novo ({eixo => 0.1, ângulo => }); diga que você tem duas rotações, $ Q1 e $ Q2, e você quer fazer uma quaternion representando uma rotação de $ Q1 seguido por $ Q2. Então, você faz: $ Q3 = $ Q2 * $ Q1; # Girar por $ Q1, seguido por $ Q2.Remember que isso não é o mesmo que $ Q1 * $ Q2, que irá reverter a ordem das rotações. Se você executar muitas operações de quaternion iteradas, o resultado pode não ser uma unidade quaternion devido a imprecisões numéricas. Você pode garantir que qualquer quaternion tenha comprimento da unidade, fazendo: $ unitquat = $ anyQuat-> normalize; se você tiver uma quaternion de rotação, e você quiser encontrar a matriz 3x3, que representa a rotação correspondente, então: @matrix = $ Q -> Matrix3x3; Da mesma forma, você pode gerar uma matriz 4x4 do tipo que passaria para OpenGL: @glmatrix = $ Q-> matrix4x4; se você tiver um vetor representando uma direção, e você quer girar o vetor de uma quaternion $ Q: meu @Vector = (0,0,1); # Vector apontando na direção z. meu @newvec = $ Q-> rotate_vector (@Vector); # Nova direção.say você está usando quaternions para representar a orientação de uma câmera, e você tem duas quaternões: uma para representar uma orientação inicial, e outra para representar uma posição de acabamento. Se você quiser encontrar todas as quaternões representando as orientações entre, permitindo que sua câmera se mova suavemente do início ao final, use a rotina SLERP (): Use matemática :: Quaternion QW (SLERP); meu ($ qstart, $ qend) = ...; # Defina $ tween para 9 pontos entre início e fim, exclusivo. para o meu $ t (1..9) {my $ tween = slamp ($ qstart, $ qend, 0,1 * $ t); ...} Requisitos: · Perl.
Matemática :: Quaternion. Software Relacionado