早教吧作业答案频道 -->数学-->
空间(vector3)位置求旋转算法前提不借助外部库,已知空间内任意一点求其以原点位置旋转的度数.rotX,rotY,rotZ
题目详情
空间(vector3)位置求旋转算法
前提不借助外部库,已知空间内任意一点 求其以原点位置旋转的度数.
rotX,rotY,rotZ
前提不借助外部库,已知空间内任意一点 求其以原点位置旋转的度数.
rotX,rotY,rotZ
▼优质解答
答案和解析
//
void rotAxis3D_Tech_Matrix(float theta, float nx, float ny, float nz, float (&ptIn)[3], float (&ptOut)[3])
{
float len = sqrtf(nx * nx + ny * ny + nz * nz); //normalize vector
nx /= len; ny /= len; nz /= len;
ptOut[0] = ptIn[0] * (cosf(theta) + nx * nx * (1 - cosf(theta))) + //transform by matrix
ptIn[1] * (nx * ny * (1 - cosf(theta)) - nz * sinf(theta)) +
ptIn[2] * (nx * nz * (1 - cosf(theta) + ny * sinf(theta)));
ptOut[1] = ptIn[0] * (nx * ny * (1 - cosf(theta)) + nz * sinf(theta)) +
ptIn[1] * (ny * ny * (1 - cosf(theta)) + cosf(theta)) +
ptIn[2] * (ny * nz * (1 - cosf(theta)) - nx * sinf(theta));
ptOut[2] = ptIn[0] * (nx * nz * (1 - cosf(theta) - ny * sinf(theta))) +
ptIn[1] * (ny * nz * (1 -cosf(theta)) + nx * sinf(theta)) +
ptIn[2] * (nz * nz * (1 - cosf(theta)) + cosf(theta));
}
直接给出个算法吧,这个算法直接用矩阵作的,在一般情况下也就不用四元数了.
晕,哥哥看错了,你是问OpenGL,那把上面公式中的矩阵提取出来,注意到这个矩阵是三阶的,最后一行是给你设置平移参数的.可以简单设置为 0 0 0 1
构造好矩阵之后,调用glLoadMatrixf设置ModelView矩阵就OK了,
上面矩阵如何提取?
(cosf(theta) + nx * nx * (1 - cosf(theta)))
(nx * ny * (1 - cosf(theta)) - nz * sinf(theta))
(nx * nz * (1 - cosf(theta) + ny * sinf(theta))) 这是第一列,其他两列也这么提取就可以了
当然这是假设没有平移和缩放变换的
void rotAxis3D_Tech_Matrix(float theta, float nx, float ny, float nz, float (&ptIn)[3], float (&ptOut)[3])
{
float len = sqrtf(nx * nx + ny * ny + nz * nz); //normalize vector
nx /= len; ny /= len; nz /= len;
ptOut[0] = ptIn[0] * (cosf(theta) + nx * nx * (1 - cosf(theta))) + //transform by matrix
ptIn[1] * (nx * ny * (1 - cosf(theta)) - nz * sinf(theta)) +
ptIn[2] * (nx * nz * (1 - cosf(theta) + ny * sinf(theta)));
ptOut[1] = ptIn[0] * (nx * ny * (1 - cosf(theta)) + nz * sinf(theta)) +
ptIn[1] * (ny * ny * (1 - cosf(theta)) + cosf(theta)) +
ptIn[2] * (ny * nz * (1 - cosf(theta)) - nx * sinf(theta));
ptOut[2] = ptIn[0] * (nx * nz * (1 - cosf(theta) - ny * sinf(theta))) +
ptIn[1] * (ny * nz * (1 -cosf(theta)) + nx * sinf(theta)) +
ptIn[2] * (nz * nz * (1 - cosf(theta)) + cosf(theta));
}
直接给出个算法吧,这个算法直接用矩阵作的,在一般情况下也就不用四元数了.
晕,哥哥看错了,你是问OpenGL,那把上面公式中的矩阵提取出来,注意到这个矩阵是三阶的,最后一行是给你设置平移参数的.可以简单设置为 0 0 0 1
构造好矩阵之后,调用glLoadMatrixf设置ModelView矩阵就OK了,
上面矩阵如何提取?
(cosf(theta) + nx * nx * (1 - cosf(theta)))
(nx * ny * (1 - cosf(theta)) - nz * sinf(theta))
(nx * nz * (1 - cosf(theta) + ny * sinf(theta))) 这是第一列,其他两列也这么提取就可以了
当然这是假设没有平移和缩放变换的
看了空间(vector3)位置求旋...的网友还看了以下:
电子在围绕原子核外部空间运动那原子内部真的是空的吗?还是有其他的物质?我的意思是原子核与电子之间的空 2020-03-30 …
空心大树的成因为何会空心的原因以及形成的不同情况,不同种类的树空心的原因等,越详细越好!拜谢!希望 2020-04-26 …
空调专卖店卖出去空调总数的25%,又运进来15台,这时空调的台数恰好是原来的6/7原来有空调多少台 2020-05-13 …
下列各项表述中,两个粒子一定不是同种元素的原子的是()A.3p能级有一个空轨道的基态原子和核外电子 2020-05-13 …
下列各组表述中,两个微粒不属于同种元素原子的是()A.3p能级有一个空轨道的基态原子和核外电子的排 2020-05-13 …
下列关于空气中各组成成分说法正确的是()A.空气中的氮气可作为生产氮肥的原料B.空气中的二氧化碳是 2020-05-14 …
原子内的空间是什么?原子里不有很大的空间吗?请问那很大的空间是由什么构成的?除了原子核和核外电子. 2020-05-16 …
按照课文原文填空。()的天空中挂着一轮()的圆月,下面是海边的沙地,都种着()按照课文原文填空。( 2020-05-16 …
物理学中的杯 空间那个杯 原文“三维的空间和一维的时间组成了我们所处的四维世界,在四维空间中,两个 2020-05-16 …
飞机和直升飞机有什么不同的升空原理?飞机、火箭、导弹、气球和飞艇的区别? 2020-05-17 …