空间(vector3)位置求旋转算法
来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/20 03:31:38
空间(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))) 这是第一列,其他两列也这么提取就可以了
当然这是假设没有平移和缩放变换的
求算法:opengl 绕任意轴旋转后的坐标
粒子群算法中粒子的位置与搜索空间是什么关系?
空间位置关系
空间的位置关系
射线OA绕端点O逆时针旋转270°到达OB的位置,由OB位置顺时针旋转一周到达OC位置,求∠AOC的大小
空间直角坐标系上的某点按原点旋转后的坐标怎么求?
空间两向量之间的旋转角如何求?角度范围在0-360°
空间几何已知3点和旋转后的三点 求轴线
包括:数的认识和符号方程和不等式运算(公式,类别,简算,交换,结合.)空间与图形的认识变换(平易,旋转.)位置(图形长度
空间(直线的位置关系)
空间与直线位置关系
有两个摄像头A和B,已知A和B的空间位置关系,以及一个平面与摄像头A的空间位置关系,求将平面经过怎样的空间位置转换才能在