Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- public class Comparing {
- private static double g = 9.81;
- private static double h = 0.01;
- private static double c = 0.15;
- private static double air_denisty = 1.29;
- public static void main(String[] args) {
- double initial_speed = 60;
- double angle = 50;
- System.out.println(Galileo(angle, initial_speed));
- System.out.println(Newton(angle, initial_speed, 0.1, 11340, true));
- }
- public static double Galileo(double angle, double initial_speed) {
- double radians = Math.toRadians(angle);
- double t = 0;
- double x = 0;
- double y = 0;
- while (y >= 0) {
- t += h;
- x = initial_speed * Math.cos(radians) * t;
- y = initial_speed * Math.sin(radians) * t - g * t * t / 2 ;
- System.out.printf("%.2f; %.10f;%n", x, y);
- }
- return 2 * Math.tan(radians) * initial_speed * initial_speed * Math.cos(radians) * Math.cos(radians) / g;
- }
- public static double Newton(double angle, double initial_speed, double radius, double density, boolean resistance) {
- ArrayList<Double> k1 = new ArrayList<>();
- ArrayList<Double> k2 = new ArrayList<>();
- ArrayList<Double> k3 = new ArrayList<>();
- ArrayList<Double> k4 = new ArrayList<>();
- double beta;
- if (resistance) {
- beta = c * air_denisty * Math.PI * radius * radius / 2;
- } else beta = 0;
- double radians = Math.toRadians(angle);
- double weight = 4 * Math.PI * radius * radius * radius * density / 3;
- double initial_u = initial_speed * Math.cos(radians); // скорость по x
- double initial_w = initial_speed * Math.sin(radians); // скорость по у
- double x = 0;
- double y = 0;
- double x1 = 0;
- double y1 = 0;
- while (y >= 0) {
- k1.add(func_x(weight, beta, initial_u, initial_w));
- k1.add(func_y(weight, beta, initial_u, initial_w));
- k2.add(func_x(weight, beta, initial_u + k1.get(0) / 2, initial_w + k1.get(1) / 2));
- k2.add(func_y(weight, beta, initial_u + k1.get(0) / 2, initial_w + k1.get(1) / 2));
- k3.add(func_x(weight, beta, initial_u + k2.get(0) / 2, initial_w + k2.get(1) / 2));
- k3.add(func_y(weight, beta, initial_u + k2.get(0) / 2, initial_w + k2.get(1) / 2));
- k4.add(func_x(weight, beta, initial_u + k3.get(0) , initial_w + k3.get(1) ));
- k4.add(func_y(weight, beta, initial_u + k3.get(0) , initial_w + k3.get(1) ));
- initial_u += (k1.get(0) + 2 * k2.get(0) + 2 * k3.get(0) + k4.get(0)) / 6;
- initial_w += (k1.get(1) + 2 * k2.get(1) + 2 * k3.get(1) + k4.get(1)) / 6;
- x1 = x;
- y1 = y;
- x += initial_u * h;
- y += initial_w * h;
- //System.out.printf("%.2f; %.2f;%n", x, y);
- }
- interpolation(y1, y, x1, x);
- return x;
- }
- public static double func_x(double weight, double beta, double initial_u, double initial_w) {
- return h * ((-beta) * initial_u * Math.sqrt(initial_u * initial_u + initial_w * initial_w) / weight);
- }
- public static double func_y(double weight, double beta, double initial_u, double initial_w) {
- return h * ((-beta * initial_w * Math.sqrt(initial_u * initial_u + initial_w * initial_w) / weight) - g);
- }
- private static double interpolation(double y1, double y2, double x1, double x2) {
- return y1 + (y2 - y1)/(x2 - x1) * (0.0 - x1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement