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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверьте код пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1010210.html
В чем ошибка? Если он в ответе выдает только: Vvedite element massiva: A= #include "stdafx.h" #include <stdio.h> #include <conio.h> const int N=10; int main() {
C++ Шаблон класса для работы с комплексными числами Есть такая программа: #include "stdafx.h" #include <iostream> using namespace std; template< class T > class Complex; template< class T > http://www.cyberforum.ru/cpp-beginners/thread1010206.html
Заполнить двумерный массив C++
Помогите исправить код. Мне надо что-бы массив состоял не только из положительных или отрицательных чисел. А из отрицательных и положительных. За ранее спасибо. srand(time(o)); int x; ...
C++ Лишние биты при считывании файла
Нужно порциями по 63 байта считать текст из файла. "in" - мой открытый файл для чтения. Вот отрывок из кода fseek(in, 0, SEEK_END); //конец файла int Len = ftell(in);//получаем размер fseek(in,...
C++ "Вращение" массива http://www.cyberforum.ru/cpp-beginners/thread1010190.html
Поделитесь мыслями, как можно, скажем, в массиве 5 х 5 осуществить перестановку элеменов так, словно мы его повернули на 90/180/270 градусов? Я тут набросал свой вариант, поделюсь, если вы поделитесь...
C++ Массив с++ Здравствуйте, уважаемые форумчане. Хочу попросить у вас помощи: подробнее

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

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

17.11.2013, 17:51. Просмотров 430. Ответов 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. Подскажите, если я что-то упустил. Физический движок я только начал писать. В будущем собираюсь добавить другие объекты: упругость, трение, жидкости. Это только начало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru