2012-04-03 158 views
0

在下面的代码段,θ-x和y的值的突然变化是平滑变化为theta的小的值,但对于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); 
+1

'height'和'base'的类型是什么? – Attila 2012-04-03 12:42:34

+0

评估复杂的数学表达式时,较大的数字通常需要更多时间来处理。 * x和y在一段时间内不会改变...... *您在看多少时间? – fireshadow52 2012-04-03 13:06:18

+0

高度和底数是整型数据类型,时间意味着当θ很小时它们会以小增量变化,但随着θ变大,增量变大。 – 2012-04-03 14:35:35

回答

0

大卫,你的想法是对的,但我needeed的θ为我想,因为我改变高度和底座上阿提拉的评论翻一番,用它来模拟抛运动,我的问题就解决了。

2
每当

你有一些长度(高度和底座)和转换为角度(THETA),然后再返回到一个长度,你正在做的不必要的工作。

假装为基础和高度积极的只是画一幅画一分钟。数学适用于任何基础和高度。

想象与在原点一个顶点并且在(碱,高度)的另一个顶点的三角形。三角形的边是(0,0)到(基础,高度)和(0,0)到(基础,0)和(基础,0)到(基础,高度)。让hypot = sqrt(base * base + height * height)。请注意theta是原点处三角形的角度。这意味着cos(theta)= base/hypot和sin(theta)=高度/下压。

因此,例如,你的对于x式变为x = X0 + 53 *碱/ hypot将;

cos和sin的这些公式适用于任何基准和高度,正数或负数。

你几乎可以肯定看到,因为浮点错误的跳跃时,基地或高度接近零。如果你跳过计算theta,这些将会消失。