【发布时间】:2016-05-29 19:41:05
【问题描述】:
我现在一直在摸索如何做到这一点。
我在 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);
}
【问题讨论】:
标签: vector 3d line geometry point