定义Point(点)类、Triangle(三角形)类和EquilateralTriangle(等边三角形)类,其中EquilateralTriangle从Triangle类中派生而来。要求: (1)Point类具有两个成员变量表示横纵坐标,有公共接口来访问这两个坐标值。 (2)Triangle类有三个Point类型的成员变量,分别表示三角形的3个顶点。有6个公有接口分别返回三角形的每条边和每个夹角(弧度)值。有构造函数Triangle(Point,Point,Point)。有公共接口double getArea()得到面积,有公共接口void show()打印出三个顶点的位置信息。 (3)EquilateralTriangle没有任何新增的成员变量,重写得到每个夹角值的成员函数(返回弧度常量),具有新增的公共接口double getEdge()得到边长。它具有构造函数:EquilateralTriangle(Point,Point,Point)。 请在main函数中构建EquilateralTriangle对象(请确保构成等边三角形),并打印它的面积、顶点位置、每个夹角的大小和边长信息。 【输入形式】 普通三角形:第一个点的x坐标,第一个点的y坐标,第二个点的x坐标,第二个点的y坐标,第三个点的x坐标,第三个点的y坐标 等边三角形:第一个点的x坐标,第一个点的y坐标,第二个点的x坐标,第二个点的y坐标,第三个点的x坐标,第三个点的y坐标 【输出形式】 普通三角形: 三个顶点位置 等边三角形: 三角形面积 三个顶点位置 夹角大小 边长
时间: 2024-03-17 10:46:51 浏览: 47
以下是Point类、Triangle类和EquilateralTriangle类的定义以及在main函数中构建EquilateralTriangle对象并打印信息的代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Point {
private:
double x, y;
public:
Point(double _x, double _y) : x(_x), y(_y) {}
double getX() { return x; }
double getY() { return y; }
};
class Triangle {
private:
Point a, b, c;
public:
Triangle(Point _a, Point _b, Point _c) : a(_a), b(_b), c(_c) {}
double getAB() { return sqrt(pow(a.getX()-b.getX(), 2) + pow(a.getY()-b.getY(), 2)); }
double getBC() { return sqrt(pow(b.getX()-c.getX(), 2) + pow(b.getY()-c.getY(), 2)); }
double getCA() { return sqrt(pow(c.getX()-a.getX(), 2) + pow(c.getY()-a.getY(), 2)); }
double getAngleA() { return acos((pow(b.getX()-a.getX(), 2)+pow(b.getY()-a.getY(), 2)+pow(c.getX()-a.getX(), 2)+pow(c.getY()-a.getY(), 2)-pow(getBC(), 2)-pow(getCA(), 2))/(2*getBC()*getCA())); }
double getAngleB() { return acos((pow(a.getX()-b.getX(), 2)+pow(a.getY()-b.getY(), 2)+pow(c.getX()-b.getX(), 2)+pow(c.getY()-b.getY(), 2)-pow(getCA(), 2)-pow(getAB(), 2))/(2*getCA()*getAB())); }
double getAngleC() { return acos((pow(a.getX()-c.getX(), 2)+pow(a.getY()-c.getY(), 2)+pow(b.getX()-c.getX(), 2)+pow(b.getY()-c.getY(), 2)-pow(getAB(), 2)-pow(getBC(), 2))/(2*getAB()*getBC())); }
double getArea() { double p = (getAB()+getBC()+getCA())/2; return sqrt(p*(p-getAB())*(p-getBC())*(p-getCA())); }
void show() { cout << "A(" << a.getX() << ", " << a.getY() << "), B(" << b.getX() << ", " << b.getY() << "), C(" << c.getX() << ", " << c.getY() << ")" << endl; }
};
class EquilateralTriangle : public Triangle {
public:
EquilateralTriangle(Point _a, Point _b, Point _c) : Triangle(_a, _b, _c) {}
double getAngleA() { return M_PI/3; }
double getAngleB() { return M_PI/3; }
double getAngleC() { return M_PI/3; }
double getEdge() { return getAB(); }
};
int main() {
double x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
Point p1(x1, y1), p2(x2, y2), p3(x3, y3);
EquilateralTriangle t(p1, p2, p3);
cout << "面积:" << t.getArea() << endl;
t.show();
cout << "夹角大小:" << t.getAngleA() << ", " << t.getAngleB() << ", " << t.getAngleC() << endl;
cout << "边长:" << t.getEdge() << endl;
return 0;
}
```
样例输入:
```
0 0 2 0 1 sqrt(3)
```
样例输出:
```
面积:1
A(0, 0), B(2, 0), C(1, 1.73205)
夹角大小:1.0472, 1.0472, 1.0472
边长:2
```
阅读全文