Open In App
Related Articles

# Check whether a given point lies inside a triangle or not

Given three corner points of a triangle, and one more point P. Write a function to check whether P lies within the triangle or not.

Example:

`Input: A = (0, 0), B = (10, 30), C = (20, 0), P(10, 15)Output: InsideExplanation:              B(10,30)                / \               /   \              /     \             /   P   \      P'            /         \     A(0,0) ----------- C(20,0) Input: A = (0, 0), B = (10, 30), C = (20, 0), P(30, 15)Output: OutsideExplanation:              B(10,30)                / \               /   \              /     \             /       \      P            /         \     A(0,0) ----------- C(20,0) `

Solution:
Let the coordinates of the three corners be (x1, y1), (x2, y2), and (x3, y3). And coordinates of the given point P be (x, y)

1. Calculate the area of the given triangle, i.e., the area of the triangle ABC in the above diagram.
Area A = [ x1(y2 – y3) + x2(y3 – y1) + x3(y1-y2)]/2
2. Calculate the area of the triangle PAB. We can use the same formula for this. Let this area be A1.
3. Calculate the area of the triangle PBC. Let this area be A2.
4. Calculate the area of the triangle PAC. Let this area be A3.
5. If P lies inside the triangle, then A1 + A2 + A3 must be equal to A.

## C++

 `#include ``using` `namespace` `std;`` ` `/* A utility function to calculate area of triangle formed by (x1, y1),``   ``(x2, y2) and (x3, y3) */``float` `area(``int` `x1, ``int` `y1, ``int` `x2, ``int` `y2, ``int` `x3, ``int` `y3)``{``   ``return` `abs``((x1*(y2-y3) + x2*(y3-y1)+ x3*(y1-y2))/2.0);``}`` ` `/* A function to check whether point P(x, y) lies inside the triangle formed``   ``by A(x1, y1), B(x2, y2) and C(x3, y3) */``bool` `isInside(``int` `x1, ``int` `y1, ``int` `x2, ``int` `y2, ``int` `x3, ``int` `y3, ``int` `x, ``int` `y)``{  ``   ``/* Calculate area of triangle ABC */``   ``float` `A = area (x1, y1, x2, y2, x3, y3);`` ` `   ``/* Calculate area of triangle PBC */` `   ``float` `A1 = area (x, y, x2, y2, x3, y3);`` ` `   ``/* Calculate area of triangle PAC */` `   ``float` `A2 = area (x1, y1, x, y, x3, y3);`` ` `   ``/* Calculate area of triangle PAB */`  `   ``float` `A3 = area (x1, y1, x2, y2, x, y);``   ` `   ``/* Check if sum of A1, A2 and A3 is same as A */``   ``return` `(A == A1 + A2 + A3);``}`` ` `/* Driver program to test above function */``int` `main()``{``   ``/* Let us check whether the point P(10, 15) lies inside the triangle``      ``formed by A(0, 0), B(20, 0) and C(10, 30) */``   ``if` `(isInside(0, 0, 20, 0, 10, 30, 10, 15))``     ``cout <<``"Inside"``;``   ``else``     ``cout <<``"Not Inside"``;`` ` `   ``return` `0;``}` `// this code is contributed by shivanisinghss2110`

