在下面的代码中,对于小的θ值,theta x和y平滑变化,但是对于θ的大值,会发生突然变化,x和y在相当长的一段时间内不会发生变化,然后会突然改变。
float tantheta=height/base;
double theta=-Math.atan(tantheta);
x=(int) (53*Math.cos(theta)+x0);
y=(int) (53*Math.sin(theta)+y0);
答案 0 :(得分:2)
每当你有一些长度(高度和基数)并转换为一个角度(theta),然后回到一个长度,你正在做不必要的工作。
假装一分钟基础和高度为正,只是为了画一幅画。数学适用于任何基数和高度。
想象一个三角形,在原点有一个顶点,在(基部,高度)有另一个顶点。三角形的边是(0,0)到(基部,高度)和(0,0)到(基部,0)和(基部,0)到(基部,高度)。设hypot = sqrt(base * base + height * height)。请注意,theta是原点处三角形的角度。这意味着cos(theta)= base / hypot和sin(theta)= height / hypot。
因此,例如,x的公式变为x = x0 + 53 * base / hypot;
这些cos和sin的公式适用于任何基数和高度,正或负。
当基线或高度接近于零时,您几乎肯定会看到由于浮点错误而跳跃。如果你跳过计算θ,这些就会消失。
答案 1 :(得分:0)