Comprobar si un punto dado se encuentra dentro de un rectángulo o no

Dados cuatro puntos de un rectángulo y un punto más P. Escriba una función para verificar si P se encuentra dentro del rectángulo dado o no.
Ejemplos: 
 

Input : R = [(10, 10), (10, -10), 
             (-10, -10), (-10, 10)]
        P = (0, 0)
Output : yes
Illustration : 

Check whether a given point lies inside a rectangle or not

Input : R = [(10, 10), (10, -10),
             (-10, -10), (-10, 10)],
        P = (20, 20)
Output : no
Illustration :
 

Check whether a given point lies inside a rectangle or not

 

Prerrequisito: Compruebe si un punto dado se encuentra dentro de un triángulo o no
. Enfoque: Sean las coordenadas de cuatro esquinas A(x1, y1), B(x2, y2), C(x3, y3) y D(x4, y4). Y las coordenadas del punto P dado sean (x, y)
1) Calcular el área del rectángulo dado, es decir, el área del rectángulo ABCD como área del triángulo ABC+ área del triángulo ACD. 
Área A = [ x1(y2 – y3) + x2(y3 – y1) + x3(y1-y2)]/2 + [ x1(y4 – y3) + x4(y3 – y1) + x3(y1-y4)] /2 
2) Calcula el área del triángulo PAB como A1. 
3) Calcula el área del triángulo PBC como A2. 
4) Calcula el área del triángulo PCD como A3. 
5) Calcula el área del triángulo PAD como A4. 
6) Si P está dentro del triángulo, entonces A1 + A2 + A3 + A4 debe ser igual a A.
 

C++

#include <bits/stdc++.h>
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 rectangle formed by A(x1, y1),
   B(x2, y2), C(x3, y3) and D(x4, y4) */
bool check(int x1, int y1, int x2, int y2, int x3,
             int y3, int x4, int y4, int x, int y)
{
    /* Calculate area of rectangle ABCD */
    float A = area(x1, y1, x2, y2, x3, y3) +
              area(x1, y1, x4, y4, x3, y3);
 
    /* Calculate area of triangle PAB */
    float A1 = area(x, y, x1, y1, x2, y2);
 
    /* Calculate area of triangle PBC */
    float A2 = area(x, y, x2, y2, x3, y3);
 
    /* Calculate area of triangle PCD */
    float A3 = area(x, y, x3, y3, x4, y4);
 
    /* Calculate area of triangle PAD */
    float A4 = area(x, y, x1, y1, x4, y4);
 
    /* Check if sum of A1, A2, A3 and A4
       is same as A */
    return (A == A1 + A2 + A3 + A4);
}
 
/* Driver program to test above function */
int main()
{
    /* Let us check whether the point P(10, 15)
      lies inside the rectangle formed by A(0, 10),
      B(10, 0) C(0, -10) D(-10, 0) */
    if (check(0, 10, 10, 0, 0, -10, -10, 0, 10, 15))
        cout << "yes";
    else
        cout << "no";
    return 0;
}

Java

class GFG
{
    /* A utility function to calculate area of
    triangle formed by (x1, y1), (x2, y2) and
    (x3, y3) */
    static float area(int x1, int y1, int x2,
                        int y2, int x3, int y3)
    {
        return (float)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 rectangle formed by A(x1, y1),
    B(x2, y2), C(x3, y3) and D(x4, y4) */
    static boolean check(int x1, int y1, int x2, int y2,
    int x3, int y3, int x4, int y4, int x, int y)
    {
         
        /* Calculate area of rectangle ABCD */
        float A = area(x1, y1, x2, y2, x3, y3)+
                area(x1, y1, x4, y4, x3, y3);
     
        /* Calculate area of triangle PAB */
        float A1 = area(x, y, x1, y1, x2, y2);
     
        /* Calculate area of triangle PBC */
        float A2 = area(x, y, x2, y2, x3, y3);
     
        /* Calculate area of triangle PCD */
        float A3 = area(x, y, x3, y3, x4, y4);
     
        /* Calculate area of triangle PAD */
        float A4 = area(x, y, x1, y1, x4, y4);
     
        /* Check if sum of A1, A2, A3 and A4
        is same as A */
        return (A == A1 + A2 + A3 + A4);
    }
     
    // Driver code
    public static void main (String[] args)
    {
         
        /* Let us check whether the point P(10, 15)
        lies inside the rectangle formed by A(0, 10),
        B(10, 0) C(0, -10) D(-10, 0) */
        if (check(0, 10, 10, 0, 0, -10, -10, 0, 10, 15))
            System.out.print("yes");
        else
            System.out.print("no");
    }
}
 
// This code is contributed by Anant Agarwal.

Python3

# 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 rectangle
# formed by A(x1, y1), B(x2, y2),
# C(x3, y3) and D(x4, y4)
def check(x1, y1, x2, y2, x3,
          y3, x4, y4, x, y):
               
    # Calculate area of rectangle ABCD
    A = (area(x1, y1, x2, y2, x3, y3) +
         area(x1, y1, x4, y4, x3, y3))
 
    # Calculate area of triangle PAB
    A1 = area(x, y, x1, y1, x2, y2)
 
    # Calculate area of triangle PBC
    A2 = area(x, y, x2, y2, x3, y3)
 
    # Calculate area of triangle PCD
    A3 = area(x, y, x3, y3, x4, y4)
 
    # Calculate area of triangle PAD
    A4 = area(x, y, x1, y1, x4, y4);
 
