我正在尝试在 C++ 中实现以下目标:
class MyVector; // 3 component vector class
MyVector const kA = /* ... */;
MyVector const kB = /* ... */;
MyVector const kC = /* ... */;
MyVector const kD = /* ... */;
// I'd like to shorten the remaining lines, ideally making it readable but less code/operations.
MyVector result = kA;
MyVector const kCMinusD = kC - kD;
if(kCMinusD.X <= 0)
{
result.X = kB.X;
}
if(kCMinusD.Y <= 0)
{
result.Y = kB.Y;
}
if(kCMinusD.Z <= 0)
{
result.Z = kB.Z;
}
将代码解释为英文,我有四个“已知”向量。其中两个向量具有我在结果中可能需要也可能不想要的值,我是否需要它们取决于基于其他两个向量分量的分支。
我觉得我应该能够通过一些矩阵数学和掩码来简化这段代码,但我无法理解它。
现在我将使用分支,但我很想知道是否有更好的方法仍然可以理解,并且代码更少。
编辑:
关于马克的评论,我将解释我在这里尝试做的事情。
这段代码是我正在研究的一些弹簧物理学的摘录。组件如下:
kC 为当前弹簧长度,kD 为最小弹簧长度。
kA 和kB 是两组弹簧张力,其中的每个分量对于每个分量可以是唯一的(即,沿X、Y或Z的不同弹簧张力)。kA 是弹簧未完全压缩时的张力,kB 是弹簧完全压缩时的张力。
我想建立一个结果“向量”,它只是 kC 和 kD 的合并,取决于弹簧是否被压缩。