Симуляция Вселенной

 
RU Олег Лазутченко #03.01.2002 22:09
+
-
edit
 

Олег Лазутченко

втянувшийся

А для чего именно нужны математики и физики?
О.Л.
 

Igor

втянувшийся
МиГ>Такой движок подходил бы и для реалистичных симуляций движения сложных аппаратов

Задача n тел в общем виде не решена, известны решения задачи трех тел для некоторых частных случаев. Так что с реалистичностью без Cray`я в общем случае возможны проблемы :smile: . Могу, разумеется, ошибаться: никогда такими задачами не занимался :smile: .

МиГ>для тупых 3D стрелялок типа Unreal Tournament & Quake

Во-первых, Half-Life - rulez foreva :smile: . Во-вторых, при чем здесь стрелялки?

МиГ>нужны математики & физики

Нет. Нужны механики. Т.е. я :biggrin: . Хотя специальность свою я уже основательно забросил, но попробовать поставить задачу не отказался бы...
 
+
-
edit
 

GrayCat

координатор

МиГ>Вот позанимался тут с "Orbiter"-ом...
МиГ>Кому подходит идея создания "вселенского движка" - симулятора Космоса на Нютоновском уровне? Такой движок подходил бы и для реалистичных симуляций движения сложных аппаратов, и для тупых 3D стрелялок типа Unreal Tournament & Quake.


Зачем это все? Окбиты КА давно уже рассчитываются с приемлемой точностью. "Космические" "стрелялки" реалистичностью и не пахнут, хотя бы по причине наличия постоянной гравитации под задницей игрока.

А вот для DOOMоподобных игрушек, гораздо важнее сейчас реалистичное изображение движения "нетвердых" объектов. Посмотрите, например, "венец компьютерной графики" "Final Fantazy". Пока картинка статичная, вроде все ничего. Но как только люди начинают двигаться - тут же лезет в глаза "мультяшность".

Так что вот на это сейчас направлены лучшие умы рендеринга :smile:
Gray ©at [Семейство кошачих]  
+
-
edit
 

МиГ
Реконструктор

опытный

Для теоретической части :smile:
 
BG Реконструктор #04.01.2002 09:02
+
-
edit
 
Вот позанимался тут с "Orbiter"-ом...
Кому подходит идея создания "вселенского движка" - симулятора Космоса на Нютоновском уровне? Такой движок подходил бы и для реалистичных симуляций движения сложных аппаратов, и для тупых 3D стрелялок типа Unreal Tournament & Quake.

Программистов мне не надо, нужны математики & физики.
ИМХО, дело это ради чести и удовольствия, но можно подумать и о комерции :wink:
 
+
-
edit
 

МиГ
Реконструктор

опытный

Вижу некоторое непонимание идеи, так что выкладываю мои основные мысли.
Представим себе пространство, где нет ничего. Потом представим себе Центр. Центр координатной системы, разумеется :smile: Все вычисления производятся относительно этого центра. Кто знаком с OpenGL - там имеется подобная абстракция. Следущий шаг - представим себе Точку. Точка имеет единственную харектеристику - масса. Точка может так же получать Импульс кинетичесской энергии. Импульс имеет 2 характеристики - сила и направление. Точка приводится в движение Импульсом или Гравитацией других точек. Я не знаю как там, но по моему, Гравитацию можно рассматривать как импульс, сила которого увеличивается обратнопропорционально расстоянию. Когда несколько точек находятся в достаточной близости меж собой, то они превращаются в одну точку с массой равной сумме масс всех точек. Вселенная эта имеет одну особенность - в различных ее частях законы могут быть различными :smile: И так, верхняя модель, думаю, имеет достаточно простую реализацию и симуляция будет работать хорошо (по крайней мере 24 кадров/сек. :smile: ) даже когда речь идет о миллионе Точек. В "Orbiter" имеется подобная симуляция (по моему). Но только этого не достаточно.

Продолжаем. Около точки строим Объект. Объект имеет форму и ориентацию в пространстве. Точка является центром гравитации Объекта, не обезательно чтоб она совпадала с геометрическим центром. Отсюда следуют большие усложнения системы. Например, в зависимости от места на Объекте (так как он имеет форму), где действует импульс, Объект, кроме положения, меняет и ориентацию.
Потом следует еще одно большое усложнение. Это, так называемый создателями игр "collision detection" т.е. "тест на столкновение". Нужны алгоритмы для определения когда один Объект столкнулся с другим. В "Orbiter" такого нет, и космическиий корабль может спокойно пролетать сквозь орбитальную станцию. :smile: В этой связи хочу сказать, что я был не прав, говоря, что не нужны программисты. Они могут быть очень полезными. :smile: Могут быть полезными и механики и вообще, каждый, кто считает, что может помочь чем-нибудь.

Я упомянул игры как коммерчесскую реализацию движка.
Представим себе плоскость (плоский мир). Центр гравитации этой плоскости находится далеко под ней и плоскость имеет массу Земли. Тогда все предметы, которые находятся вверху будут падать на нее почти под правым углом. Ну, на этой плоскости строим лабиринты, запускаем монстров и игра готова :smile: У меня кстати, есть кое-какие связи с дизайнерскими бюро в западной Европе, так что у движка есть какие-то шансы на рыночную реализацию.

Советую тех, кто интересуется проектом, писать мне на мыло, так как у каждого могут быть хорошие идеи, а хорошие вещи стоят деньги, нечего всем их давать.
 

Igor

втянувшийся
МиГ>Точка может так же получать Импульс кинетичесской энергии.
МиГ>Импульс имеет 2 характеристики - сила и направление.
МиГ>Точка приводится в движение Импульсом или Гравитацией других точек.
МиГ>Я не знаю как там, но по моему, Гравитацию можно рассматривать как импульс, сила которого увеличивается обратнопропорционально расстоянию.

Сам-то понял, что запостил? :biggrin: Возьми любой учебник теоретической механики для ВУЗов, прочти хотя бы наискосок...

Импульс силы характеризует передачу материальной точке механического движения со стороны действующих на нее тел за данный промежуток времени. Если постоянная по модулю и направлению сила P действует в течение промежутка времени t, то ее импульсом за этот промежуток времени является вектор S = Pt

Гравитационная сила прямо пропорциональна произведению масс тел и обратно пропорциональна квадрату расстояния между ними: F = G(m_1*m_2)/R2. Коэффициент пропорциональности G называют гравитационной постоянной.

МиГ>Когда несколько точек находятся в достаточной близости меж собой, то они превращаются в одну точку с массой равной сумме масс всех точек.

Отголосок разумной мысли :wink: . Совокупность материальных точек, достаточно удаленную от данной точки, можно рассматривать как материальную точку, масса которой... и т.д.

МиГ>Отсюда следуют большие усложнения системы.

Отсюда следует архитектура типа "документ/представление". И никакого усложнения здесь нет. :tongue: МиГ>В "Orbiter" такого нет, и космическиий корабль может спокойно пролетать сквозь орбитальную станцию. :smile::biggrin: Гы-гы-гы :biggrin: Похожий глюк имеется у замечательного движка Half-Life: на некоторых картах (multiplayer) в некоторых местах игроки видны сквозь стены. Очень удобно :biggrin: .

Видимо, это серьезная проблема :rolleyes: МиГ>Советую тех, кто интересуется проектом, писать мне на мыло

Я пока что не сказал ничего оригинального: нужно время, чтобы все обдумать. Обдумаю - напишу :smile: .



На счет Orbiter`а: дай, пожалуйста, ссылку.
 
+
-
edit
 

odissey

втянувшийся

Симулятор Вселенной существует и называется RedShift.
Подробности по ссылке
web page

 
+
-
edit
 

odissey

втянувшийся

Вдогонку: Скрестить Orbiter c RedShift было бы забавно

 

Igor

втянувшийся
МиГ>Структура должна иметь какой-то подобный вид

Ты торопишься и пытаешься совершить ту же ошибку, что и мои начальники: "сначала сделать что-то, а там посмотрим". :( Все-таки сначала стоило бы поставить задачу, чтобы не переписывать всю программу несколько раз (плавали, знаем © :eek::mad: ). Как раз постановкой задачи я и занимался в эти выходные. Модель еще очень сырая, остается много вопросов, но, пожалуй, стоит уже отчитаться ;) . Пишу сейчас письмо, надеюсь отослать его сегодня вечером.
 
+
-
edit
 

МиГ
Реконструктор

опытный

Igor>Сам-то понял, что запостил?

Может, не выразился правильно.
Структура должна иметь какой-то подобный вид:

class IVelocityProvider
{
virtual float CalculateVelocity(float fMass) = 0;
};

class KineticImpulse : IVelocityProvider
{
float CalculateVelocity(float fMass)
{
// fMass может быть лишнем, не знаю
.....
}
};

class GravityForce : IVelocityProvider
{
float CalculateVelocity(float fMass)
{
// fMass здесь точно не лишний
.....
}
};


class MaterialPoint
{
float m_fMass;
float m_fVelocity;

void SetVelocity(IVelocityProvider *pVP)
{
m_fVelocity = pVP->CalculateVelocity(m_fMass);
}
}
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
По поводу задачи трёх тел и вычислительной мощности.
Численно решая задачу дифференциальными методами, на Б3-34/МК-61 (~2..4 FLOPS) перелёт космического корабля с Луны на Землю моделировался в интерактивном режиме (задавать коррекцию курса и т.п.) эдак за час примерно :) Т.е. налицо превышение по скорости реальных процессов порядка на два :)
 

Igor

втянувшийся
Народ! Дайте ссылку на "Orbiter", пожалуйста :) !
МиГ, смотри мыльницу: nanevmail.ru
 
BG Реконструктор #12.01.2002 09:05
+
-
edit
 
Бывший форум "Закрытый" имеет новую функцию - сейчас он форум по создании Вселенского движка. Желающие принять участие, обращайтесь ко мне или к Igor-ю.

Igor, ссылку Orbiter-a поищи в игровом форуме :)
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru