0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 62
1

Круг в консоли когда ввожу отрицательные значения выходит из видимой области

14.04.2018, 09:06. Показов 505. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа для отображения круга относительно прямой при вводе отрицательных значений выходит за консоль как исправить?
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
120
121
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <Windows.h>
#include <conio.h>
using namespace std;
class Circle
{
public:
    float X;
    float Y;
    float R;
    Circle(float x = 0, float y = 0, float r = 1)
    {
        this->X = x;
        this->Y = y;
        this->R = r;
    }
    bool CreateCircle(HDC hdc, float x3, float y3, float r)
    {
        POINT pt;
        MoveToEx(hdc, x3, y3, &pt);
        return Ellipse(hdc, x3, y3, x3+r, y3+r);
    }
    double Mastabe( float r, int P)
    {
    double p = double(P) / 100;
        R = r*p;
        return R;
    }
    BOOL NewCircle(HDC hdc,float x1,float x2, float x3, float y1,float y2,float y3,float r)
    {
        POINT pt;
        float x = newPointXRES(x1,x2, x3, y1, y2,y3);
        float y = newPointYRES(x1, x2, x3, y1, y2, y3);
        MoveToEx(hdc, x, y, &pt);
        return Ellipse(hdc, x, y, x+r,y+r);
    }
    BOOL MastabeCircle(HDC hdc, float x3, float y3,float r, int P)
    {
        POINT pt;
        MoveToEx(hdc, x3, y3, &pt);
        float R = Mastabe(r, P);
        return Ellipse(hdc, x3, y3, x3+R, y3+R);
    }
    float newPointX(float x1, float x2, float x3, float y1, float y2, float y3)
    {
        float x4;
        x4 = ((x2 - x1)*(y2 - y1)*(y3 - y1) + x1*pow(y2 - y1, 2) + x3*pow(x2 - x1, 2)) / (pow(y2 - y1, 2) + pow(x2 - x1, 2));
        return x4;
    }
    float newPointY(float x1, float x2, float x3, float y1, float y2, float y3)
    {
        float y4, x4;
        x4 = newPointX(x1, x2, x3, y1, y2, y3);
        y4=(x2 - x1)*(x3 - x4) / (y2 - y1) + y3;
        return y4;
    }
    float newPointXRES(float x1,float x2, float x3,float y1,float y2,float y3)
    {
        float x = newPointX(x1, x2, x3, y1, y2, y3);
        float Xres =2*x-x3;
        return Xres;
    }
    float newPointYRES(float x1, float x2, float x3, float y1, float y2, float y3)
    {
        float y = newPointY(x1, x2, x3, y1, y2, y3);
        float Yres = 2*y-y3;
        return Yres;
    }
};
BOOL DrawLine(HDC hdc, float x1, float y1, float x2, float y2)
{
    POINT pt;
    MoveToEx(hdc, x1, y1, &pt);
    return LineTo(hdc, x2, y2);
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    float X, Y, X1, Y1, X2, Y2, R, res1, res2, Res1, Res2; int P; double M;
    setlocale(LC_ALL, "Russian");
    cout << "Введите координаты  первой точки вертикальной оси:";
    cin >> X1 >> Y1;
    cout << endl;
    cout << "Введите координаты  второй точки вертикальной оси:";
    cin >> X2 >> Y2;
    cout<< endl;
    cout << "Введите координаты центра круга X и Y: ";
    cin >>X >>Y;
    cout << endl;
    cout << "Введите длину радиуса: ";
    cin >>R;
    if (R <= 0)
    {
        throw ("Длина радиуса должна быть больше нуля!");
    }
    Circle crl;
    res1 = crl.newPointX(X1, X2, X, Y1, Y2, Y);
    res2 = crl.newPointY(X1, X2, X, Y1, Y2, Y);
    Res1 = crl.newPointXRES(X1, X2, X, Y1, Y2, Y);
    Res2 = crl.newPointYRES(X1, X2, X, Y1, Y2, Y);
    cout << "Введите значение масштаба:";
    cin >> P;
    M =crl.Mastabe( R, P);
    cout << "Радиус масштабированной окружности:"<<M<<endl;
    cout << "Координаты отображенной окружности:" << Res1 <<" "<< Res2 << endl;
    HWND hwnd = GetConsoleWindow(); //Берём ориентир на консольное окно (В нём будем рисовать)
    HDC hdc = GetDC(hwnd);    // Получаем контекст для рисования
    HPEN p1, p2 = CreatePen(PS_SOLID, 2, RGB(255, 0, 0)); // Создаем красное перо
    p1 = (HPEN)SelectObject(hdc, p2);  // Заносим красное перо в контекст рисования
    crl.CreateCircle(hdc, X, Y, R);
    DrawLine(hdc, X1, Y1, X2, Y2); // Проводим линию
    crl.MastabeCircle(hdc, X, Y, R, P);
    crl.NewCircle(hdc, X1, X2, X, Y1, Y2, Y, R);
    SelectObject(hdc, p1);   // Возвращаем старое перо
    ReleaseDC(hwnd, hdc);    // Освобождаем контекст рисования
    DeleteObject(p2);       // Удаляем созданное перо
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2018, 09:06
Ответы с готовыми решениями:

Как заставить перемещаться скролинг области, когда переходишь на строчку 'ниже' видимой части области?
Помогите, кто чем может!!! Суть проблемы: Некие данные в в виде таблички выводятся в область ...

вроде программа работает, но когда ввожу значения
Составить программу для вычисления функции при постоянных х и у. Я написала программу, но когда...

Когда запускаю и ввожу параметры, то, в момент когда программа должна выполнять действие, пишет ошибку
Недавно начали изучать c++. так как в школе не было программирования (преподу пофиг было) я в...

Вылетает, когда ввожу последний символ
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;Windows.h&gt; #define N 6 ...

0
14.04.2018, 09:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2018, 09:06
Помогаю со студенческими работами здесь

Не работает фильтрация когда ввожу русские буквы
Table1.Filter:='Nazvanie='+Edit1.Text; Когда ввожу в эдит например букву Г выводит ошибку что...

Когда ввожу в файл данные с пробелом - выдает ошибку
Если ввожу свою фамилию &quot;Баринов&quot; - ошибку не выдает, если ввожу &quot;Баринов Филипп&quot; - начинается куча...

Когда ввожу testsite в броузер попадаю на localhost почему?
Все каталоги сайтов живут /var/www/ В файле testsite.conf прописано: &lt;VirtualHost *:80&gt; # The...

В терминале когда ввожу Is , пишет что команда не найдена
Прошу извинить если вопрос сильно донный, просто только поставил еще до конца не разобрался

Реагирование на изменение видимой области на листе
Здравствуйте. У меня возник вопрос к профессионалам. Имеется макрос добавки единицы в ячейку...

Когда я ввожу номер теста у меня ошибка file not found
Почему когда я ввожу номер теста у меня ошибка file not found там вроде нет файлов Program Test;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru