我现在已经摸不着头脑了。如何做到这一点。
我在3d空间中有两个已定义的向量。将矢量X称为(0,0,0),将矢量Y称为(3,3,3)。我将在这两个向量之间的一条线上得到一个随机点。在这一点上,我想形成一个圆(一些点)垂直于给定半径的X和Y之间的线。
希望它清楚我正在寻找什么。我已经查看过许多类似的问题,但根据这些问题无法弄清楚。谢谢你的帮助。
修改: (无法将所有内容都置于评论中,因此请在此处添加) @WillyWonka
嗨,感谢您的回复,我在实施您的解决方案方面取得了一些成功,但是遇到了一些麻烦。它大部分时间都有效,除了Y点位于(20,20,20)之类的特定场景。如果它直接坐在任何轴上就可以了。
但是一旦它进入对角线,垂直点和原点之间的距离由于某种原因变得更小,并且在非常特定的对角线位置它有点翻转垂直点。
以下是您要查看的代码
public Vector3 X = new Vector3(0,0,0);
public Vector3 Y = new Vector3(0,0,20);
Vector3 A;
Vector3 B;
List<Vector3> points = new List<Vector3>();
void FindPerpendicular(Vector3 x, Vector3 y)
{
Vector3 direction = (x-y);
Vector3 normalized = (x-y).normalized;
float dotProduct1 = Vector3.Dot(normalized, Vector3.left);
float dotProduct2 = Vector3.Dot(normalized, Vector3.forward);
float dotProduct3 = Vector3.Dot(normalized, Vector3.up);
Vector3 dotVector = ((1.0f - Mathf.Abs(dotProduct1)) * Vector3.right) +
((1.0f - Mathf.Abs(dotProduct2)) * Vector3.forward) +
((1.0f - Mathf.Abs(dotProduct3)) * Vector3.up);
A = Vector3.Cross(normalized, dotVector.normalized);
B = Vector3.Cross(A, normalized);
}
答案 0 :(得分:1)
首先要做的是找到垂直于XY线的平面的两个正交基矢量,通过您选择的点。
首先需要找到一个垂直于XY的矢量。要做到这一点:
现在您有两个基础向量来计算圆坐标,称之为 A 和 B 。拨打您选择的点 P 。
然后可以通过
参数计算圆上的任何点 Q(r, t) = P + r * (A * cos(t) + B * sin(t))
其中t
是一个角度(介于0和2π之间),r
是圆的半径。