【发布时间】:2023-03-19 08:50:01
【问题描述】:
假设我正在编写 rotate() 库的 rotate() 方法的实现。
vector2D rotate(const vector2D vector, const vector2D origin, float radians)
{
// Implementation details
return {x, y};
}
我可以将三角函数调用的结果存储在变量中,因此我不必多次调用它们:
float sr = sin(radians);
float cr = cos(radians);
float x = origin.x + (
(vector.x - origin.x) * cr - (vector.y - origin.y) * sr
);
float y = origin.y + (
(vector.x - origin.x) * sr + (vector.y - origin.y) * cr
);
或者我可以简单地写下我的意思
float x = origin.x + (
(vector.x - origin.x) * cos(radians) - (vector.y - origin.y) * sin(radians)
);
float y = origin.y + (
(vector.x - origin.x) * sin(radians) + (vector.y - origin.y) * cos(radians)
);
- 每种情况的优缺点是什么?
- 编译器是否优化了第二个示例中的开销?或者即使在
vector2D库的情况下,多次调用 trig 函数的开销也微不足道?
【问题讨论】:
标签: c++ compilation trigonometry compiler-optimization c++-standard-library