06.#include<iostream>
07.#include<Cmath>
08.using namespace std;
09.
10.class CPoint
11.{
12.private:
13. double x; // 横坐标
14. double y; // 纵坐标
15.public:
16. void input(); //以x,y 形式输入坐标点
17. float Distance(CPoint p) const; // 两点之间的距离(一点是当前点,另一点为参数p)
18.};
19.
20.class CTriangle
21.{
22.public:
23. CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z){} //给出三点的构造函数
24. void setTriangle(CPoint &X,CPoint &Y,CPoint &Z); //输入三角形点的坐标
25. float perimeter(void); //计算三角形的周长
26. float area(void); //计算并返回三角形的面积
27. bool isRightTriangle(); //是否为直角三角形
28. bool isIsoscelesTriangle(); //是否为等腰三角形
29.private:
30. CPoint A,B,C; //三顶点
31.};
32.
33.
34.
35.void main()
36.{
37. CPoint c1, c2, c3;
38.
39. c1.input();
40.
41. c2.input();
42.
43. c3.input();
44.
45. CTriangle c(c1, c1, c1);
46.
47. c.setTriangle(c1, c2, c3);
48.
49. cout << "三角形的周长是:" << c.perimeter() << endl;
50.
51. cout << "三角形的面积是:" << c.area() << endl;
52.
53. cout << (c.isRightTriangle()?"是":"不是") << "直角三角形" <<endl;
54.
55. cout << (c.isIsoscelesTriangle()?"是":"不是") << "等腰三角形" <<endl;
56.
57. system("pause");
58.}
59.
60.float CPoint::Distance(CPoint p) const
61.{
62. return sqrt((p.x - x) * (p.x - x) + (p.y - y) * (p.y - y));
63.}
64.
65.void CPoint::input() //以x,y 形式输入坐标点
66.{
67. char comma;
68. cout << "请输入点坐标,格式: x,y" << endl;
69.
70. while(1)
71. {
72. cin >> x >> comma >> y ;
73. if(comma != ',')
74. {
75. cout << "格式不正确,请重新输入:" << endl;
76. }
77. else
78. {
79. break;
80. }
81. }
82.}
83.
84.void CTriangle::setTriangle(CPoint &X, CPoint &Y, CPoint &Z)
85.{
86. float s1 = X.Distance(Y);
87.
88. float s2 = Y.Distance(Z);
89.
90. float s3 = X.Distance(Z);
91.
92. if(s1 + s2 > s3 && s2 + s3 > s1 && s1 + s3 > s2)
93. {
94. A = X;
95.
96. B = Y;
97.
98. C = Z;
99. }
100.
101. else
102. {
103. cout << "不能构成三角形,退出!" << endl;
104. exit(1);
105. }
106.
107.}
108.
109.float CTriangle::perimeter(void)
110.{
111. return (A.Distance(B) + B.Distance(C) + A.Distance(C));
112.}
113.
114.float CTriangle::area(void)
115.{
116. float a = A.Distance(B);
117.
118. float b = B.Distance(C);
119.
120. float c = A.Distance(C);
121.
122. float p = (a + b + c) / 2;
123.
124. return sqrt( p * (p - a) * (p - b) * (p - c) );
125.}
126.
127.bool CTriangle::isRightTriangle()
128.{
129. float a = A.Distance(B);
130.
131. float b = B.Distance(C);
132.
133. float c = A.Distance(C);
134.
135. if(a * a + b * b == c * c || a * a + c * c == b * b || c * c + b * b == a * a)
136. {
137. return true;
138. }
139.
140. else
141. {
142. return false;
143. }
144.}
145.
146.bool CTriangle::isIsoscelesTriangle()
147.{
148. float a = A.Distance(B);
149.
150. float b = B.Distance(C);
151.
152. float c = A.Distance(C);
153.
154. if(a == b || b == c || a == c)
155. {
156. return true;
157. }
158.
159. else
160. {
161. return false;
162. }
163.}