编写C++代码,实现如下功能:
1) 在平面中初始化三个点时,实现判断三个点是否能构造三角形功能;
2) 实现计算三角形面积功能,若无法构造为三角形则该“三角形”面积为 0;
3) 实现平面中比较两个三角形面积大小功能;
4) 实现求多个三角形中最小面积的功能。
注:使用所学相关知识解决,如构造函数、析构函数、重载和友元等
#include <iostream>
#include <cmath>
using namespace std;
//点坐标
class Point {
private:
double x;
double y;
public:
Point(double xVal, double yVal) {
x = xVal;//横坐标
y = yVal;//纵坐标
}
double getX() const {
return x;
}
double getY() const {
return y;
}
};
class Triangle {
private:
Point p1;
Point p2;
Point p3;
public:
Triangle(const Point& point1, const Point& point2, const Point& point3) : p1(point1), p2(point2), p3(point3) {}
//判断这三个点能否构成三角形(面积>0)
bool isValid() const {
double area = 0.5 * abs((p1.getX() - p3.getX()) * (p2.getY() - p3.getY()) - (p2.getX() - p3.getX()) * (p1.getY() - p3.getY()));
if (area > 0)
return 1;
else
return 0;
}
//计算三角形面积(如果无法构成三角形,面积为0)
double getArea() const {
if (!isValid()) {
return 0;
}
return 0.5 * abs((p1.getX() - p3.getX()) * (p2.getY() - p3.getY()) - (p2.getX() - p3.getX()) * (p1.getY() - p3.getY()));
}
//比较两个三角形的面积大小
friend bool operator<(const Triangle& t1, const Triangle& t2) {
return t1.getArea() < t2.getArea();
}
};
//求多个三角形中的最小面积
double findMinimumArea(const Triangle* triangles[], int numTriangles) {
double minArea = triangles[0]->getArea();
for (int i = 1; i < numTriangles; i++) {
double area = triangles[i]->getArea();
if (area < minArea) {
minArea = area;
}
}
return minArea;
}
int main() {
//给出第一个三角形的顶点坐标
Point point1(0, 0);
Point point2(3, 0);
Point point3(0, 4);
Triangle triangle(point1, point2, point3);
//判断能否构成三角形
if (triangle.isValid()) {
cout << "The three points can form a triangle." << endl;
}
else {
cout << "The three points can not form a triangle." << endl;
}
//计算三角形面积
double area = triangle.getArea();
cout << "The area of the triangle is: " << area << endl;
//给出第二个三角形的顶点坐标
Point point4(0, 0);
Point point5(2, 0);
Point point6(0, 3);
Triangle triangle2(point4, point5, point6);
//比较两个三角形的面积大小
if (triangle < triangle2) {
cout << "第一个三角形的面积小于第二个三角形的面积" << endl;
}
else {
cout << "第一个三角形的面积大于或者等于第二个三角形的面积" << endl;
}
//求多个三角形中的最小面积(5个)
Triangle triangle3(point1, point2, point3);
Triangle triangle4(point4, point5, point6);
Triangle triangle5(point1, point2, point6);
const Triangle* triangles[] = { &triangle, &triangle2, &triangle3, &triangle4, &triangle5 };
int numTriangles = sizeof(triangles) / sizeof(triangles[0]);//三角形数量
double minArea = findMinimumArea(triangles, numTriangles);
cout << "这" << numTriangles<<"个三角形中最小面积为:" << minArea << endl;
return 0;
}