С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
 Аватар для Мариам
0 / 0 / 0
Регистрация: 23.09.2013
Сообщений: 10

Нарисовать окружность

08.10.2013, 20:21. Показов 5469. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
программа рисует прямоугольник, треугольник и линию. Помогите пожалуйста доделать так чтобы она и окружность рисовала, с задающимися координатами центра и радиусом..сама в программирование не сильна, но надо сдать((
Вложения
Тип файла: rar 6labWL.rar (11.6 Кб, 49 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2013, 20:21
Ответы с готовыми решениями:

Нарисовать окружность
Пишу на Visual C++ 2012. вот коды: // Win32Project1.cpp: определяет точку входа для приложения. // #include...

Нарисовать окружность и элипс
Всем добрый вечер. Может кто нибудь подскажет как изобразить окружность, зная радиус? и как изобразить элипс, зная размеры треугольника,...

Как нарисовать окружность
Подскажите, пожалуйста, как нарисовать окружность в Microsoft Visual C++ .:thank_you:

2
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
08.10.2013, 22:26
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Circle.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include "DrawFigures.h"
#include <string>
 
class Circle: public Figure
{
public:
    Circle();
    void Draw(char field[100][100]);
    std::string GetNameAndCoords()const ;
    void Set(int x, int y, int r);
private:
    int dis(int , int );
    void drawPixel(int x, int y, char field[100][100]);
    int m_x;
    int m_y;
    int m_r; 
};
Circle.cpp
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
#include "stdafx.h"
#include <math.h>
#include "Circle.h"
#include <sstream>
#include <string>
#include <algorithm>
 
Circle::Circle()
{
}
 
void Circle::Set(int x, int y, int r)
{
    m_x = x;
    m_y = y;
    m_r = r;
}
void Circle::drawPixel(int x, int y, char field[100][100]){
        field[m_x + x][m_y + y] = 'x';
        field[m_x - x][m_y + y] = 'x';
        field[m_x + x][m_y - y] = 'x';
        field[m_x - x][m_y - y] = 'x';
        field[m_x + y][m_y + x] = 'x';
        field[m_x - y][m_y + x] = 'x';
        field[m_x + y][m_y - x] = 'x';
        field[m_x - y][m_y - x] = 'x';
}
void Circle::Draw(char field[100][100]){
    int x = 0, y = m_r; // начинаем рисовать окружность с точки (0, r). Смещение окружности через координаты центра учитывается в функции Circle::drawPixel(Int &, Int &). В дальнейшем (x, y) - это текущая точка рисования
    while(y >= (m_r >> 1)) // текущая координата y изменяется от r до r / 2 (строим 1/8 окружности)
    {
        drawPixel(x, y, field); // по текущей точке рисования получаем 8 точек на кривой окружности и закрашиваем их
        int move[3]; // массив расстояний до 3 точек, в которые можно перейти из текущей для последующего их закрашивания
        move[0] = abs(dis(x + 1, y) - m_r * m_r); // вычисляем расстояние от (x + 1, y) до кривой окружности
        move[1] = abs(dis(x, y - 1) - m_r * m_r); // вычисляем расстояние от (x, y - 1) до кривой окружности
        move[2] = abs(dis(x + 1, y - 1) - m_r * m_r); // вычисляем расстояние от (x + 1, y - 1) до кривой окружности
        switch(std::min_element(move, move + 3) - move) // switch ( X ), X принадлежит {0, 1, 2}, где move[X] - это min(move[0], move[1], move[2]). То есть определяем позицию в массиве move с минимальным значением
        {
            case 0: x++; break; // Если эта позиция = 0, т.е move[0] > move[1] и move[0] > move[2], то перемещаемся в точку (x + 1, y)
            case 1: y--; break; // Если эта позиция = 1, т.е move[1] > move[0] и move[1] > move[2], то перемещаемся в точку (x, y - 1)
            case 2: x++; y--; break; // Если эта позиция = 2, т.е move[2] > move[0] и move[2] > move[1], то перемещаемся в точку (x + 1, y - 1)
        }
        // Полученная точка (x, y) - текущая
    }
}
 
 
std::string Circle::GetNameAndCoords()const
{
    std::ostringstream stream;
    stream << "Circle [" << m_x << ", " << m_y << ", " << m_r << "]";
    return stream.str();
}
 
 
 
int Circle::dis(int x, int y)
{
    return x * x + y * y; 
}
6lab.cpp
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
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
// 6lab.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "Line.h"
#include "Rectangle.h"
#include "DrawFigures.h"
#include "Triangle.h"
#include <iostream>
#include <vector>
#include <string>
#include "WhiteLine.h"
#include "Circle.h"
 
using namespace std;
 
int main(int argc, char * argv[])
{
    vector<Figure*> figuresList;
    string str;
        cout << "Enter operations add, draw, show all, del or exit: ";
    while (getline(cin, str))
    {
        if (str == "add")
        {
            cout << "Enter figure: ";
            string f;
            cin >> f;
            if (f == "line")
            {
                cout << "Enter coordinates: ";
                int x1, y1, x2, y2;
                cin >> x1 >> y1 >> x2 >> y2;
                Line *line = new Line();
                line->Set(x1, y1, x2, y2);
                figuresList.push_back(line);
            }
            if (f == "rectangle")
            {
                cout << "Enter coordinates: ";
                int x1, y1, x2, y2;
                cin >> x1 >> y1 >> x2 >> y2;
                Rectangle *rectangle = new Rectangle();
                rectangle->Set(x1, y1, x2, y2);
                figuresList.push_back(rectangle);
            }
            if (f == "triangle")
            {
                cout << "Enter coordinates: ";
                int x1, y1, x2, y2, x3, y3;
                cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
                Triangle *triangle = new Triangle();
                triangle->Set(x1, y1, x2, y2, x3, y3);
                figuresList.push_back(triangle);
            }
            if (f == "whiteline")
            {
                cout << "Enter coordinates: ";
                int x1, y1, x2, y2;
                cin >> x1 >> y1 >> x2 >> y2;
                WhiteLine *whiteline = new WhiteLine();
                whiteline->Set(x1, y1, x2, y2);
                figuresList.push_back(whiteline);
            }
            if (f == "circle")
            {
                cout << "Enter coordinates(x, y, r): ";
                int x, y, r;
                cin >> x >> y >> r;
                Circle *circle = new Circle();
                circle->Set(x, y, r);
                figuresList.push_back(circle);
            }
        }
        else if (str == "draw")
        {
            char field[100][100];
            for (int i = 0; i < 100; i++)
                for (int j = 0; j < 100; j++)
                    field[i][j] = '.';
            
            for (int i = 0;  i < figuresList.size(); i++)
            {
                figuresList[i]->Draw(field);
            }
 
 
            for (int i = 0; i < 20; i++)
            {
                for (int j = 0; j < 50; j++)
                {
                    std::cout << field[i][j];
                }
                std::cout << "\n";
            }
        }
        else if (str == "show all")
        {
            for (int i = 0; i != figuresList.size(); i++)
            {
                cout << "  " << i + 1 << ". " << figuresList[i]->GetNameAndCoords() << endl;
            }
        }
        else if (str == "del")
        {
            cout << "Enter number of figure: ";
            int n;
            cin >> n;
            figuresList.erase(figuresList.begin() + n - 1);
        }
        else if (str == "exit")
        {
            break;
        }
        cout << "Enter operations add, draw, show all, del or exit: ";
    }
    for(vector<Figure*>::iterator i=figuresList.begin(); i!=figuresList.end(); i++) delete *i;
    return 0;
}
1
 Аватар для Мариам
0 / 0 / 0
Регистрация: 23.09.2013
Сообщений: 10
09.10.2013, 09:27  [ТС]
офигеееенно))) бооольшое спасибо) Вы безумно меня выручили))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2013, 09:27
Помогаю со студенческими работами здесь

Нарисовать правильный шестиугольник, вписанный в окружность, и заставить его крутиться по этой окружности
Здравствуйте форумчане! Помощь нужна, с помощью библиотеки &quot;graphics.h&quot; в Dev C++ мне нужно: 1) Нарисовать правильный шестиугольник...

Окружность вписана в квадрат заданной площади; найти площадь квадрата, вписанного в эту окружность
Окружность вписана в квадрат заданной площади. Найти площадь квадрата, вписанного в эту окружность. Во сколько раз площадь вписанного...

Нарисовать окружность, треугольник и касательные
Из вершины С треугольника ABС, как из центра, описаны концентрические окружности, к которым из точек A и B проведены касательные....

Нарисовать фигуру, вписанную в окружность заданного радиуса и имеющую внутреннюю вписанную окружность
Добрый день. Если есть возможность, подскажите пожалуйста код программы в Delphi для того, чтобы нарисовать фигуру , вписанную в...

Нарисовать окружность
Нарисовать откружность с заключённой в него трапецией


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru