Rodrigues’ rotation formula: Difference between revisions

Add Factor
m (tasks should start as drafts)
(Add Factor)
Line 53:
<pre>
( 2.232221, 1.395138, -8.370829 )
</pre>
 
=={{header|Factor}}==
Note the following words already exist in Factor, which I have elected not to redefine:
 
{| class="wikitable"
|-
! Word
! Vocabulary
! Equivalent function in JavaScript entry
|-
| <tt>normalize</tt>
| <tt>math.vectors</tt>
| <tt>normalize()</tt>
|-
| <tt>cross</tt>
| <tt>math.vectors</tt>
| <tt>crossProduct()</tt>
|-
| <tt>angle-between</tt>
| <tt>math.vectors</tt>
| <tt>getAngle()</tt>
|-
| <tt>mdotv</tt>
| <tt>math.matrices</tt>
| <tt>matrixMultiply()</tt>
|}
 
{{trans|JavaScript}}
{{works with|Factor|0.99 2021-06-02}}
<lang factor>USING: grouping kernel math math.functions math.matrices
math.vectors prettyprint sequences sequences.generalizations ;
 
:: a-rotate ( p v a -- seq )
a cos a sin :> ( ca sa )
ca 1 - v first3 :> ( t x y z )
x x t * * ca + x y t * * z sa * - x z t * * y sa * +
x y t * * z sa * + ca y y t * * + y z t * * x sa * -
z x t * * y sa * - z y t * * x sa * + ca z z t * * +
9 narray 3 group :> r
r p mdotv ;
 
{ 5 -6 4 } { 8 5 -30 }
dupd [ angle-between ] [ cross ] 2bi normalize swap a-rotate .</lang>
{{out}}
<pre>
{ 2.232221073308229 1.395138170817642 -8.370829024905852 }
</pre>
 
1,808

edits