我在一些与图形相关的代码中遇到了以下数学:
// get the angle between 2 points
double d = Math.atan2(x1 - x2, y1 - y2);
// wtf?
d = (8 * (d + PI + 0.25^2 * PI)) / PI;
任何有数学直觉的人都可以帮助解释这在“实际”术语中的作用吗?
答案 0 :(得分:1)
第一行符合它的说法。 d是从原点看到的两点之间的角度。
第二行取决于^
运算符的含义(未指定语言)。假设^意味着力量,我得到(希望我做得正确,请自己检查):
d = (8 * (d + PI + 0.25^2 * PI)) / PI;
d = (8 * (d + PI*17/16))/PI
d = (8*d + 8*PI*17/16)/PI
d = (8*d + PI*17/2)/PI
d = 8*d/PI + 17/2
我猜PI
通常是3.141...
},它看起来像是从辐射到其他形式的转换(其中16是一个整圆或360°)。然后增加17/2将转换为“向角度增加191,25°”(略高于相反方向)。
我不知道为什么有人会这样做,也不知道为什么他没有将表达式转换为简单形式(除非优化器做得非常好,否则btw应该更快地评估)。