将矢量幅度减少特定长度的有效方法



假设我有一个任意向量A。将向量大小减少任意量的最有效方法是什么?

我目前的方法如下:

Vector shortenLength(Vector A, float reductionLength) {
    Vector B = A;
    B.normalize();
    B *= reductionLength;
    return A - B;
}

有更有效的方法吗?可能会删除标准化B所需的平方根…

如果我理解正确的话,你有一个向量A,并且想要另一个指向与A相同方向但短于reductionLength的向量,对吧?

CCD_ 4接口是否具有类似于";长度";成员函数(返回向量的长度)?那么我认为以下应该更有效:

Vector shortenLength(Vector A, float reductionLength) 
{
    Vector B = A;
    B *= (1 - reductionLength/A.length());
    return B;
}

如果要通过将向量乘以标量值来缩放向量,则应而不是归一化。不是出于效率的原因;因为结果可能不是你想要的。

假设你有一个向量,看起来像这样:

v = (3, 4)

其震级为CCD_ 5。让我们将其标准化:

n = (0.6, 0.8)

该矢量的大小为1;它是一个单位向量。

那么,如果你把每一个都"缩短"0.5倍,你会得到什么?

shortened v = (3, 4) * 0.5 = (1.5, 2.0)

现在让我们用它的震级sqrt(6.25)来归一化它:

normalized(shortened v) = (1.5/2.5, 2/2.5) = (0.6, 0.8)

如果我们对单位向量做同样的事情:

shortened(normalized v) = (0.6, 0.8) * 0.5 = (0.3, 0.4)

这些根本不是一回事。你的方法做了两件事,它们是不可交换的。

相关内容

  • 没有找到相关文章

最新更新