【问题标题】:finding points along a vector in 3d在 3d 中沿向量查找点
【发布时间】:2016-03-17 09:43:11
【问题描述】:

我在 3d 空间中有两个点,我想获取它们之间的点列表,它们之间的距离为“r”。如何使用统一功能最轻松地做到这一点?

【问题讨论】:

  • 这正是 Lerp 是什么。您所做的只是描述 Lerp 命令。 a 和 b 之间的一个点就是 Lerp(a,b, .5f) ......那个点在中间。如果你想要十步,那就是 Lerp(a,b, .1f), Lerp(a,b, .2f), Lerp(a,b, .3f) 等等。

标签: c# vector unity3d 3d


【解决方案1】:
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;
}

但是.magnitude.normalized是非常昂贵的操作,尽量避免在Update()中使用这个

【讨论】:

  • 尽管是对的,但您应该跳过第一次迭代 (i = 0),因为它只是初始位置。
  • 你在这里所做的是重写 Lerp! docs.unity3d.com/ScriptReference/Vector3.Lerp.html
  • 哈哈,有趣的是我从来没有使用 Lerp 来平滑运动:D 我忘记了 Lerp 是线性插值,很好@JoeBlow
【解决方案2】:

您可以使用Vector3.MoveTowards http://docs.unity3d.com/ScriptReference/Vector3.MoveTowards.html 来完成它

【讨论】:

【解决方案3】:

我不熟悉 Unitiy 函数,但您正式描述了两点之间的线性插值。点AB之间的线段可以用参数化形式来描述

A * s + B * (1-s)

其中s 来自区间[0,1]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
相关资源
最近更新 更多