对,用BigDeciaml BigDecimal step = new BigDecimal("0.05"); BigDecimal t = new BigDecimal("0"); System.out.println(step.doubleValue()); for ( int i = 0; i <= 100000; i++){ t = t.add(step); //if ( i % 10000 == 0) System.out.println(i + ": " + t.doubleValue()); }
BigDecimal step = new BigDecimal("0.05");
BigDecimal t = new BigDecimal("0");
System.out.println(step.doubleValue());
for ( int i = 0; i <= 100000; i++){
t = t.add(step);
//if ( i % 10000 == 0)
System.out.println(i + ": " + t.doubleValue());
}
try {
Thread me = Thread.currentThread();
while((runner == me) && demo) {
analyseValue();
computeCurve();
pRight.repaint(); // 绘制曲线
repaint(); // 绘制弹簧系统
runner.sleep(100);
}
runner = null;
}
catch(InterruptedException ex) {
System.out.println("中断");
}
}private void computeCurve() {
double tmp = 6;
total += step;
if(total >= tmp) {
pRight.setXEnd(tmp);
..........
overRangeX = true;// 超出屏幕,x轴从0-6,超出后total还在增加,只是还是重绘0-6的曲线
......... // 当坐标移动时,调用新的total
}
else {
pRight.setXEnd(total); // 设置曲线的动点,每次重绘都重0-total
............. //
}
...............
}
其实代码是很简单的,就是把total送出,绘制正弦曲线,当时间长了线程暂停时(用按钮控制线程暂停),现出小球的位置,和算出了的曲线有偏差。h=Asin(ω * total + φ)。就象手表,走的时间长了就能看出和标准时间的偏差了。