## C

 `#include ``#include ``#include ``#include ``/* A utility function to calculate area of triangle formed by (x1, y1),``   ``(x2, y2) and (x3, y3) */``float` `area(``int` `x1, ``int` `y1, ``int` `x2, ``int` `y2, ``int` `x3, ``int` `y3)``{``   ``return` `abs``((x1*(y2-y3) + x2*(y3-y1)+ x3*(y1-y2))/2.0);``}`` ` `/* A function to check whether point P(x, y) lies inside the triangle formed``   ``by A(x1, y1), B(x2, y2) and C(x3, y3) */``bool` `isInside(``int` `x1, ``int` `y1, ``int` `x2, ``int` `y2, ``int` `x3, ``int` `y3, ``int` `x, ``int` `y)``{  ``   ``/* Calculate area of triangle ABC */``   ``float` `A = area (x1, y1, x2, y2, x3, y3);`` ` `   ``/* Calculate area of triangle PBC */` `   ``float` `A1 = area (x, y, x2, y2, x3, y3);`` ` `   ``/* Calculate area of triangle PAC */` `   ``float` `A2 = area (x1, y1, x, y, x3, y3);`` ` `   ``/* Calculate area of triangle PAB */`  `   ``float` `A3 = area (x1, y1, x2, y2, x, y);``   ` `   ``/* Check if sum of A1, A2 and A3 is same as A */``   ``return` `(A == A1 + A2 + A3);``}`` ` `/* Driver program to test above function */``int` `main()``{``   ``/* Let us check whether the point P(10, 15) lies inside the triangle``      ``formed by A(0, 0), B(20, 0) and C(10, 30) */``   ``if` `(isInside(0, 0, 20, 0, 10, 30, 10, 15))``     ``printf` `(``"Inside"``);``   ``else``     ``printf` `(``"Not Inside"``);`` ` `   ``return` `0;``}`

## Java

 `// JAVA Code for Check whether a given point``// lies inside a triangle or not``import` `java.util.*;` `class` `GFG {``    ` `    ``/* A utility function to calculate area of triangle``       ``formed by (x1, y1) (x2, y2) and (x3, y3) */``    ``static` `double` `area(``int` `x1, ``int` `y1, ``int` `x2, ``int` `y2,``                                        ``int` `x3, ``int` `y3)``    ``{``       ``return` `Math.abs((x1*(y2-y3) + x2*(y3-y1)+``                                    ``x3*(y1-y2))/``2.0``);``    ``}``     ` `    ``/* A function to check whether point P(x, y) lies``       ``inside the triangle formed by A(x1, y1),``       ``B(x2, y2) and C(x3, y3) */``    ``static` `boolean` `isInside(``int` `x1, ``int` `y1, ``int` `x2,``                ``int` `y2, ``int` `x3, ``int` `y3, ``int` `x, ``int` `y)``    ``{  ``       ``/* Calculate area of triangle ABC */``        ``double` `A = area (x1, y1, x2, y2, x3, y3);``     ` `       ``/* Calculate area of triangle PBC */` `        ``double` `A1 = area (x, y, x2, y2, x3, y3);``     ` `       ``/* Calculate area of triangle PAC */` `        ``double` `A2 = area (x1, y1, x, y, x3, y3);``     ` `       ``/* Calculate area of triangle PAB */`  `        ``double` `A3 = area (x1, y1, x2, y2, x, y);``       ` `       ``/* Check if sum of A1, A2 and A3 is same as A */``        ``return` `(A == A1 + A2 + A3);``    ``}``    ` `    ``/* Driver program to test above function */``    ``public` `static` `void` `main(String[] args)``    ``{``        ``/* Let us check whether the point P(10, 15)``           ``lies inside the triangle formed by``           ``A(0, 0), B(20, 0) and C(10, 30) */``       ``if` `(isInside(``0``, ``0``, ``20``, ``0``, ``10``, ``30``, ``10``, ``15``))``           ``System.out.println(``"Inside"``);``       ``else``           ``System.out.println(``"Not Inside"``);``            ` `    ``}``}` `// This code is contributed by Arnav Kr. Mandal.`

