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

特定の点が三角形の内側にあるかどうかを確認します


三角形の3つのポイントが与えられます。点Pが三角形の内側にあるかどうかを確認するために、別の点Pも与えられます。

この問題を解決するために、三角形の点がA、B、Cであると考えてみましょう。三角形の面積Δ𝐴𝐵𝐶=Δ𝐴𝐵𝑃+Δ𝑃𝐵𝐶+Δ𝐴𝑃𝐶の場合、点Pは三角形の内側にあります。

入力と出力

Input:
Points of the triangle {(0, 0), (20, 0), (10, 30)} and point p (10, 15) to check.
Output:
Point is inside the triangle.
>

アルゴリズム

isInside(p1, p2, p3, p)

入力: 三角形の3つのポイント、チェックするポイントp。

出力: 確かに、pが三角形の内側にあるとき。

Begin
   area := area of triangle(p1, p2, p3)
   area1 := area of triangle(p, p2, p3)
   area2 := area of triangle(p1, p, p3)
   area3 := area of triangle(p1, p2, p)
   if area = (area1 + area2 + area3), then
      return true
   else return false
End

#include <iostream>
#include<cmath>
using namespace std;

struct Point {
   int x, y;
};

float triangleArea(Point p1, Point p2, Point p3) {         //find area of triangle formed by p1, p2 and p3
   return abs((p1.x*(p2.y-p3.y) + p2.x*(p3.y-p1.y)+ p3.x*(p1.yp2.y))/2.0);
}

bool isInside(Point p1, Point p2, Point p3, Point p) {     //check whether p is inside or outside
   float area = triangleArea (p1, p2, p3);          //area of triangle ABC
   float area1 = triangleArea (p, p2, p3);         //area of PBC
   float area2 = triangleArea (p1, p, p3);         //area of APC
   float area3 = triangleArea (p1, p2, p);        //area of ABP

   return (area == area1 + area2 + area3);        //when three triangles are forming the whole triangle
}
 
int main() {
   Point p1={0, 0}, p2={20, 0}, p3={10, 30};
   Point p = {10, 15};
   if (isInside(p1, p2, p3, p))
      cout << "Point is inside the triangle.";
   else
      cout << "Point is not inside the triangle";
}

出力

Point is inside the triangle.

  1. 与えられたポリゴンの内側または境界にある与えられた点をチェックするか、Pythonではないかをチェックするプログラム

    ポリゴンを表すデカルト点[(x1、y1)、(x2、y2)、...、(xn、yn)]のリストがあり、xとyの2つの値があるとします。 (x、y)がこのポリゴンの内側にあるのか、境界上にあるのかを確認してください。 したがって、入力がpoints =[(0、0)、(1、3)、(4、4)、(6、2)、(4、0)] pt =(3、1) その場合、出力はTrueになります これを解決するには、次の手順に従います- ans:=False 0からポリゴンのサイズ-1までの範囲のiの場合、実行します (x0、y0):=ポリゴン[i] (x1、y1):=ポリゴン[(i + 1)ポリゴンのm

  2. 与えられたグラフがPythonで2部グラフであるかどうかをチェックするプログラム

    無向グラフが1つあるとすると、グラフが2部グラフであるかどうかを確認する必要があります。グラフのすべてのエッジ{u、v}がAに1つのノードuを持ち、Bに別のノードvを持つように、グラフのノードを2つのセットAとBに分割できる場合、グラフは2部グラフであることがわかります。 したがって、入力が次のような場合 次に、出力はTrueになり、[0,4]はセットAにあり、[1,2,3]はセットBにあり、すべてのエッジはAからAまたはBからBではなく、AからBまたはBからAになります。 。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはソースを取ります