如何在垂直于直线的平面上计算(或旋转)四个点

问题描述 投票:0回答:1

我需要为垂直于所述3D线的3D线段生成一个4点正方形的“盖帽”。理论上,该线可以是3D空间中的任何线,并由3D空间中的2个点来描述。

“

到目前为止,我已经能够通过使用2D旋转算法通过更改其X和Z位置来正确绕Y轴旋转这些点(在Godot中指向上),但是我看不到合并3维旋转的方法。

据我所知,它需要一种全新的算法来旋转3D空间中的点(四元数?),但我还没有找到我能理解的代码应用程序。

一种思考方式是,我需要根据其法线生成一个正方形平面。这些点必须形成边“ L”的正方形,因此我不能使用生成随机点的算法。

我感谢您提供的任何帮助。

math 3d rotation godot
1个回答
0
投票

四元数很有趣,但不是必需的。这里可以使用旋转矩阵。

算法概述:

  • 假设p1和p2是直线的3D点
  • 让p1p2为从p1到p2的归一化向量(normalize(p2-p1))
  • 将四个点s1,s2,s3,s4放置在(0,1,1),(0,1,-1),(0,-1,-1),(0,1,-1);这些是形成垂直于x轴的正方形的点的初始位置;如果太小,只需将它们乘以所需的大小
  • 让xvec成为单位x向量(1、0、0)
  • 让轴成为p1p2和xvec的叉积
  • 如果轴的范数为零,则不需要旋转->跳过旋转步骤,否则:
    • theta = acos(dotproduct(xvec,p1p2))
    • 使用θ和轴像this wikipedia page中那样构建旋转矩阵
    • 将s1,s2,s3,s4与旋转矩阵相乘
  • 将p1加到s1,s2,s3,s4以得到位置p1的平方
  • 将p2添加到s1,s2,s3,s4以在位置p2处得到平方
© www.soinside.com 2019 - 2024. All rights reserved.