## Python

 `# A utility function to calculate area``# of triangle formed by (x1, y1),``# (x2, y2) and (x3, y3)` `def` `area(x1, y1, x2, y2, x3, y3):` `    ``return` `abs``((x1 ``*` `(y2 ``-` `y3) ``+` `x2 ``*` `(y3 ``-` `y1)``                ``+` `x3 ``*` `(y1 ``-` `y2)) ``/` `2.0``)`  `# A function to check whether point P(x, y)``# lies inside the triangle formed by``# A(x1, y1), B(x2, y2) and C(x3, y3)``def` `isInside(x1, y1, x2, y2, x3, y3, x, y):` `    ``# Calculate area of triangle ABC``    ``A ``=` `area (x1, y1, x2, y2, x3, y3)` `    ``# Calculate area of triangle PBC``    ``A1 ``=` `area (x, y, x2, y2, x3, y3)``    ` `    ``# Calculate area of triangle PAC``    ``A2 ``=` `area (x1, y1, x, y, x3, y3)``    ` `    ``# Calculate area of triangle PAB``    ``A3 ``=` `area (x1, y1, x2, y2, x, y)``    ` `    ``# Check if sum of A1, A2 and A3``    ``# is same as A``    ``if``(A ``=``=` `A1 ``+` `A2 ``+` `A3):``        ``return` `True``    ``else``:``        ``return` `False` `# Driver program to test above function``# Let us check whether the point P(10, 15)``# lies inside the triangle formed by``# A(0, 0), B(20, 0) and C(10, 30)``if` `(isInside(``0``, ``0``, ``20``, ``0``, ``10``, ``30``, ``10``, ``15``)):``    ``print``(``'Inside'``)``else``:``    ``print``(``'Not Inside'``)` `# This code is contributed by Danish Raza`

## C#

 `// C# Code to Check whether a given point``// lies inside a triangle or not``using` `System;` `class` `GFG {` `    ``/* A utility function to calculate area of triangle``    ``formed by (x1, y1) (x2, y2) and (x3, y3) */``    ``static` `double` `area(``int` `x1, ``int` `y1, ``int` `x2,``                       ``int` `y2, ``int` `x3, ``int` `y3)``    ``{``        ``return` `Math.Abs((x1 * (y2 - y3) +``                         ``x2 * (y3 - y1) +``                         ``x3 * (y1 - y2)) / 2.0);``    ``}` `    ``/* A function to check whether point P(x, y) lies``    ``inside the triangle formed by A(x1, y1),``    ``B(x2, y2) and C(x3, y3) */``    ``static` `bool` `isInside(``int` `x1, ``int` `y1, ``int` `x2,``                         ``int` `y2, ``int` `x3, ``int` `y3,``                         ``int` `x, ``int` `y)``    ``{``        ``/* Calculate area of triangle ABC */``        ``double` `A = area(x1, y1, x2, y2, x3, y3);` `        ``/* Calculate area of triangle PBC */``        ``double` `A1 = area(x, y, x2, y2, x3, y3);` `        ``/* Calculate area of triangle PAC */``        ``double` `A2 = area(x1, y1, x, y, x3, y3);` `        ``/* Calculate area of triangle PAB */``        ``double` `A3 = area(x1, y1, x2, y2, x, y);` `        ``/* Check if sum of A1, A2 and A3 is same as A */``        ``return` `(A == A1 + A2 + A3);``    ``}` `/* Driver program to test above function */``public` `static` `void` `Main()``{``    ``/* Let us check whether the point P(10, 15)``    ``lies inside the triangle formed by``    ``A(0, 0), B(20, 0) and C(10, 30) */``    ``if` `(isInside(0, 0, 20, 0, 10, 30, 10, 15))``        ``Console.WriteLine(``"Inside"``);``    ``else``        ``Console.WriteLine(``"Not Inside"``);``}``}` `// This code is contributed by vt_m.`

## Javascript

 ``

## PHP

 ``

Output

```Inside

```

Time Complexity: O(1)
Auxiliary Space: O(1)

Exercise: Given coordinates of four corners of a rectangle, and a point P. Write a function to check whether P lies inside the given rectangle or not.

Another Approach – Using Barycentric Coordinate Method: Below is the algorithm to check if a point P lies inside a triangle ABC using the Barycentric Coordinate Method:

• Define a function “isInsideTriangle” that takes four input parameters: A, B, C, and P.
• Calculate the barycentric coordinates of point P with respect to the triangle ABC. To do this, we first need to calculate the area of the triangle ABC. We can use the cross product to find the area of the triangle ABC as:

