范数归一化
程序示例:以三维坐标为例
float get_square_norm(float x, float y, float z)
{
return (x * x + y * y + z * z);
}
float inv_sqrt( float val )
{
float half = 0.5f * val;
long i = *(long*)&val;
i = 0x5F3759DF - ( i >> 1 );
val = *(float*)&i;
val = val * ( ( 1.0f + 0.5f ) - half * val * val );
return val;
}
void normalize(float* x, float* y, float* z) {
float norm = inv_sqrt( get_square_norm( *x, *y, *z ) );
*x *= norm;
*y *= norm;
*z *= norm;
return;
}