    # Check if sum of A1, A2, A3
    # and A4 is same as A
    return (A == A1 + A2 + A3 + A4)
 
# Driver Code
if __name__ == '__main__':
     
    # Let us check whether the point
    # P(10, 15) lies inside the
    # rectangle formed by A(0, 10),
    # B(10, 0) C(0, -10) D(-10, 0)
    if (check(0, 10, 10, 0, 0, -10,
                    -10, 0, 10, 15)):
        print("yes")
    else:
        print("no")
 
# This code is contributed by
# Surendra_Gangwar

C#

// C# program to Check whether a given
// point lies inside a rectangle or not
using System;
 
class GFG {
     
    // A utility function to calculate area
    // of triangle formed by (x1, y1),
    // (x2, y2) and (x3, y3)
    static float area(int x1, int y1, int x2,
                      int y2, int x3, int y3)
    {
        return (float)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 rectangle formed by A(x1, y1),
    // B(x2, y2), C(x3, y3) and D(x4, y4)
    static bool check(int x1, int y1, int x2,
                      int y2, int x3, int y3,
                   int x4, int y4, int x, int y)
    {
         
        // Calculate area of rectangle ABCD
        float A = area(x1, y1, x2, y2, x3, y3) +
                  area(x1, y1, x4, y4, x3, y3);
     
        // Calculate area of triangle PAB
        float A1 = area(x, y, x1, y1, x2, y2);
     
        // Calculate area of triangle PBC
        float A2 = area(x, y, x2, y2, x3, y3);
     
        // Calculate area of triangle PCD
        float A3 = area(x, y, x3, y3, x4, y4);
     
        // Calculate area of triangle PAD
        float A4 = area(x, y, x1, y1, x4, y4);
     
        // Check if sum of A1, A2, A3 
        // and A4is same as A
        return (A == A1 + A2 + A3 + A4);
    }
     
    // Driver code
    public static void Main ()
    {
         
        // Let us check whether the point
        // P(10, 15) lies inside the rectangle
        // formed by A(0, 10), B(10, 0),
        // C(0, -10), D(-10, 0)
        if (check(0, 10, 10, 0, 0, -10, -10, 0, 10, 15))
            Console.Write("yes");
        else
            Console.Write("no");
    }
}
 
// This code is contributed by Nitin Mittal.

PHP

<?php
// PHP program to check whether a
// given point lies inside a
// rectangle or not
 
// A utility function to
// calculate area of
// triangle formed by
// (x1, y1), (x2, y2)
// and (x3, y3)
function 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 rectangle
formed by A(x1, y1),
B(x2, y2), C(x3, y3)
and D(x4, y4) */
function check($x1, $y1, $x2, $y2, $x3,
               $y3, $x4, $y4, $x, $y)
{
    // Calculate area of rectangle ABCD
    $A = area($x1, $y1, $x2, $y2, $x3, $y3) +
         area($x1, $y1, $x4, $y4, $x3, $y3);
 
    // Calculate area of triangle PAB
    $A1 = area($x, $y, $x1, $y1, $x2, $y2);
 
    // Calculate area of triangle PBC
    $A2 = area($x, $y, $x2, $y2, $x3, $y3);
 
    // Calculate area of triangle PCD
    $A3 = area($x, $y, $x3, $y3, $x4, $y4);
 
    // Calculate area of triangle PAD
    $A4 = area($x, $y, $x1, $y1, $x4, $y4);
 
    // Check if sum of A1, A2,
    // A3 and A4  is same as A
    return ($A == $A1 + $A2 + $A3 + $A4);
}
 
// Driver Code
 
// Let us check whether
// the point P(10, 15)
// lies inside the rectangle
// formed by A(0, 10),
// B(10, 0) C(0, -10)
// D(-10, 0)
if (check(0, 10, 10, 0, 0, -10,
               -10, 0, 10, 15))
    echo "yes";
     
else
    echo "no";
     
// This code is contributed by vt_m.
?>

Javascript

<script>
 
/* A utility function to calculate area of
triangle formed by (x1, y1), (x2, y2) and
(x3, y3) */
function area(x1, y1, x2, y2,
                            x3, 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 rectangle formed by A(x1, y1),
B(x2, y2), C(x3, y3) and D(x4, y4) */
function check(x1, y1, x2, y2, x3,
            y3, x4, y4, x, y)
{
    /* Calculate area of rectangle ABCD */
    let A = area(x1, y1, x2, y2, x3, y3) +
            area(x1, y1, x4, y4, x3, y3);
 
    /* Calculate area of triangle PAB */
    let A1 = area(x, y, x1, y1, x2, y2);
 
    /* Calculate area of triangle PBC */
    let A2 = area(x, y, x2, y2, x3, y3);
 
    /* Calculate area of triangle PCD */
    let A3 = area(x, y, x3, y3, x4, y4);
 
    /* Calculate area of triangle PAD */
    let A4 = area(x, y, x1, y1, x4, y4);
 
    /* Check if sum of A1, A2, A3 and A4
    is same as A */
    return (A == A1 + A2 + A3 + A4);
}
 
/* Driver program to test above function */
  
    /* Let us check whether the point P(10, 15)
    lies inside the rectangle formed by A(0, 10),
    B(10, 0) C(0, -10) D(-10, 0) */
    if (check(0, 10, 10, 0, 0, -10, -10, 0, 10, 15))
        document.write("yes");
    else
        document.write("no");
         
// This code is contributed by Mayank Tyagi
 
</script>

Producción: 

no

Complejidad del tiempo: O(1)

Espacio Auxiliar: O(1)

Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *