根据用户输入计算运动方程(更短的方式?)

时间:2014-05-14 02:03:36

标签: java algorithm physics kinematics

我正在编写一个程序来计算物理学中简单运动方程的剩余变量。我需要有4/6个变量,然后我可以计算其他两个变量的结果。就目前而言,我正在使用一个boolean类型的数组来检测输入了哪个变量,我必须比较每个案例并重新编写三个公式中的一个来解决该变量。这最终导致了大量繁琐的代码。

以下是我的代码中的一个方程式的示例:



    if(variableEntered[1] == false && variableEntered[3] == false) {
        // calculate final velocity
       double fvNumber = getInitialVelocity() + (getAcceleration() * (getFinalTime() - getInitialTime())); 
       setFinalVelocity(fvNumber);
       // calculate final position
       double fpNumber = (getInitialPosition() + (getInitialVelocity() * (getFinalTime() - getInitialTime())) + 
           ((0.5 * getAcceleration()) * ((getFinalTime() - getInitialTime()) * (getFinalTime() - getInitialTime()))));
       setFinalPosition(fpNumber);
       System.out.printf("The final velocity is: %.2f m/s.", getFinalVelocity());
       System.out.println();
       System.out.printf("The final position is: %.2f meters.", getFinalPosition());
       System.out.println(); 
       }

 

我使用的三个方程是: Vf = Vi + a(tf - ti) Xf = Xi + Vi(tf - ti) + (1/2)a(tf - ti)2 Vf2 - Vi2 = 2a(Xf - Xi)

有没有办法缩短或简化实施?使用数组列表会以某种方式工作吗?

2 个答案:

答案 0 :(得分:0)

  1. 使用BigDecimal避免精确丢失和错误答案。
  2. 您可以将每个公式分解为自己的方法,并逐步完成每个部分。括号越多,读取的难度就越大。 例如 deltaT = tf-ti; vf = vi + a * deltaT;

  3. 如果您使用BigDecimal或Strings或Wrapper Types(如Double),则可以检查null而不是保留布尔数组。

答案 1 :(得分:-1)

您可以将其视为6个变量中的3个等式。在每个步骤中计算完整的梯度/导数,并使用自由变量的偏导数来执行朝向一致状态的牛顿步骤。