0
$\begingroup$

I want to rotate a point on a sphere surface . I was instructed as I can use Rodrigues rotation formula , (I thank ja72 very much). I tried to use the formula but it did not work . I can not find where I was wrong . I wrote a short Scilab program for explanation of my current understanding on the formula. Please someone point out where I am wrong.

Thank you very much .

Formula: rotation_matrix = I + sin(θ) * [k]x + (1 - cosθ) * [k]x ^2

[ http://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula ]

In details , the center is at [ 0,0,0 ] and the radius = 1 . I named the point to rotate as point_before . The axis is decided by point_axis and the center point . The angle of rotation = 120 degree.

Scilab code .

//center = [ 0 , 0 , 0 ]

//radius ; point to rotate ; point to decide axis ; and its unit vector matrix; angle

radius = 1.0

point_before = [ radius ; 0 ;0 ]

point_axis = [ 1 , 2 , 3 ]

vector_axis33 = [ 0 , -3 , 2 ; 3 ,0 ,-1 ; -2 , 1 , 0 ] / sqrt( 1 + 2*2 + 3*3 )

angle120 = 3.141592 * 2 / 3

//Identity matrix ; the number in the formula ;the number in the formula

Identity=[ 0,1,0 ; 0,1,0 ; 0,0,1 ]

sin_120 = sin( angle120 )

cos_120 = cos( 1 - angle120 )

//rename variables as short names

I = Identity

uv = vector_axis33

uv2 = uv * uv

//use the formula

rotation_matrix = I + sin_120 * uv + cos_120 * uv2

//the point after the rotation

point_after = rotation_matrix * point_before

//the output ; it is not on the original sphere

- 0.4258284         0.7598773   - 0.3646421  

1 Answers 1

2

There's an error in your identity matrix; the 0 and 1 at the beginning are swapped. Further, it should be 1 - cos( angle120 ), not cos( 1 - angle120 ).

  • 0
    Thank you very much. I corrected my code following your answer then got the correct output .2011-06-16