Area(ABC) = 0.5 * ||AB x AC||, where ||AB x AC|| is the magnitude of the cross product of vectors AB and AC.

• Then, we can calculate the barycentric coordinates of point P as:
1. a = 0.5 * ||PB x PC|| / Area(ABC)
2. b = 0.5 * ||PC x PA|| / Area(ABC)
3. c = 0.5 * ||PA x PB|| / Area(ABC), where PB, PC, and PA are vectors from point P to vertices B, C, and A, respectively.
• If all three barycentric coordinates are non-negative, then the point P lies inside the triangle ABC. Return “Inside”. Otherwise, point P lies outside the triangle ABC. Return “Outside”.

Below is the implementation of the above approach:

## C++

 `// c++ code addition` `#include``#include``using` `namespace` `std;` `// Function to check if the point is inside``// the triangle or not``string isInsideTriangle(vector<``int``> A, vector<``int``> B, vector<``int``> C, vector<``int``> P) {``    ``// Calculate the barycentric coordinates``    ``// of point P with respect to triangle ABC``    ``double` `denominator = ((B - C) * (A - C) + (C - B) * (A - C));``    ``double` `a = ((B - C) * (P - C) + (C - B) * (P - C)) / denominator;``    ``double` `b = ((C - A) * (P - C) + (A - C) * (P - C)) / denominator;``    ``double` `c = 1 - a - b;` `    ``// Check if all barycentric coordinates``    ``// are non-negative``    ``if` `(a >= 0 && b >= 0 && c >= 0) {``        ``return` `"Inside"``;``    ``} ``else` `{``        ``return` `"Outside"``;``    ``}``}` `// Driver Code``int` `main() {``    ``vector<``int``> A = {0, 0};``    ``vector<``int``> B = {10, 30};``    ``vector<``int``> C = {20, 0};``    ``vector<``int``> P = {10, 15};` `    ``// Call the isInsideTriangle function with``    ``// the given inputs``    ``string result = isInsideTriangle(A, B, C, P);` `    ``// Print the result``    ``cout << result << endl;``    ``return` `0;``}` `// The code is contributed by Arushi Goel.`

## Java

 `import` `java.awt.Point;` `class` `Main``{` `  ``// Function to check if the point is inside``  ``// the triangle or not``  ``public` `static` `String isInsideTriangle(Point A, Point B, Point C, Point P)``  ``{` `    ``// Calculate the barycentric coordinates``    ``// of point P with respect to triangle ABC``    ``double` `denominator = ((B.y - C.y) * (A.x - C.x) +``                          ``(C.x - B.x) * (A.y - C.y));``    ``double` `a = ((B.y - C.y) * (P.x - C.x) +``                ``(C.x - B.x) * (P.y - C.y)) / denominator;``    ``double` `b = ((C.y - A.y) * (P.x - C.x) +``                ``(A.x - C.x) * (P.y - C.y)) / denominator;``    ``double` `c = ``1` `- a - b;` `    ``// Check if all barycentric coordinates``    ``// are non-negative``    ``if` `(a >= ``0` `&& b >= ``0` `&& c >= ``0``) {``      ``return` `"Inside"``;``    ``} ``else` `{``      ``return` `"Outside"``;``    ``}``  ``}` `  ``public` `static` `void` `main(String[] args) {``    ``Point A = ``new` `Point(``0``, ``0``);``    ``Point B = ``new` `Point(``10``, ``30``);``    ``Point C = ``new` `Point(``20``, ``0``);``    ``Point P = ``new` `Point(``10``, ``15``);` `    ``// Call the isInsideTriangle function with``    ``// the given inputs``    ``String result = isInsideTriangle(A, B, C, P);` `    ``// Print the result``    ``System.out.println(result);``  ``}``}`

