2016-09-26 21 views
1

所以我要在這些步驟中做這些方程如何循環和存儲值從物理方程

  1. Q1 * Q3 * K /(R^2)= F1_3(這是電場力1和3之間)

  2. Q2 * Q3 * K/R^2)= F1_2(粒子1和之間力2)

  3. 從那裏我可以找到兩個電荷與f1_3之間的淨力+ f1_2 = fnet

  4. 隨着淨力我會找到加速度使用a = fnet/m(其中m是質量。 (現在我上面的所有事情都可以做,但現在繼承人讓我感到困惑)

  5. 取剛剛找到的加速度並找到速度。 v = - (at)是時間間隔(我得到那個方程式,它從步驟6中的方程推導出來,初始方程是x(.05)= at + v

  6. 取得那個速度和前一個加速度並找到新位置:x = 1/2at^2 + v * t + x

  7. x的值成爲粒子3的新位置,現在我回到頂部以便計算電力,然後加速等沖洗和重複。

這些步驟是我想重複過什麼,現在結束了我間隔我想它是1微秒或10e-6,從0.0-1.0微秒0.0-2.0微秒,我希望它在每個時間間隔存儲位置。事情是它將不得不重新使用我在前幾個步驟中列出的公式重新計算力的值,然後返回找到位置。我不知道是否應該使用「for」來循環它,但我不知道如何真正去做。當我完成代碼後,我希望能夠輸入電荷的位置及其大小,然後它將使用方程式,但一次只能執行一步。

是我試圖做不到的?

import java.util.Scanner; 
import javax.swing.JFrame; 
public class Firstgui { 

private static Scanner in = new Scanner(System.in); 

public static void main(String[] args) { 
    //declare variables 
    double postionq1= 0.0; // position of q1 is at origin i just put it here for reference 
    double distanceq3_q1=.01; //q3 is placed between q1 and q2 
    double distanceq3_q2= .014-distanceq3_q1; //distance from q3 to q2 
    double q1=5e-6; 
    double q2=-4e-6; 
    double q3=-2e-6; 
    double mq1=3e-5; 
    double k= 8.99e9; 
    double F1_3 = Force(q1, q3, k, distanceq3_q1); 
    double F2_3= -Force(q2, q3, k, distanceq3_q2); 
    double Fnet=F1_3+F2_3; 
    System.out.println(F1_3); 
    System.out.println(F2_3); 
    System.out.println(Fnet); 
    System.out.println("particle 3 position from 0.0-1micro-seconds is " + position(acceleration(Fnet,mq1), 0.000001 , velocity(0.000001 , acceleration(Fnet,mq1)),.01)); 
    // this print line above is the final the position of q3 a 1 microsecond 
    //now with that value that it prints how would i use that for the next 
    //position of q3 and recalculate the fnet then acceleration etc. 
} 
public static double Force(double q1, double q2, double k, double r) { 
    double electricforce=(q1*q2*k)/(Math.pow(r, 2)); 
    return electricforce; 
} 
public static double acceleration(double f, double m) { 
     double acell=f/m; 
     return acell; 
} 
public static double position(double a, double t, double v, double x) { 
    double postion=.5*a*(t*t)+(v*t)+x; // a- acceleration through out out this time interval is constant 
    return postion; 
} 
public static double velocity(double t, double a) { 
    double v=-(t*a); // a- acceleration through out out this time interval is constant 
    return v; 
}   
} 
+3

它看起來可能對我來說。謹慎詳細說明你卡在哪裏? –

回答

1

是的,這是物理模擬的常見現象。通常你會定義如何制定一個時間步驟,然後循環整個過程。對於涉及粒子的模擬,通常需要存儲位置和速度來計算運動。

public static void main(String[] args) { 
    int nbrSteps = 1000; 
    // Store the data 
    PointArray points = // The data would look like this. Particle at index 0 corresponds with the data {x0, y0, z0} 
          0: {x0, y0, z0}, 
          1: {x1, y1, z1}, 
          ... 
    VelocityArray velocities = // And here, very similarly 
            0: {vx0, vy0, vz0}, 
            1: {vx1, vy1, vz1}, 
            ...      
    for (int i = 0; i < nbrSteps; i++) { 
     takeStep(points, velocities); 
     // You probably want to record the simulation somehow. Either you save your 
     // data to disk, or you render it on the screen. Both calls could be put here. 
    } 
} 

public static void takeStep(PointArray points, VelocityArray velocities) { 
    for (int i = 0; i < points.length(); i++) { 
     const double timestep = 1e-6; 
     // Here you implement the steps you described, and update position and velocity accordingly 
     velocities[i] = ... 
     points[i] = ... 
    } 
} 

編輯:作爲一個例子,我們可以模擬重力。我們可以通過這個

public static void takeStep(PointArray points, VelocityArray velocities) { 
    for (int i = 0; i < points.length(); i++) { 
     const double timestep = 1e-6; 
     // Doing something simple, lets simulate gravity 
     const double gravity = -9.82; 
     velocities[i].y += f_gravity*timestep; 
     points[i] = velocity[i]*timestep; 
    } 
} 

改變takeStep對於你的情況,你需要計算力爲每個粒子(即我們並不需要爲重心的價值是已知的),然後同樣適用它如何我是通過線性集成完成的。這意味着,

velocity = force*change_in_time 
position = velocity*change_in_time 

注意這裏forcevelocitypositionvectors

+0

我以前從未真正使用過數組,所以我不確定你的意思是什麼?我會在哪裏實施我曾經想過的步驟,並根據我的理解你的說法,我將不得不手動更新位置和速度? – Cosmik11

+0

我真的不明白你想用這個代碼做什麼,或者我錯過了什麼? – Cosmik11

+0

可能的例子? – Cosmik11