我有 3 个向量,用于存储笛卡尔坐标系中沿 x、y 和 z 轴的坐标、速度和加速度。
我正在检查这些值中的任何一个是否接近 0(零),如果接近 0,我手动将它们设为零。
他们是实现这一目标的有效(更快)方法吗?
硬件加速:AVX2
代码
Eigen::Vector3f coordinates;
Eigen::Vector3f velocity;
Eigen::Vector3f acceleration;
//Some operations on coordinates, velocity and acceleration
if( (coordinates(0) < 0.0001f) && (coordinates(0) > -0.0001f))
{
coordinates(0) = 0.0f;
}
if ((coordinates(1) < 0.0001f) && (coordinates(1) > -0.0001f))
{
coordinates(1) = 0.0f;
}
if ((coordinates(2) < 0.0001f) && (coordinates(2) > -0.0001f))
{
coordinates(2) = 0.0f;
}
if ((velocity(0) < 0.0001f) && (velocity(0) > -0.0001f))
{
velocity(0) = 0.0f;
}
if ((velocity(1) < 0.0001f) && (velocity(1) > -0.0001f))
{
velocity(1) = 0.0f;
}
if ((velocity(2) < 0.0001f) && (velocity(2) > -0.0001f))
{
velocity(2) = 0.0f;
}
if ((acceleration(0) < 0.0001f) && (acceleration(0) > -0.0001f))
{
acceleration(0) = 0.0f;
}
if ((acceleration(1) < 0.0001f) && (acceleration(1) > -0.0001f))
{
acceleration(1) = 0.0f;
}
if ((acceleration(2) < 0.0001f) && (acceleration(2) > -0.0001f))
{
acceleration(2) = 0.0f;
}
无需详细了解 Eigen,您的代码可以减少很多:
Vector3f
1
到 3
fabs
表示绝对值void normalize_zero(Eigen::Vector3f& v) {
for (size_t i=1;i<4;++i) {
if( (std::fabs(v(i)) < 0.0001f) v(i) = 0.0f;
}
}
我希望
Vector3f
与基于范围的 for 循环兼容,但我不确定。如果是,你应该使用它们。