Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 03.02.2015
Сообщений: 1

Программа, рисующая окружности

03.02.2015, 20:06. Показов 2947. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть программа, которая рисует движущиеся окружности:
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
#include <TXLib.h>
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
const int SIZEX = GetSystemMetrics(SM_CXSCREEN),
          SIZEY = GetSystemMetrics(SM_CYSCREEN);
struct Ball
    {
    double x_, y_;
    double vx_, vy_;
    double r_;
    Ball();
    Ball (double x, double y, double vx, double vy, double r);
    void Draw();
    void Move (double dt);
    };
void Play();
int main()
    {
    txCreateWindow (SIZEX, SIZEY);
    txSetColor (TX_PINK, 3);
    txSetFillColor (TX_BLACK);
    Play();
    }
void Play()
    {
    Ball b1 (100, 100, 7, -9, 10);
    Ball b2 (100, 200, -8, 5, 30);
    const double dt = 1;
    for (;;)
        {
        if (_kbhit() && getch() == VK_ESCAPE) break;
        b1.Move (dt);
        b2.Move (dt);
        b1.Draw();
        b2.Draw();
        txSleep (20);
        }
    }
Ball::Ball():
    x_  (0),
    y_  (0),
    vx_ (0),
    vy_ (0),
    r_  (0)
    {}
Ball::Ball (double x, double y, double vx, double vy, double r) :
    x_  (x),
    y_  (y),
    vx_ (vx),
    vy_ (vy),
    r_  (r)
    {}
void Ball::Draw()
    {
    txCircle (x_, y_, r_);
    }
void Ball::Move (double dt)
    {
        if (x_ < r_ || x_ > SIZEX - r_) vx_ *= -1;
        if (y_ < r_ || y_ > SIZEY - r_) vy_ *= -1;
        x_ += vx_ * dt;
        y_ += vy_ * dt;
 
    }
Результат ее работы можно видеть на рисунке 1.
Но мне надо сделать так, чтобы отображалась не сплошная линия, а n-ное количество окружностей (В моем случае две).
Я попытался решить эту проблему:
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
[#include <TXLib.h>
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
const int SIZEX = GetSystemMetrics(SM_CXSCREEN),
          SIZEY = GetSystemMetrics(SM_CYSCREEN);
struct Ball
    {
    double x_, y_;
    double vx_, vy_;
    double r_;
    Ball();
    Ball (double x, double y, double vx, double vy, double r);
    void Draw();
    void Move (double dt);
    };
void Play();
int main()
    {
    txCreateWindow (SIZEX, SIZEY);
    txSetColor (TX_PINK, 3);
    txSetFillColor (TX_BLACK);
    Play();
    }
void Play()
    {
    Ball b1 (100, 100, 7, -9, 10);
    Ball b2 (100, 200, -8, 5, 30);
    const double dt = 1;
    for (;;)
        {
        if (_kbhit() && getch() == VK_ESCAPE) break;
        b1.Move (dt);
        b2.Move (dt);
        b1.Draw();
        b2.Draw();
        txSleep (20);
        }
    }
Ball::Ball():
    x_  (0),
    y_  (0),
    vx_ (0),
    vy_ (0),
    r_  (0)
    {}
Ball::Ball (double x, double y, double vx, double vy, double r) :
    x_  (x),
    y_  (y),
    vx_ (vx),
    vy_ (vy),
    r_  (r)
    {}
void Ball::Draw()
    {
    txCircle (x_, y_, r_);
    }
void Ball::Move (double dt)
    {
        for(;;)
        {
        if (x_ < r_ || x_ > SIZEX - r_) vx_ *= -1;
        if (y_ < r_ || y_ > SIZEY - r_) vy_ *= -1;
        x_ += vx_ * dt;
        y_ += vy_ * dt;
        txClear();
        Draw();
        txSleep (20);
        }
    }
Но она выводит одну окружность вместо двух (Рис 2)
Подскажите пожалуйста, что не так в моем решении и как сделать так, чтобы программа рисовала столько окружностей, сколько введет пользователь. Заранее спасибо.
http://storage.ded32.net.ru/Li... /index.htm - документация TXlib
Миниатюры
Программа, рисующая окружности   Программа, рисующая окружности  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2015, 20:06
Ответы с готовыми решениями:

Программа рисующая пирамидку
Нужно создать программу которая рисует пирамиду символами # в зависимости от введённого числа. Вводим: 5 ........# .......## ...

Программа, вычисляющая интеграл методом трапеций и рисующая график
Есть готовая программа, не очень хотела работать ни в одной операционке, но я ее кое-как заставил работать на ХР. Делал ее не я. Файлы...

Точка в окружности. Программа и блок-схема
#include &lt;iostream&gt; using namespace std; void main() { double x, y, r; cout &lt;&lt; &quot;Введие x,y,r:&quot; &lt;&lt; endl; cin &gt;&gt; x...

1
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
03.02.2015, 20:49
txClear();
убрать из Move() и вставить в Play() перед b1.Draw();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.02.2015, 20:49
Помогаю со студенческими работами здесь

Программа определяет, сколько точек пересечения образуют по координатам окружности
С клавиатуры вводится 6 чисел. Программа определяет, сколько точек пересечения образуют по этим координатам окружности. Нужно с операторами...

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

Найти радиус окружности и площадь круга по заданной длине окружности
Дана длина L окружности. Найти ее радиус R и площадь S круга, ограниченного этой окружностью, учитывая, что L = 2·π·R, S =...

По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения окружности с осями координат.
По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения окружности с осями координат.

Класс "Окружность" с данными центр и радиус окружности. Вычислить длину и площадь окружности.
Объявить класс и определить для него конструктор по умолчанию, конструктор инициализации. Определить функции-члены класса для ввода и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru