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

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

Войти
Регистрация
Восстановить пароль
 
devcpp2
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 3
#1

Центральное столкновение шаров - C++

11.11.2012, 11:07. Просмотров 785. Ответов 2
Метки нет (Все метки)

Здравствуйте!
Написал программу для центрального столкновения двух шаров...но программа выполняется некорректно....подскажите, что не так
вот код:
const int dt = 1;

void BallDraw (double x, double y, double r, COLORREF color);

void Move (int Border_x, int Border_y);

void PhysicsBall (double* x, double* y, double* vx, double* vy,
int Border_x, int Border_y);

void Collision (double* x, double* vx, double r,
double r1, double* vx1, double m1, double m2, double* x1, int Border_x);

int main()
{
txCreateWindow(1000, 700);

int Border_x = txGetExtentX();
int Border_y = txGetExtentY();

Move (Border_x, Border_y);

return 0;
}

void BallDraw (double x, double y, double r, COLORREF color)
{
txSetFillColor(color);
txCircle(x, y, r);
}

void PhysicsBall (double* x, double* y, double* vx, double* vy,
int Border_x, int Border_y)
{
if(*x < 0 ) {*vx = -*vx; *x = 0; }
if(*y < 0 ) {*vy = -*vy; *y = 0; }
if(*x > Border_x ) {*vx = -*vx; *x = Border_x;}
if(*y > Border_y ) {*vy = -*vy; *y = Border_y;}
}

void Collision (double* x, double* vx, double r,
double r1, double* vx1, double m1, double m2, double* x1, int Border_x)
{
double dx = *x1 - *x;
double R = r+r1;
double z = dx;

if(dx < 0)
dx = - dx;

if(dx <= R)
{
*vx = *vx*(m1 - m2)/(m1 + m2) + *vx1*(2*m2)/(m1 + m2);
*vx1 = *vx*(2*m1)/(m1 + m2) + *vx1*(m2 - m1)/(m2 + m1);
if(*x1 <= 2*r)
*vx1 *= -1;

//if (m1 < m2) {*vx1 = -*vx1; *vx = - *vx;}
//if (m1 > m2) {*vx1 = -*vx1; *vx = *vx;}
}

/*if (z <= R && m1 == m2)
{
double dvx = *vx;
double dvx1 = *vx1;
*vx1 = -dvx; *vx = -dvx1;
} */
}

void Move (int Border_x, int Border_y)
{

double x = 30, y = 310;
double vx = 10, vy = 15;
double r = 20;
double m = 1;

double x1 = 550, y1 = 300;
double vx1 = 5, vy1 = 7;
double r1 = 30;
double m1 = 4;

while (true)
{
txBegin();

if (!GetAsyncKeyState(VK_SPACE))
{
txSetFillColor(TX_BLACK);
txClear();
}

BallDraw ( x, y, r, TX_GREEN);
BallDraw (x1, y1, r1, TX_BLUE);

x += vx*dt;
x1 += vx1*dt;

PhysicsBall ( &x, &y, &vx, &vy, Border_x, Border_y);
PhysicsBall (&x1, &y1, &vx1, &vy1, Border_x, Border_y);

cout << vx << ' ' << vx1 << '\n';

Collision ( &x, &vx, r, r1, &vx1, m, m1, &x1, Border_x);

cout << vx << ' ' << vx1 << '\n';

txSleep(10);

txEnd();
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2012, 11:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Центральное столкновение шаров (C++):

Столкновение шаров - C++
Помогите пожалуйста написать условие столкновения шаров void impact(Sphera &amp; a,Sphera &amp; b) { ...

Графика С++, столкновение шаров - C++
дана задача: на экране движутся два шара разного размера и разной скоростью. Начальны размер выбирается пользователем (из 3-х вариантов),...

столкновение - C++
Ф ребята, я вот хочу написать примитивную игру, типа гонки(так сказать) на С++, но никак не могу реализовать сталкивание(((... Посмотрите...

Столкновение функций - C++
У меня при работе программы получается странная ситуация: 1) включается программа 2) в дополнительном потоке включается...

Столкновение объектов в играх - C++
Кто что подскажет/посоветует_почитать по поводу физики в играх, в частности столкновения объектов. (интересует само решение задач,...

Столкновение двух окружностей - C++
Итак,я сталкиваю два шарика(но вообще их больше,массив). Какое-то время после старта программы все нормально,однако спустя некоторое...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6359 / 5923 / 1920
Регистрация: 18.12.2011
Сообщений: 15,224
Завершенные тесты: 1
11.11.2012, 11:59 #2
Учтите возможность повторного возникновения ситуации,
например, отражение от правого края:
C++
1
if(*x > Border_x ) {*vx = -fabs(*vx); *x = Border_x;}
Точно также и при столкновении: устанавливайте строго нужные знаки скоростей.
devcpp2
0 / 0 / 0
Регистрация: 11.11.2012
Сообщений: 3
11.11.2012, 16:14  [ТС] #3
Извините, а вы не знаете как сделать, чтобы шары отталкивались не только по оси X, но и по оси Y?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2012, 16:14
Привет! Вот еще темы с ответами:

Столкновение окружности с прямоугольником - C++
1) Как определить момент столкновения окружности с прямоугольником? 2) Как отразить направление окружности в момент столкновения с одной...

Реализовать столкновение шарика со стенкой - C++
Делаю очень примитивную игру - лабиринт, необходимо чтобы шарик сталкивался со стенкой. Условие столкновения есть: if (ball.x &lt; h_wall.x...

Столкновение спрайта и закрашеного квадратика - C++
Как мне реализовать столкновение, что бы не проходить сквозь закрашенные квадраты а стоять на их,В 2д игре. За код сильно не судить брал...

Как убрать столкновение Объектов на плоскости с пустым пространством? - C++
Код определяет столкновение по х и y. if ((obj1.x + obj1.width &gt;= obj2.x) &amp;&amp; (obj1.x &lt;= obj2.x + obj2.width)) XColl = true; if...


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

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

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