Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
#1

Моя реализация гравитации на моем физическом движке - C++

17.11.2013, 17:51. Просмотров 422. Ответов 0
Метки нет (Все метки)

Моя реализация гравитации на моем физическом движке. В общем и целом: движок содержит класс PowerVector (направленная сила). Движок содержит объект круг с параметрами: радиус, плотность, положение, скорость и силы PowerVector, действующие на нее. Все данные разделяются на 2 части: по X и по Y.

На основе этих классов (движка) я написал систему взаимодействий сил гравитации (каждый объект взаимодействует с каждым).

Программа работает на языке Processing. Если хотите посмотреть, как работает эта программа, зайдите на сайт. Там будет ссылка на скачивание. Вставьте туда код и запустите.

P.S. Оцените мою программу (мой подход к решению задачи). Оценивайте строго

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
int widthScreen = 600, heightScreen = 600;
float G = 0.007;
 
//Ellipse ellipse = new Ellipse(300, 300, 2, 0, 20, 1);
System system = new System(10);
 
public class PowerVector {
  private float fx, fy;
  
  public PowerVector(float fx_, float fy_) {
    fx = fx_;
    fy = fy_;
  }
  
  public float getFX() {
    return fx;
  }
  
  public float getVY() {
    return fy;
  }
  
  public float getBoostX(float mass) {
    return (fx / mass); 
  }
  
  public float getBoostY(float mass) {
    return (fy / mass); 
  }
  
  public void changePower(float fx_, float fy_) {
    fx = fx_;
    fy = fy_;
  }
}
 
public class Ellipse {
  private float x, y, r, pa, m, vx, vy, ax, ay;
  private ArrayList<PowerVector>power;
  
  public Ellipse(float x_, float y_, float vx_, float vy_, float r_, float pa_) {
    x = x_;
    y = y_;
    vx = vx_;
    vy = vy_;
    power = new ArrayList<PowerVector>();
    r = r_;
    pa = pa_;
    m = 2 * PI * pow(r, 2) * pa;
  }
  
  public void addPower(PowerVector p) {
    power.add(p);
  }
  
  private void move() {
    ax = 0;
    ay = 0;
    
    for(int i = 0; i < power.size(); ++i) {
      ax += power.get(i).getBoostX(m);
      ay += power.get(i).getBoostY(m);
    }
    
    vx += ax;
    vy += ay;
    x += vx;
    y += vy;
  }
  
  private void draw() {
    stroke(pa / 25);
    fill(pa / 25);
    ellipse(x, y, r, r);
    //println("drawing");
  }
  
  public void run() {
    move();
    draw();
  }
  
  public float getX() {
    return x;
  }
  
  public float getY() {
    return y;
  }
  
  public void removePower() {
    power.clear();
  }
}
 
public class System {
  ArrayList<Ellipse> planet;
  
  public System(int num_planet) {
    planet = new ArrayList<Ellipse>();
    for(int i = 0; i < num_planet; ++i) {
      planet.add(new Ellipse(random(widthScreen), random(heightScreen), 0/*random(4) - 2*/, 0/*random(4) - 2*/, random(30), 5));
    }
  }
  
  /*public void addPlanet() {
    
  }*/
  
  void run() {
    for(int i = 0; i < planet.size(); ++i) {
      for(int j = 0; j < planet.size(); ++j) {
        planet.get(i).addPower(new PowerVector((planet.get(j).getX() - planet.get(i).getX()) * G, (planet.get(j).getY() - planet.get(i).getY()) * G));
      }
    }
    
    for(int i = 0; i < planet.size(); ++i) {
      planet.get(i).run();
    }
    
    for(int i = 0; i < planet.size(); ++i) {
      planet.get(i).removePower();
    }
  }
}
 
void setup() {
  size(widthScreen, heightScreen);
  smooth();
}
 
void draw() {
  background(255);
  system.run();
}
Добавлено через 2 минуты
P.S. Подскажите, если я что-то упустил. Физический движок я только начал писать. В будущем собираюсь добавить другие объекты: упругость, трение, жидкости. Это только начало.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2013, 17:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Моя реализация гравитации на моем физическом движке (C++):

реализация функции c_str() в моем классе Str - C++
Ребята, вот есть у меня в классе Str данные: private: Vec&lt;char&gt; data; char* buffer; В конструкторе я пишу: Str() :buffer(new...

Моя реализация функции перевода STRING в DOUBLE - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; double str_to_double(string a); int main() { string s =...

Моя реализация функции перевода string в int - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int str_to_int(string a); int main() { string s =...

Моя реализация акторной модели - Haskell
Моя реализация акторной модели в рамках Хаскеля. {-# Language GADTs, LambdaCase, FlexibleInstances, ...

Реализация дэка. Подскажите,в чем моя ошибка? - C#
Задание такое: Дек организован в массиве с циклическим заполнением и с использованием двунаправленного списка. Операции выполняются с...

Python unpack('i') питоновская анпак integer моя реализация - C#
Предыстория с задачей: Возникла задача разобрать на C# бинарный файл с данными. недолго думая &quot;великий&quot; гуглопоиск выдал ссылку на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2013, 17:51
Привет! Вот еще темы с ответами:

открытие гравитации - Физика
Что будит когда ученые узнаю что такое гравитация? Сейчас ученые уже нашли возможный Бозон Хиггса. А зная его можно начать изучать...

Электроэнергия от Гравитации - Механика
Я недавно подал заявку на патент Мое изобретение называется Гравитационный Генератор он трансформирует гравитацию в электроэнергию....

Нету гравитации - Unity, Unity3D
Привет.Ври сделал игровой объект сделал к нему спрайт и анимацию добавил Rigitbody2D BoxCollider2D но он не падает вниз а весит на...

Включение и отключение гравитации - Unity, Unity3D
Есть 5-7 префабов(c Rigidbody2D) при старте они висят в воздухе,при нажатии на кнопку начинают падать вниз. Как это сделать? все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru