假设我有一个任意向量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)
这些根本不是一回事。你的方法做了两件事,它们是不可交换的。