x和y值的突然变化

时间:2012-04-03 12:38:20

标签: java geometry

在下面的代码中,对于小的θ值,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);

2 个答案:

答案 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)

大卫,你的想法是正确的,但我需要theta,因为我想用它来模拟射弹运动,我的问题解决了,因为我改变了高度和基数加倍attila的评论。