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;
} |