Симуляция движения скоплений масс в галактиках спирального типа (S)

Автор работы: Пользователь скрыл имя, 22 Мая 2013 в 20:33, дипломная работа

Краткое описание

Целью данной выпускной работой является создание программы, симулирующей астрофизические процессы . Целевой аудиторией данной программы являются школьники старших классов и студенты младших курсов. Разработка велась с использованием технологии Javascript.

Прикрепленные файлы: 1 файл

Shkola_Informatiki_i_Vychislitelnoy_Tekhniki (1).docx

— 48.75 Кб (Скачать документ)

Также, для увеличения скорости распространения программы представляется логичным разработать и разместить её на одном из интернет- ресурсов посвя0щённых фзикке и использующих javascipt.Самым популярным из таких является www,khanacademy.org    .

 

 

Репрезентация физических понятий  и их отношений в  javascript.

 

Прежде всего следует договориться об принимаемых в расчёт физических понятиях и их  отношениях, выраженных в формулах.

 

Прежде всего, стоит ввести переменные, отбражающие к-во частиц(тел) в системе, их массу  и область задания их функции по пространству.

var numParticles = 300;

var initialMassRange = [2, 12];

var initialMaxDistance = 600;

 

Так  или иначе, простврантво, масса и другие физ. Величины будут дискретны в силу ограниченности вычислительны способностей  компьютера. Поэтому,  репрезентация столкновений и объединений также должна быть дискретной.

 

// необходимое рассояние для силияния 2х тел

var collisionThreshold = 1.5;

Также следует выделять оьекты с большей массой от других для большей наглядности.

 

var sunThreshold = 500;

 

Измерение величины массы  проще всего представить на логарифмической  шкале, т.к. она репрезентирует больше информации на меньшем геометрическом отрезке.По умолчанию предполагается взятие предпологается логарифма по основанию 2.

var binMass = function(mass) {

    for (var i=massHistogram.length-1; i>=0; i--){

        if (mass > pow(2, i)) {

            return i;

        }

    }

};

 

 

Любая частица(тело) может быть представлено как обьект, имеющий свойствами положение в пространстве, по х _Y_z  , скорость и массу.

Для большей репрезентативности обьект также обладает свойством размер, который напрямую зависит от его массы.

 

var Particle = function(x, y, z, v, m) {

    this.position = [x, y, z];

    this.velocity = v;

    this.mass = m;

    this.combineWith = [];

    this.getRadius = function() {

        this.radius = pow(this.mass, 1/3);

    };

 

 

Маркировка расстояния отдельной  частицы может проводиться, например, цветом.

his.draw = function() {

                var d = (this.position[2] + 0.5 * colourScale) /

                colourScale;

        if (d < 0.05) { d = 0.05; }

        else if (d > 1) { d = 1; }

 

 

Поскольку время и пространство дискретно, то  понятие «движение»представляетя логичным прописать как     сумму  изначальной координаты и скорости.

    this.move = function() {

        this.position[0] += this.velocity[0];

        this.position[1] += this.velocity[1];

        this.position[2] += this.velocity[2];

    };

 Вопрос притяжения частиц рассматривался с позиции  чисто ньютоновской мезанике, где сила притяжения между частицами прямопропорционально равна произведению масс  и обратнопропорционально квадрату расстояния между ними.

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

    this.attract = function(that) {

        var dx = this.position[0] - that.position[0];

        var dy = this.position[1] - that.position[1];

        var dz = this.position[2] - that.position[2];

        var d2 = dx * dx + dy * dy + dz * dz;

        var d = sqrt(d2);

       

       

       

        var force = this.mass * that.mass / d2;

        force *= GRAVITATIONAL_CONSTANT;

        var accel1 = force / this.mass;

        var accel2 = force / that.mass;

       

        dx /= d;

        dy /= d;

        dz /= d;

       

        this.velocity[0] -= accel1 * dx;

        this.velocity[1] -= accel1 * dy;

        this.velocity[2] -= accel1 * dz;

       

        that.velocity[0] += accel2 * dx;

        that.velocity[1] += accel2 * dy;

        that.velocity[2] += accel2 * dz;

    };

 

 

 

Стартовая позиция состояния  системы описывается следующисм

        var phi = random() * 360;

        var theta = acos( random() * 2 - 1 );

        var r = initialMaxDistance * pow(random(), 1/3);

        var x = r * sin(theta) * cos(phi);

        var y = r * sin(theta) * sin(phi);

        var z = r * cos(theta);

       

        var v;

        if (startWithRotation) {

            var d = initialSpin / sqrt(x*x + y*y);

            v = [random() * d *  y,

                 random() * d * -x,

                 random() * 0.2 - 0.1];

        } else {

            v = [random()-0.5, random()-0.5, random()-0.5];

        }

       

        var m = initialMassRange[0] + random() * massRange;

        if (m > maxMass) { maxMass = m; }

        totalMass += m;

        massHistogram[binMass(m)] += 1;

       

        particles.push(new Particle(x, y, z, v, m));

    }

   

    return particles;

 

 

 

 

Также , для удобной репрезентации  гистограмма должна занимать мало места, отображать изменение распределения  массы ,количесво тел в системе, массу самого массивного обьекта и расстояние до самого отдалённого от центра.Также должна присутствовать возможность остановки и возобновления симуляции.


Информация о работе Симуляция движения скоплений масс в галактиках спирального типа (S)