输入:两个多维(例如 dim=8)向量 a 和 b。
我需要找出这些向量 a 和 b 之间的“有向”角度(0-2*Pi,而不是 0-Pi)。如果它们不平行,我需要将平面 a、b 中的向量 b 旋转“定向”角度 L。如果它们平行,平面无关紧要,但旋转角度仍然是相同的 L。
对于 2d 和 3d,这很容易,但对于更多维度,我迷路了,我在谷歌上没有找到任何东西,我更喜欢使用一些已经证明和测试过的方程(避免我的计算引入的错误 :-D)。
提前感谢您提供提示、链接等。
输入:两个多维(例如 dim=8)向量 a 和 b。
我需要找出这些向量 a 和 b 之间的“有向”角度(0-2*Pi,而不是 0-Pi)。如果它们不平行,我需要将平面 a、b 中的向量 b 旋转“定向”角度 L。如果它们平行,平面无关紧要,但旋转角度仍然是相同的 L。
对于 2d 和 3d,这很容易,但对于更多维度,我迷路了,我在谷歌上没有找到任何东西,我更喜欢使用一些已经证明和测试过的方程(避免我的计算引入的错误 :-D)。
提前感谢您提供提示、链接等。
您可能会发现这篇论文很有用:AJ Hanson 的 N-Dimensional Graphics 旋转。还有这篇论文:General n-Dimensional Rotations。您还可以查看这个论坛帖子,那里有很多人试图解决这个问题。这是另一篇论文:On the Rigid Rotation Concept in n-Dimensional Spaces。必须。停止。谷歌搜索。
我相信你应该在你的向量 a 和 b 生成的平面上工作。无论维度如何,代码都是相同的(顺便说一句,向量的维度根据定义是空间的维度)。
您可以通过将 (a,b) 正交化为:
a' = a/||a||
b1 = b - (a'·b)a' <-- scalar product denoted by ·
b' = b1/||b||
现在你在一个具有正交基的平面上,应该重新开始工作。b 在那个基础上的坐标是(a'·b,b'·b)。对于 a,它同样是 (||a||,0)。当您想返回环境空间时,只需将坐标 (x1,x2) 的向量写为 x1 a' + x2 b'。
我希望数学符号不会太混乱。