Новости
О Центре
Кластер
Обучение
Основной курс по параллельному программированию
Учебные курсы
Магистратура
Дополнительное образование
Работы студентов
Библиотека
Исследования
Конференции
Полезные ссылки
NVIDIA
Контакты
О сайте
Имя:
Пароль:
запомнить:
Забыли пароль? Регистрация

Метод решения

Для решения задачи на понадобится ввести структуру body, которая будет иметь 3 координаты в пространстве и вектор скорости. Каждое тело, присутствующее в задаче описывается именно этими параметрами.

Изначально система покоится, количество и координаты тел считываются программой из файла. Также считывается время, при достижении которого происходит остановка алгоритма и вывод результатов.

Исходные данные:

  • Количество тел.
  • Координаты каждого тела в пространстве.
  • Время работы программы.

Результат:

  • Координаты каждого тела в пространстве.
  • Время работы программы.

Шаг 0:

Задаём начальный параметры задачи.

TIME - квант времени.

MASS - масса каждого тела.

G - гравитационная постоянная.

Получаем исходные данные задачи.

Шаг 1:

Для каждого тела вычисляется сила, действующая на него со стороны всех других тел по формуле, приведённой в постановке задачи.

Fx += G * system[i].weight * system[j].weight / pow(Length(system[i],system[j]),3) * (system[j].x - system[i].x);
Fy += G * system[i].weight * system[j].weight / pow(Length(system[i],system[j]),3) * (system[j].y - system[i].y);
Fz += G * system[i].weight * system[j].weight / pow(Length(system[i],system[j]),3) * (system[j].z - system[i].z);

Шаг 2:

Каждое тело сдвигается на некоторую величину, зависящую от скорости и прошедшего кванта времени.

// передвижение тела
void Motion(body &b,long double Fx,long double Fy,long double Fz){
	long double accelx, accely, accelz;
	accelx = Fx / b.weight;
	accely = Fy / b.weight;
	accelz = Fz / b.weight;
	b.x += b.vx * TIME + accelx * pow(TIME, 2)/2;
	b.y += b.vy * TIME + accely * pow(TIME, 2)/2;
	b.z += b.vz * TIME + accelz * pow(TIME, 2)/2;
	b.vx += accelx * TIME;
	b.vy += accely * TIME;
	b.vz += accelz * TIME;
};

Шаг 4:

Увеличиваем прошедшее время на некий заданный квант:

time += TIME;

Проверяем критерий остановки:

while(time <   T)

Если критерий выполняется, то останавливается и выдаём результаты, иначе на Шаг 1.

Новости

22.10.2012
04.09.2012
05.04.2012
06.03.2012
02.03.2012