求旋转矩阵转为四元数的程序。

求旋转矩阵转为四元数的程序。,第1张

Quat Mat3ToQuat( float** mat )

{

Quat q

float trace

float s

float t

int i

int j

int k

static int next[ 3 ] = { 1, 2, 0 }

trace = mat[ 0 ][ 0 ] + mat[ 1 ][ 1 ] + mat[ 2 ][ 2 ]

if ( trace >0.0f )

{

t = trace + 1.0f

s = 0.5f / sqrtf(t)

q[3] = s * t

q[0] = ( mat[ 2 ][ 1 ] - mat[ 1 ][ 2 ] ) * s

q[1] = ( mat[ 0 ][ 2 ] - mat[ 2 ][ 0 ] ) * s

q[2] = ( mat[ 1 ][ 0 ] - mat[ 0 ][ 1 ] ) * s

} else {

i = 0

if ( mat[ 1 ][ 1 ] >mat[ 0 ][ 0 ] ) {

i = 1

}

if ( mat[ 2 ][ 2 ] >mat[ i ][ i ] ) {

i = 2

}

j = next[ i ]

k = next[ j ]

t = ( mat[ i ][ i ] - ( mat[ j ][ j ] + mat[ k ][ k ] ) ) + 1.0f

s = 0.5f / sqrtf(t)

q[i] = s * t

q[3] = ( mat[ k ][ j ] - mat[ j ][ k ] ) * s

q[j] = ( mat[ j ][ i ] + mat[ i ][ j ] ) * s

q[k] = ( mat[ k ][ i ] + mat[ i ][ k ] ) * s

}

return q

}

上述代码来至与ID4号引擎。

//弯扮携 Convert to Axis/Angles

void Quaternion::getAxisAngle(Vector3 *axis, float *angle)

{

float scale = sqrt(x * x + y * y + z * z)

axis->埋伏x = x / scale

axis->缺指y = y / scale

axis->z = z / scale

*angle = acos(w) * 2.0f

}

工具箱里面有个examples的文件夹,文件夹中有个colour_edge_detector.m的文件,把这个文件拷到主文件夹qtfm里面就可以槐谈运行,这是个彩色图像的边缘检测,前面的几行就是彩色图像的卷积铅弯碰,你可以把程序闹则里面读取url地址下的图像改成你自己要用的图像


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12257492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存