我的作业有一个非常奇怪的问题,我想知道如何准确地解决这个问题。
问题问:
创建一个基类 Shape ,它将构成您的形状的基础。Shape 类将包含计算形状面积和周长的函数,并提供包围形状(边界框)的矩形的坐标(点)。这些将根据需要由派生类重载。创建一个 display() 函数,该函数将显示类的名称以及有关该类的所有存储信息(包括面积、周长和边界框)。
通过创建 Shape 类 Circle、Square 和 Triangle 来构建层次结构。对于这些派生类,创建默认构造函数和构造函数,其参数可以使用正确数量的 Point 对象适当地初始化形状(即,Circle 需要一个 Point 中心和一个半径;Square 需要四个 Point 顶点,而 Triangle 需要三个 Point 顶点)。
在
main()
中,分别创建一个实例:半径为 23 的圆形、边长为 25 的正方形和边长为 10、20、30 的三角形。定义所有这些实例,使原点 (0,0) 位于某处每个对象内。显示来自每个对象的信息。
所以我需要找出将创建一个边长为 10、20、30 的三角形的点。
输入:
Triangle t(Point(0,0), Point(0,20), Point(0,30));
这是我的三角形代码:
class Triangle : public Shape
{
Point s1, s2, s3;
public:
Triangle() {}
Triangle(const Point &p1, const Point &p2, const Point &p3) : s1(p1), s2(p2), s3(p3) {}
void bbox()
{
std::cout << "Triangle::bounding " << s1 << s2 << s3;
}
void circumference()
{
Point side1 = (s1 - s2);
Point side2 = (s2 - s3);
Point side3 = (s3 - s1);
std::cout << "Triangle::perimeter " << side1.dist() + side2.dist() + side3.dist();
}
void area()
{
Point side1 = (s1 - s2);
Point side2 = (s2 - s3);
Point side3 = (s3 - s1);
double half = (side1.dist() + side2.dist() + side3.dist())/2;
double answer = sqrt(half * (half - side1.dist()) * (half - side2.dist()) * (half - side3.dist()));
std::cout << "Triangle::area " << answer;
}
};
这是输出:
Triangle::bounding (0,0)(0,20)(0,30)
Triangle::perimeter 60
Triangle::area 0
在三角形周围创建一个边长为 10、20、30 或任何三角形的边界框的最佳方法是什么。