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となるため、与えられた三角形は等価図形ではないと判定されます。
-
Microsoft Wordで描画する方法|基本の図形からペンツールまで徹底解説
Microsoft Wordはドキュメント作成ソフトというイメージが強いですが、実は描画ツールも充実しています。これらの機能はあまり知られていませんが、覚えてしまえば直感的に使える便利なものばかりです。 Wordに搭載された描画ツールには、矢印、バナー、吹き出し、四角形、円、星形、フローチャート用の図形など、さまざまな種類があります。これらを組み合わせれば、ドキュメント内でイラストや図解を自由に作成できます。 「文書にぴったりの画像やクリップアートが見つからない」というときも、Wordの描画ツールを使えば自分で描いて追加できます。落書きのようなメモ、ビジュアルノート、スケッチノートなど、用途に
-
Windowsで使えるC++開発向けおすすめIDE 7選
```html 大規模なプロジェクトをプレーンなテキストエディターだけで管理するのは困難です。こうしたケースではIDE(統合開発環境)を使った方が、生産性が向上しストレスも大幅に軽減されます。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。ここでは、Windowsで利用できる優れたC/C++向けIDEをご紹介します。 1. Visual Studio Microsoftが開発した定番IDEです。Windows上でのC++プログラムの構築・開発・プロファイリングにおいて、最高クラスのツール群を備えています。豊富なプラグインストアも魅力で、Azure、PowerShe