私の課題について非常に奇妙な質問があり、それを正確に理解する方法を考えていました.
質問は尋ねます:
シェイプの基礎となる基本クラス Shape を作成します。Shape クラスには、形状の面積と円周を計算する関数が含まれ、形状を囲む四角形 (境界ボックス) の座標 (ポイント) が提供されます。これらは、必要に応じて派生クラスによってオーバーロードされます。クラスの名前に加えて、クラスに関するすべての格納された情報 (面積、円周、および境界ボックスを含む) を表示する display() 関数を作成します。
Shape クラス Circle、Square、および Triangle を作成して、階層を構築します。これらの派生クラスに対して、正しい数の Point オブジェクトを使用して形状を適切に初期化できる引数を持つデフォルト コンストラクターとコンストラクターを作成します (つまり、Circle には Point の中心と半径が必要です。Square には 4 つの Point 頂点が必要ですが、Triangle には 3 つの Point 頂点が必要です)。
main()
で、半径 23 の円、辺 25 の正方形、および辺 10、20、30 の三角形のそれぞれ 1 つのインスタンスを作成します。原点 (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 の三角形の周囲にバウンディング ボックスを作成する最良の方法は何ですか。