C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で図形の周の長さと面積が等しいか(Equable Shape)を判定する方法


この問題では、多角形の各頂点の座標が与えられます。私たちの課題は、与えられた多角形が「イコーエーブルシェイプ(Equable Shape:等価図形)」であるかどうかを判定するプログラムを作成することです。

Equable Shape(等価図形)とは、図形の周囲の長さ(外周)と面積がちょうど等しくなる図形のことを指します。

問題を理解するための例

入力: polygon[][] = {{0, 0}, {5, 7}, {2, 0}}

出力: 等価図形ではない(Not equable)

説明:

周囲の長さ = 18.21
面積 = 7

解決アプローチ

この問題の解き方は非常にシンプルです。まず図形の面積と周囲の長さをそれぞれ求め、その両方を比較することで、与えられた図形が等価図形であるかどうかを確認します。

座標から周囲の長さを求めるのは簡単です。隣り合う頂点同士の距離を計算し、すべての辺の長さを合計するだけです。

周囲の長さ = 辺1 + 辺2 + 辺3

一方、頂点の座標から面積を求めるには、以下の公式(靴ひも公式/Shoelace formulaとして知られています)を使用します。

面積 = 1/2 × |(x₁y₂ + x₂y₃ + … + xₙ₋₁yₙ + xₙy₁) − (x₂y₁ + x₃y₂ + … + xₙyₙ₋₁ + x₁yₙ)|

ソリューションの動作を示すプログラム

サンプルコード

#include <bits/stdc++.h>
using namespace std;

double findShapeArea(double cord[][2], int n)
{
    double area = 0.0;
    int j = n - 1;
    for (int i = 0; i < n; i++) {
        area += (float)(cord[j][0] + cord[i][0]) * (cord[j][1] - cord[i][1]);
        j = i;
    }

    return abs(area / 2.0);
}

double findShapeperimeter(double cord[][2], int n) {

    double perimeter = 0.0;
    int j = n - 1;
    for (int i = 0; i < n; i++) {
        perimeter += sqrt((cord[j][0] - cord[i][0]) * (cord[j][0] - cord[i][0]) + (cord[j][1] - cord[i][1]) * (cord[j][1] - cord[i][1]));
        j = i;
    }
    return perimeter;
}

int isEquableShape(double cord[][2], int n)
{
    int area = findShapeArea(cord, n);
    int peri = findShapeperimeter(cord, n);
    cout<<"The area of the given shape is "<<area<<endl;
    cout<<"The perimeter of the given shape is "<<peri<<endl;
    if (area == peri)
        return 1;
    else
        return 0;
}

int main() {

    int n = 3;
    double cord[n][2] = {{0, 0} , {5, 7}, {2, 0}};
    if (isEquableShape(cord, n))
        cout<<"The given shape is an equable shape";
    else
        cout<<"The given shape is not an equable shape";
    return 0;
}

出力 −

The area of the given shape is 7
The perimeter of the given shape is 18
The given shape is not an equable shape

上記のコードでは、findShapeArea()関数が靴ひも公式を用いて多角形の面積を計算し、findShapeperimeter()関数が三平方の定理(ピタゴラスの定理)に基づいて各辺の長さを求め、その合計として周囲の長さを算出しています。最後にisEquableShape()関数で両者を比較し、結果を出力します。

この例では、面積が7であるのに対して周囲の長さは約18.21となるため、与えられた三角形は等価図形ではないと判定されます。


  1. Microsoft Wordで描画する方法|基本の図形からペンツールまで徹底解説

    Microsoft Wordはドキュメント作成ソフトというイメージが強いですが、実は描画ツールも充実しています。これらの機能はあまり知られていませんが、覚えてしまえば直感的に使える便利なものばかりです。 Wordに搭載された描画ツールには、矢印、バナー、吹き出し、四角形、円、星形、フローチャート用の図形など、さまざまな種類があります。これらを組み合わせれば、ドキュメント内でイラストや図解を自由に作成できます。 「文書にぴったりの画像やクリップアートが見つからない」というときも、Wordの描画ツールを使えば自分で描いて追加できます。落書きのようなメモ、ビジュアルノート、スケッチノートなど、用途に

  2. Windowsで使えるC++開発向けおすすめIDE 7選

    ```html 大規模なプロジェクトをプレーンなテキストエディターだけで管理するのは困難です。こうしたケースではIDE(統合開発環境)を使った方が、生産性が向上しストレスも大幅に軽減されます。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。ここでは、Windowsで利用できる優れたC/C++向けIDEをご紹介します。 1. Visual Studio Microsoftが開発した定番IDEです。Windows上でのC++プログラムの構築・開発・プロファイリングにおいて、最高クラスのツール群を備えています。豊富なプラグインストアも魅力で、Azure、PowerShe