Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
67
Добавлен:
18.12.2017
Размер:
4.06 Кб
Скачать
package Lab7;

import java.awt.*;
import java.util.ArrayList;

class BodyFlight {
double g = 9.8;
double gamma = 0.005;
int n = 1000, H = 400;
double t;
private Body body;
public ArrayList<CoorValue> val = new ArrayList<CoorValue>();

private void calculate() {
double x, y, dx, dy, Vx, Vy, dVx, dVy, dt;
int i; //
Force F = new Force();
x = body.x;
y = body.y;
Vx = body.Vx;
Vy = body.Vy;
dt = t / (double)n;
for (i = 1; i <= n; i++) {
dx = Vx * dt;
dy = Vy * dt;
dVx = F.x(body) * dt / body.m;
dVy = F.y(body) * dt / body.m;
x += dx;
y += dy;
Vx += dVx;
Vy += dVy;
body.set(x, y, Vx, Vy);

}
}

BodyFlight(double[] params) { //параметры: 0 - масса, 1 - x, 2 - y, 3 - скорость, 4 - угол
double m = 100 / 1000.0;
double x = params[1];
double y = params[2];
double alpha = Math.toRadians(params[4]);
double Vx = params[3] * Math.cos(alpha);
double Vy = params[3] * Math.sin(alpha);
body = new Body(m, x, y, Vx, Vy);
double i = 0;
do {

this.t = i;
calculate();
// body.show();
val.add(new CoorValue((int) this.t, (int) body.x, (int) body.y));
//body.liteShow();
i = +0.01;

} while (body.y >= 0);
}

class Body {
double m;
double x;
double y;
double Vx;
double Vy;

double V() {
return Math.sqrt(Vx * Vx + Vy * Vy);
} // Метод для вычисления угла к горизонту:

double phi() {
return Math.atan2(Vy, Vx);
} // Конструктор внутреннего класса:

Body(double m, double x, double y, double Vx, double Vy) {
this.m = m;
set(x, y, Vx, Vy);
}
// Метод для присваивания значений полям (координаты и компоненты скорости):

void set(double x, double y, double Vx, double Vy) {
this.x = x;
this.y = y;
this.Vx = Vx;
this.Vy = Vy;
}

// Метод для отображения параметров объекта:
void show() {
double alpha = Math.round(Math.toDegrees(phi()) * 100) / 100.0;
System.out.println("В момент времени t=" + t + " секунд положение тела следующее.");
System.out.println("Высота: " + Math.round(y * 100) / 100.0 + " метров над горизонтом.");
System.out.println("Расстояние от точки броска: " + Math.round(x * 100) / 100.0 + " метров.");
System.out.println("Скорость: " + Math.round(V() * 100) / 100.0 + " метров в секунду.");
System.out.println("Угол к горизонту: " + alpha + " градусов.");
}

void liteShow() {
double alpha = Math.round(Math.toDegrees(phi()) * 100) / 100.0;
System.out.print("t =" + Math.round(t * 100) / 100.0 + " \t");
System.out.print("h = " + Math.round(y * 100) / 100.0 + "\t");
System.out.print("x = " + Math.round(x * 100) / 100.0 + "\t");
System.out.print("v = " + Math.round(V() * 100) / 100.0 + "\t");
System.out.println("A = " + alpha + " градусов.");

}
}

// Внутренний класс для "силы":

class Force { // Проекция на горизонтальную ось:
double x(Body obj) {
return -gamma * obj.Vx;
} // Проекция на вертикальную ось:

double y(Body obj) {
return -g * obj.m - gamma * obj.Vy;
}
}
}
Соседние файлы в папке Lab7