给出以下坐标系 1 ,其中正z
朝向上限:
我有一个名为glm::vec3
的{{1}},代表3D空间中两个点dir
和A
之间的(规范化)方向 2 :
两个点B
和A
恰好在同一平面上,因此B
的{{1}}坐标为零。现在,给定角度z
,我想将dir
朝天花板旋转指定的量。例如,如果α
为45度,我希望dir
指向相同的α
/ dir
方向,但指向天花板 { {3}} :
我最初的想法是计算x
的“右”向量,并将其用作旋转轴。我尝试了以下操作:
y
我希望调用dir
会返回一个代表我想要的新方向的矢量,但是它总是返回一个glm::vec3 rotateVectorUpwards(const glm::vec3& input, const float aRadians)
{
const glm::vec3 up{0.0, 0.0, 1.0};
const glm::vec3 right = glm::cross(input, glm::normalize(up));
glm::mat4 rotationMatrix(1); // Identity matrix
rotationMatrix = glm::rotate(rotationMatrix, aRadians, right);
return glm::vec3(rotationMatrix * glm::vec4(input, 1.0));
}
分量为零的矢量。
我还尝试用四元数表示相同的旋转:
rotateVectorUpwards(dir, glm::radians(45))
但是,再次,所得向量似乎总是具有零个z
分量。
我在做什么错?
glm::quat q;
q = glm::rotate(q, aRadians, right);
return q * input;
计算不正确吗?我如何达到我想要的结果?
答案 0 :(得分:0)
您不需要归一化import pandas as pd
import matplotlib.pyplot as plt
test = pd.DataFrame({'x': range(50), 'y': [i if i != 40 else 10 for i in range(50)]})
plt.figure(**FIGURE)
plt.scatter(test['x'], test['y'], marker='x')
plt.show()
向量,因为您已将其定义为单位向量,但是您确实需要归一化up
向量。
但是,尽管我不熟悉glm,但我怀疑问题是您正在绕轴旋转矩阵(或四元数),而不是创建代表绕轴旋转的矩阵/四元数。快速浏览一下文档,看来您可能想使用:
right