Tech News
← Back to articles

Avoiding Trigonometry (2013)

read original related products more articles

Intro

The suboptimal (wrong?) way to orientate an object

mat3x3 rotationAxisAngle( const vec3 & v, float a ) { const float si = sinf ( a ); const float co = cosf ( a ); const float ic = 1.0f - co; return mat3x3 ( v.x*v.x*ic + co, v.y*v.x*ic - si*v.z, v.z*v.x*ic + si*v.y, v.x*v.y*ic + si*v.z, v.y*v.y*ic + co, v.z*v.y*ic - si*v.x, v.x*v.z*ic - si*v.y, v.y*v.z*ic + si*v.x, v.z*v.z*ic + co ); }

rotationAxisAngle()

acos()

acos()

const vec3 axi = normalize ( cross( z, d ) ); const float ang = acosf ( clamp ( dot ( z, d ), - 1.0f , 1.0f ) ); const mat3x3 rot = rotationAxisAngle( axi, ang );

rotationAxisAngle()

const vec3 axi = normalize ( cross ( z, d ) ); const float ang = acosf ( clamp ( dot ( z, d ), - 1.0f , 1.0f ) ); const float co = cosf ( ang ); const float si = sinf ( ang ); const float ic = 1.0f - co; const mat3x3 rot = mat3x3 ( axi.x*axi.x*ic + co, axi.y*axi.x*ic - si*axiz, axi.z*axi.x*ic + si*axi.y, axi.x*axi.y*ic + si*axi.z, axi.y*axi.y*ic + co, axi.z*axi.y*ic - si*axi.x, axi.x*axi.z*ic - si*axi.y, axi.y*axi.z*ic + si*axi.x, axi.z*axi.z*ic + co );

acos()

... continue reading