-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTriangle.cpp
168 lines (158 loc) · 4.13 KB
/
Triangle.cpp
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include "Triangle.h"
#include "Point.h"
#include <iostream>
//constructorlarda olusturulan nesnenin uye fonksiyonu(isValid) cagirilarak kontrol yapildi.
//default constructor .
Triangle::Triangle(const Point & a, const Point & b, const Point & c, const Color & color)
:pts{ a , b, c }, color{ color } //member initializer
{
this->isValid();
}
//2 parametreli constructor. Aldigi parametrelerle triangle nesnesi olusturur.
Triangle::Triangle(const vector<Point>& pts, const Color & color)
: color{ color } , pts { pts[0] , pts[1] , pts[2] } //member initializer
{
this->isValid();
}
//2 parametreli constructor. Aldigi parametrelerle triangle nesnesi olusturur.
Triangle::Triangle(const array<Point, NUMBER_OF_CORNERS>& pts, const Color & color)
: pts { pts[0] , pts[1] , pts[2] } , color { color } //member initializer
{
this->isValid();
}
//getter function
Point Triangle::getA() const noexcept
{
return a;
}
//getter function
Point Triangle::getB() const noexcept
{
return b;
}
//getter function
Point Triangle::getC() const noexcept
{
return c;
}
//getter function
Triangle::Color Triangle::getColor() const noexcept
{
return color;
}
//getter function
string Triangle::getColorAsString() const noexcept
{
//color a gore string dondurur.
switch (color)
{
case Triangle::Color::PINK:
return "Pink"; break;
case Triangle::Color::RED:
return "Red"; break;
case Triangle::Color::BLUE:
return "Blue"; break;
case Triangle::Color::WHITE:
return "White"; break;
case Triangle::Color::BLACK:
return "Black"; break;
case Triangle::Color::GREEN:
return "Green"; break;
default:
return "Green"; break;
}
}
//ucgenin cevresini hesaplar.
double Triangle::getPerimeter() const noexcept
{
//kenar uzunluklari hesaplanir.
double side1 = a.distanceTo(b);
double side2 = b.distanceTo(c);
double side3 = c.distanceTo(a);
//cevreyi hesapladik.
double perimeter = side1 + side2 + side3;
return perimeter;
}
//a noktasini duzenler
bool Triangle::setA(const Point & pt)
{
Triangle temp{ pt , getB() , getC() };
//olusturulan bos nesne ile ucgen olusabildiyse a noktasinin koordinatlarina paramatrenin koordinatlari atanir.
if (temp.isValid() != false)
{
a.x = pt.x;
a.y = pt.y;
return true;
}
else
{
//gelen parametre ile ucgen olusamadiysa constructor cagirilarak varsayilan ucgen olusturulur.
Triangle();
return false;
}
}
//b noktasini duzenler
bool Triangle::setB(const Point & pt)
{
//olusturulan bos nesne ile ucgen olusabildiyse a noktasinin koordinatlarina paramatrenin koordinatlari atanir.
Triangle temp{ getA() , pt , getC() };
if (temp.isValid() != false)
{
b.x = pt.x;
b.y = pt.y;
return true;
}
else
{
//gelen parametre ile ucgen olusamadiysa constructor cagirilarak varsayilan ucgen olusturulur.
Triangle();
return false;
}
}
//c noktasini duzenler
bool Triangle::setC(const Point & pt)
{
//olusturulan bos nesne ile ucgen olusabildiyse a noktasinin koordinatlarina paramatrenin koordinatlari atanir.
Triangle temp{ getA(), getB() , pt };
if (temp.isValid() != false)
{
c.x = pt.x;
c.y = pt.y;
return true;
}
else
{
//gelen parametre ile ucgen olusamadiysa constructor cagirilarak varsayilan ucgen olusturulur.
Triangle();
return false;
}
}
//noktalarin ucgen olusturup olusturmadigini kontrol eder.
bool Triangle::isValid() const
{
//kenar uzunluklarihesaplanir.
double side1 = a.distanceTo(b);
double side2 = b.distanceTo(c);
double side3 = c.distanceTo(a);
//eld edilen kenar uzunlugu diger iki kenar uzunlugunun toplamindan buyukse ucgen sartini saglamaz.
if (side1 + side2 <= side3 || side1 + side3 <= side2 || side2 + side3 <= side1)
{
//expection firlatir.
throw invalid_argument("Invalid Triangle");
return false;
}
else
{
//sart saglanirsa true dondurur.
return true;
}
}
//nesnenin bilgilerini ekrana basar .
double Triangle::printInfo() const noexcept
{
cout << "Triangle" << endl << "Number of corners: " << NUMBER_OF_CORNERS << endl;
cout << "Points: (" << a.x << "," << a.y << ") " << "(" << b.x << "," << b.y << ") " << "(" << c.x << "," << c.y << ")" << endl;
cout << "Perimeter" << getPerimeter() << endl;
cout << "Color " << &getColorAsString() <<endl;
return 0.0;
}