旋转功能奇怪的行为
Rotation function weird behaviour
我一直在研究旋转功能。这些点在每个循环中都会轻微移动到旋转中心。需要一个函数来获取中心点到旋转点的距离:
struct Vector3F
{
float x, y, z;
};
inline float GetDistance3FX_inline(Vector3F* v1, Vector3F* v2)
{
return v1->x - v2->x;
}
inline float GetDistance3FZ_inline(Vector3F* v1, Vector3F* v2)
{
return v1->z - v2->z;
}
确实起作用的实际旋转函数:
void Rotate3FY(Vector3F* point, Vector3F* center, float rad)
{
float x = GetDistance3FX_inline(point, center);
float z = GetDistance3FZ_inline(point, center);
point->x = x * cos(rad) - z * sin(rad) + center->x;
point->z = z * cos(rad) + x * sin(rad) + center->z;
}
不的功能:
void Rotate3FY(Vector3F* point, Vector3F* center, float rad)
{
point->x = GetDistance3FX_inline(point, center) * cos(rad) - GetDistance3FZ_inline(point, center) * sin(rad) + center->x;
point->z = GetDistance3FZ_inline(point, center) * cos(rad) + GetDistance3FX_inline(point, center) * sin(rad) + center->z;
}
我不知道这两者之间有什么逻辑上的区别。
感谢您的任何建议。
在更新 point->x
时的第二个函数中,您正在更改 point
的属性。因此,当您稍后在设置 point->z
时再次调用相同的函数时, point->x
的值已经改变。
void Rotate3FY(Vector3F* point, Vector3F* center, float rad)
{
point->x = GetDistance3FX_inline(point, center) * cos(rad) - GetDistance3FZ_inline(point, center) * sin(rad) + center->x;
// point is now different to what it was at the start because you just
// changed is x member!!!!!!!
point->z = GetDistance3FZ_inline(point, center) * cos(rad) + GetDistance3FX_inline(point, center) * sin(rad) + center->z;
}
在第一个函数中,您将所需的值存储在单独的变量中 before 修改 point
.
我一直在研究旋转功能。这些点在每个循环中都会轻微移动到旋转中心。需要一个函数来获取中心点到旋转点的距离:
struct Vector3F
{
float x, y, z;
};
inline float GetDistance3FX_inline(Vector3F* v1, Vector3F* v2)
{
return v1->x - v2->x;
}
inline float GetDistance3FZ_inline(Vector3F* v1, Vector3F* v2)
{
return v1->z - v2->z;
}
确实起作用的实际旋转函数:
void Rotate3FY(Vector3F* point, Vector3F* center, float rad)
{
float x = GetDistance3FX_inline(point, center);
float z = GetDistance3FZ_inline(point, center);
point->x = x * cos(rad) - z * sin(rad) + center->x;
point->z = z * cos(rad) + x * sin(rad) + center->z;
}
不的功能:
void Rotate3FY(Vector3F* point, Vector3F* center, float rad)
{
point->x = GetDistance3FX_inline(point, center) * cos(rad) - GetDistance3FZ_inline(point, center) * sin(rad) + center->x;
point->z = GetDistance3FZ_inline(point, center) * cos(rad) + GetDistance3FX_inline(point, center) * sin(rad) + center->z;
}
我不知道这两者之间有什么逻辑上的区别。 感谢您的任何建议。
在更新 point->x
时的第二个函数中,您正在更改 point
的属性。因此,当您稍后在设置 point->z
时再次调用相同的函数时, point->x
的值已经改变。
void Rotate3FY(Vector3F* point, Vector3F* center, float rad)
{
point->x = GetDistance3FX_inline(point, center) * cos(rad) - GetDistance3FZ_inline(point, center) * sin(rad) + center->x;
// point is now different to what it was at the start because you just
// changed is x member!!!!!!!
point->z = GetDistance3FZ_inline(point, center) * cos(rad) + GetDistance3FX_inline(point, center) * sin(rad) + center->z;
}
在第一个函数中,您将所需的值存储在单独的变量中 before 修改 point
.