Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование мультимедиа
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.84/32: Рейтинг темы: голосов - 32, средняя оценка - 4.84
TXLib.h
3 / 3 / 0
Регистрация: 01.12.2010
Сообщений: 68
#1

Отскакивание шаров друг от друга

17.12.2010, 16:50. Просмотров 5789. Ответов 20
Метки нет (Все метки)

Всем привет! Вопрос, который я задам в этой теме, уже был задан в теме C++ для начинающих, но полностью ответа на него я не получил. Мне посоветовали обратиться в этот раздел. ОбращаюсьНадо, чтобы в моей примитивнейшей программе шарики, мечущиеся по экрану и отскакивающие от стенок при соударении друг с другом, разлетались в разные стороны. По идее нужно плясать от этого условия : if (расстояние между точками) < суммы (радиус1 + радиус2)...
Прогу для двух шариков мне "с горем пополам"(как он говорит) добрый человек dihlofos помог состряпать. Но она работает только для соударений двух шариков друг с другом. Надо сделать так, чтобы хотя бы три шарика при соударении друг с другом разлетались. Возможно, это можно сделать при повторении метода, но с другими комбинациями шаров (но, если шаров будет много, то это дело будет ооочень запарным)? Очень прошу помочьв нижеследующей проге, по словам dihlofos'а шары налипают друг на друга. Как это исправить?Если вы хотя бы осилили этот текст, то уже вам спасибо

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

C++
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
#include "TXLib.h"
#include <cmath>
 
class Circle
{
public:
        Circle(int x, int y, int s, int dx, int dy, int r, COLORREF cl)
        {
                xCoord = x; 
                yCoord = y; 
                speed = s; 
                dirX = dx; 
                dirY = dy; 
                rad = r; 
                color = cl;
        }
        void Move();
        void Draw();
        friend void impact(Circle & A, Circle & B);
private:
        int xCoord;
        int yCoord;
        int speed;
        int rad;
        int dirX;
        int dirY;
        COLORREF color;
}; 
///////////////////////////////////////////
void Circle::Draw()
{
        txSetColor (color);
        txSetFillColor(color);
        txCircle (xCoord, yCoord, rad);
}
///////////////////////////////////////////
void Circle::Move()
{
        xCoord += dirX * speed;
        yCoord += dirY * speed;
        
        if (xCoord - rad < 0 || xCoord + rad > 500)
        {
                dirX = - dirX;
        } 
 
        if (yCoord - rad < 0 || yCoord + rad > 500)
        {
                dirY = - dirY;
        }    
               
        Draw();
}
///////////////////////////////////////////
// функция которая проверяет на столкновение.
void impact(Circle & A, Circle & B)
{
        int hit_dist = A.rad + B.rad;
        double x_dist = (A.xCoord-B.xCoord)*(A.xCoord-B.xCoord);
        double y_dist = (A.yCoord-B.yCoord)*(A.yCoord-B.yCoord);
 
        // если координаты близко (на расстоянии радиус первого + радиус второго)
        // то меняем направления обоих
        if (sqrt(static_cast<double>(x_dist + y_dist))<hit_dist)
        {
                A.dirX = - A.dirX;
                A.dirY = - A.dirY;
 
                B.dirX = - B.dirX;
                B.dirY = - B.dirY;
        }
}
///////////////////////////////////////////
int main()
{
        
    txCreateWindow (500, 500);
        
        Circle First(10, 10, 10, 1, 1, 20, TX_RED);
        Circle Second(470, 480, 15, -1, -1, 20, TX_GREEN);
        while (true)
        {
                txSetFillColor (TX_BLACK); 
                txClear();  
                First.Move();
                Second.Move();
                impact(First, Second); // проверяем, столкнулись ли шары
                txSleep (100);
        }
}
Правда, почему-то шарики отбиваются друг от друга не сразу.

Если кто-то заинтересовался вопросом, то вот ссылка, откуда можно скачать библиотеку:http://www.ded32.net.ru/load
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2010, 16:50
Ответы с готовыми решениями:

Как сделать отскок шаров от краев экрана и от друг друга?
Есть 2D шар, с координатами - x, y; скоростью движения - speed и углом, под...

Определить объем в литрах вложенных в друг друга шаров
Здравствуйте, задали простенькую задачку на турбо паскале... Вроде легкая, а не...

Определить суммарный обьём в литрах 12 вложенных друг в друга шаров
1.Определить, в какую из облостей (1,2 или 3) попадает точка с заданными...

Определить суммарный обьем в литрах 12 вложенных друг в друга шаров
решите пожалуйста))))Определить суммарный обьем в литрах 12 вложенных друг в...

Определить суммарный объем в литрах двенадцати вложенных друг в друга шаров
нужно составить программу на С а)определить суммарный объем в литрах...

20
TXLib.h
3 / 3 / 0
Регистрация: 01.12.2010
Сообщений: 68
24.01.2012, 20:20  [ТС] #21
Цитата Сообщение от JamesBlack Посмотреть сообщение
А эта ваша TXlib под какую среду написана? Я скачал с сайта, там каких-то три непонятных проекта в папке Src, при чем VS не открывает. Никаких даже cpp и h файлов я не нашел. dll и lib тоже. Где эта ваша либа?
По идее, написана для Dev-Cpp
0
24.01.2012, 20:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2012, 20:20

Определить суммарный объем в литрах двенадцати вложенных друг в друга шаров...
Помогите написать программу для решения данной задачи. Определить суммарный...

Определить суммарный объем в литрах двенадцати вложенных друг в друга шаров со стенками толщиной 5 мм
Определить суммарный объем в литрах двенадцати вложенных друг в друга шаров со...

Определите суммарный объем (в литрах) 12-ти вложенных друг в друга шаров со стенками 5 мм. Внутренний диаметр
Определите суммарный объем (в литрах) 12-ти вложенных друг в друга шаров со...


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

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

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