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

与えられた4つのポイントが正方形を形成するかどうかを確認します


2次元平面では、4つの点が与えられます。このアルゴリズムは、4つのポイントが正方形を形成しているかどうかをチェックします。

正方形をチェックするには、これらの条件を一致させる必要があります-

  • 与えられた点によって形成される4つの辺はすべて同じです。
  • 接続する2つの側面はすべて直角です。

入力と出力

Input:
Four points {(20, 10), (10, 20), (20, 20), (10, 10)}
Output:
Points are forming a square.

アルゴリズム

isFormingSquare(p1, p2, p3, p4)

この手順では、メソッドsquareDist(p1、p2)を使用し、指定された2つのポイントの距離の2乗を返します。

入力: 4つのポイント。

出力: 与えられた点が正方形を形成しているときに真。

Begin
   dist12 := squareDist(p1, p2)
   dist13 := squareDist(p1, p3)
   dist14 := squareDist(p1, p4)

   if dist12 = dist13 and 2*dist12 = dist14, then
      dist := squareDist(p2, p4)
      return true when dist = squareDist(p3, p4) and dist = dist12
   if dist13 = dist14 and 2*dist13 = dist12, then
      dist := squareDist(p2, p3)
      return true when dist = squareDist(p2, p4) and dist = dist13
   if dist12 = dist14 and 2*dist12 = dist13, then
      dist := squareDist(p2, p3)
      return true when dist = squareDist(p3, p4) and dist = dist12
   return false
End

#include<iostream>
using namespace std;

struct Point {
   int x, y;
};

int squareDist(Point p, Point q) {
   return (p.x - q.x)*(p.x - q.x) + (p.y - q.y)*(p.y - q.y);
}

bool isSquare(Point p1, Point p2, Point p3, Point p4) {    //check four points are forming square or not
   int dist12 = squareDist(p1, p2);     // distance from p1 to p2
   int dist13 = squareDist(p1, p3);     // distance from p1 to p3
   int dist14 = squareDist(p1, p4);     // distance from p1 to p4

   //when length of p1-p2 and p1-p3 are same, and square of (p1-p4) = 2*(p1-p2)
   if (dist12 == dist13 && 2*dist12 == dist14) {
      int dist = squareDist(p2, p4);
      return (dist == squareDist(p3, p4) && dist == dist12);
   }

   //same condition for all other combinations
   if (dist13 == dist14 && 2*dist13 == dist12) {
      int dist = squareDist(p2, p3);
      return (dist == squareDist(p2, p4) && dist == dist13);
   }

   if (dist12 == dist14 && 2*dist12 == dist13) {
      int dist = squareDist(p2, p3);
      return (dist == squareDist(p3, p4) && dist == dist12);
  }
  return false;
}

int main() {
   Point p1 = {20, 10}, p2 = {10, 20}, p3 = {20, 20}, p4 = {10, 10};
   if(isSquare(p1, p2, p3, p4))
      cout << "Points are forming a square.";
   else
      cout << "Points are not forming a square";
}

出力

Points are forming a square.

  1. 特定のグラフがツリーであるかどうかを確認します

    この問題では、無向グラフが1つ与えられ、グラフがツリーであるかどうかを確認する必要があります。木の基準を確認するだけで簡単に見つけることができます。ツリーにはサイクルが含まれないため、グラフにサイクルがある場合、それはツリーではありません。 別のアプローチを使用して確認できます。グラフが接続されていて、V-1エッジがある場合は、ツリーである可能性があります。ここで、Vはグラフ内の頂点の数です。 入力と出力 Input: The adjacency matrix. 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 Output: The

  2. Pythonで辺がx軸とy軸に平行な正方形を形成するように4つの点を見つけます

    n組のポイントがあるとします。辺がx軸とy軸に平行な正方形を生成できるように、4つの点を見つける必要があります。そうしないと、「不可能」と返されます。複数の正方形が見つかった場合は、面積が最大の正方形を選択してください。 したがって、入力がn =6のような場合、ポイント=[(2、2)、(5、5)、(4、5)、(5、4)、(2、5)、(5、2)] 、出力は3になり、ポイントは(2、2)(5、2)(2、5)(5、5) これを解決するには、次の手順に従います- my_map:=新しいマップ 0からnの範囲のiの場合、実行 my_map [(points [i、0]、points