C# 在三维空间中沿向量查找点

C# 在三维空间中沿向量查找点,c#,vector,unity3d,3d,C#,Vector,Unity3d,3d,我在3d空间中有两个点,我想得到它们之间的点列表,这些点彼此之间的距离为“r”。如何使用unity函数最容易地实现这一点? 您可以使用矢量3来完成它。向移动我不熟悉单位函数,但您正式描述了两点之间的线性插值。点A和B之间的线段可以用参数化形式描述 A * s + B * (1-s) 其中s来自间隔[0,1]Vector3[]GetPointsInbetween(Vector3 a、Vector3 b、浮点偏移量){ Vector3[] GetPointsInbetween(Vector3 a,

我在3d空间中有两个点,我想得到它们之间的点列表,这些点彼此之间的距离为“r”。如何使用unity函数最容易地实现这一点?

您可以使用
矢量3来完成它。向
移动我不熟悉单位函数,但您正式描述了两点之间的线性插值。点
A
B
之间的线段可以用参数化形式描述

A * s + B * (1-s)
其中
s
来自间隔
[0,1]

Vector3[]GetPointsInbetween(Vector3 a、Vector3 b、浮点偏移量){
Vector3[] GetPointsInbetween(Vector3 a, Vector3 b, float offset){
    int count = (int)((b - a).magnitude / offset);
    Vector3[] result = new Vector3[count];

    Vector3 delta = (b - a).normalized * offset;

    for (int i = 0; i < count; i++) {
        result[i] = a + delta * i;
        Debug.Log(result[i]);
    }

    return result;
}
整数计数=(整数)((b-a).震级/偏移量); Vector3[]结果=新Vector3[计数]; 向量3δ=(b-a).归一化*偏移量; for(int i=0;i

但是
.magnity
.normalized
是非常昂贵的操作,请尽量避免在
Update()

中使用此操作。尽管正确,但您可能应该跳过第一次迭代(i=0),因为它只是初始位置。您在这里所做的是重新编写Lerp!哈哈,有趣的是,我从来没有使用过Lerp,只是为了平滑运动:我忘记了Lerp是线性插值,好的@Joeblow这正是Lerp。您所做的只是描述Lerp命令。A和b之间的点就是Lerp(A,b,.5f)。。。那一个是中间的。如果你想要十个步骤,它只是Lerp(a,b,.1f),Lerp(a,b,.2f),Lerp(a,b,.3f)等等。不是真的,你想要的是Lerp。MoveToward有点不同。它内置于Unity中——您可以在几乎所有其他代码行中使用它!