## Python3

 `# Python program for the above approach` `# Function to check if the point is inside``# the triangle or not``def` `isInsideTriangle(A, B, C, P):` `    ``# Calculate the barycentric coordinates``    ``# of point P with respect to triangle ABC``    ``denominator ``=` `((B[``1``] ``-` `C[``1``]) ``*` `(A[``0``] ``-` `C[``0``]) ``+``                   ``(C[``0``] ``-` `B[``0``]) ``*` `(A[``1``] ``-` `C[``1``]))``    ``a ``=` `((B[``1``] ``-` `C[``1``]) ``*` `(P[``0``] ``-` `C[``0``]) ``+``         ``(C[``0``] ``-` `B[``0``]) ``*` `(P[``1``] ``-` `C[``1``])) ``/` `denominator``    ``b ``=` `((C[``1``] ``-` `A[``1``]) ``*` `(P[``0``] ``-` `C[``0``]) ``+``         ``(A[``0``] ``-` `C[``0``]) ``*` `(P[``1``] ``-` `C[``1``])) ``/` `denominator``    ``c ``=` `1` `-` `a ``-` `b` `    ``# Check if all barycentric coordinates``    ``# are non-negative``    ``if` `a >``=` `0` `and` `b >``=` `0` `and` `c >``=` `0``:``        ``return` `"Inside"``    ``else``:``        ``return` `"Outside"`  `# Driver Code``A ``=` `(``0``, ``0``)``B ``=` `(``10``, ``30``)``C ``=` `(``20``, ``0``)``P ``=` `(``10``, ``15``)` `# Call the isInsideTriangle function with``# the given inputs``result ``=` `isInsideTriangle(A, B, C, P)` `# Print the result``print``(result)`

## C#

 `using` `System;` `public` `class` `PointInsideTriangle``{``    ``// Function to check if the point is inside``    ``// the triangle or not``    ``public` `static` `string` `IsInsideTriangle(``int``[] A, ``int``[] B, ``int``[] C, ``int``[] P)``    ``{``        ``// Calculate the barycentric coordinates``        ``// of point P with respect to triangle ABC``        ``double` `denominator = ((B - C) * (A - C) + (C - B) * (A - C));``        ``double` `a = ((B - C) * (P - C) + (C - B) * (P - C)) / denominator;``        ``double` `b = ((C - A) * (P - C) + (A - C) * (P - C)) / denominator;``        ``double` `c = 1 - a - b;` `        ``// Check if all barycentric coordinates``        ``// are non-negative``        ``if` `(a >= 0 && b >= 0 && c >= 0)``        ``{``            ``return` `"Inside"``;``        ``}``        ``else``        ``{``            ``return` `"Outside"``;``        ``}``    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main(``string``[] args)``    ``{``        ``int``[] A = { 0, 0 };``        ``int``[] B = { 10, 30 };``        ``int``[] C = { 20, 0 };``        ``int``[] P = { 10, 15 };` `        ``// Call the IsInsideTriangle function with``        ``// the given inputs``        ``string` `result = IsInsideTriangle(A, B, C, P);` `        ``// Print the result``        ``Console.WriteLine(result);``    ``}``}`

## Javascript

 `// JavaScript program for the above approach` `// Function to check if the point is inside``// the triangle or not``function` `isInsideTriangle(A, B, C, P) {``// Calculate the barycentric coordinates``// of point P with respect to triangle ABC``let denominator = ((B - C) * (A - C) +``               ``(C - B) * (A - C));``let a = ((B - C) * (P - C) +``     ``(C - B) * (P - C)) / denominator;``let b = ((C - A) * (P - C) +``     ``(A - C) * (P - C)) / denominator;``let c = 1 - a - b;` `// Check if all barycentric coordinates``// are non-negative``if` `(a >= 0 && b >= 0 && c >= 0) {``    ``return` `"Inside"``;``} ``else` `{``    ``return` `"Outside"``;``}``}` `// Driver Code``let A = [0, 0];``let B = [10, 30];``let C = [20, 0];``let P = [10, 15];` `// Call the isInsideTriangle function with``// the given inputs``let result = isInsideTriangle(A, B, C, P);` `// Print the result``console.log(result);`

Output

```Inside

```

Time Complexity: O(1)
Auxiliary Space: O(1)