Рубрики

Проверьте, находится ли данная точка внутри треугольника или нет

Даны три угловые точки треугольника и еще одна точка P. Напишите функцию, чтобы проверить, находится ли P внутри треугольника или нет.

Например, рассмотрим следующую программу, функция должна возвращать true для P (10, 15) и false для P '(30, 15)

              B(10,30)
                / \
               /   \
              /     \
             /   P   \      P'
            /         \
     A(0,0) ----------- C(20,0) 

Решение:
Пусть координаты трех углов равны (x1, y1), (x2, y2) и (x3, y3). И координаты заданной точки P будут (х, у)

1) Рассчитать площадь данного треугольника, т. Е. Площадь треугольника ABC на приведенной выше диаграмме. Площадь A = [x1 (y2 — y3) + x2 (y3 — y1) + x3 (y1-y2)] / 2
2) Рассчитать площадь треугольника PAB. Мы можем использовать ту же формулу для этого. Пусть эта область будет A1.
3) Рассчитать площадь треугольника PBC. Пусть эта область будет A2.
4) Рассчитать площадь треугольника PAC. Пусть эта область будет A3.
5) Если P лежит внутри треугольника, то A1 + A2 + A3 должно быть равно A.

C ++

#include <bits/stdc++.h>

using namespace std;

  
/ * Функция полезности для вычисления площади треугольника, образованного (x1, y1),

   (x2, y2) и (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);

}

  
/ * Функция для проверки, находится ли точка P (x, y) внутри образованного треугольника.

   A (x1, y1), B (x2, y2) и C (x3, y3) * / 

bool isInside(int x1, int y1, int x2, int y2, int x3, int y3, int x, int y)

{   

   / * Рассчитать площадь треугольника ABC * /

   float A = area (x1, y1, x2, y2, x3, y3);

  

   / * Рассчитать площадь треугольника PBC * /   

   float A1 = area (x, y, x2, y2, x3, y3);

  

   / * Рассчитать площадь треугольника PAC * /   

   float A2 = area (x1, y1, x, y, x3, y3);

  

   / * Рассчитать площадь треугольника PAB * /    

   float A3 = area (x1, y1, x2, y2, x, y);

    

   / * Проверьте, совпадает ли сумма A1, A2 и A3 с A * / 

   return (A == A1 + A2 + A3);

}

  
/ * Программа драйвера для проверки вышеуказанной функции * /

int main()

{

   / * Проверим, лежит ли точка P (10, 15) внутри треугольника

      образованный A (0, 0), B (20, 0) и C (10, 30) * /

   if (isInside(0, 0, 20, 0, 10, 30, 10, 15))

     printf ("Inside");

   else

     printf ("Not Inside");

  

   return 0;

}

Джава

// JAVA-код для проверки, является ли данный пункт
// лежит внутри треугольника или нет

import java.util.*;

  

class GFG {

      

    / * Полезная функция для расчета площади треугольника

       образованный (x1, y1) (x2, y2) и (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);

    }

       

    / * Функция для проверки, лежит ли точка P (x, y)

       внутри треугольника, образованного A (x1, y1),

       B (x2, y2) и C (x3, y3) * /

    static boolean isInside(int x1, int y1, int x2,

                int y2, int x3, int y3, int x, int y)

    {   

       / * Рассчитать площадь треугольника ABC * /

        double A = area (x1, y1, x2, y2, x3, y3);

       

       / * Рассчитать площадь треугольника PBC * /  

        double A1 = area (x, y, x2, y2, x3, y3);

       

       / * Рассчитать площадь треугольника PAC * /  

        double A2 = area (x1, y1, x, y, x3, y3);

       

       / * Рассчитать площадь треугольника PAB * /   

        double A3 = area (x1, y1, x2, y2, x, y);

         

       / * Проверьте, совпадает ли сумма A1, A2 и A3 с A * /

        return (A == A1 + A2 + A3);

    }

      

    / * Программа драйвера для проверки вышеуказанной функции * /

    public static void main(String[] args) 

    {

        / * Проверим, находится ли точка P (10, 15)

           лежит внутри треугольника, образованного

           A (0, 0), B (20, 0) и C (10, 30) * /

       if (isInside(0, 0, 20, 0, 10, 30, 10, 15))

           System.out.println("Inside");

       else

           System.out.println("Not Inside");

              

    }

}

  
// Этот код предоставлен Арнавом Кр. Мандал.

питон

# Полезная функция для расчета площади
# треугольника, образованного (x1, y1),
# (x2, y2) и (x3, y3)

  

def area(x1, y1, x2, y2, x3, y3):

  

    return abs((x1 * (y2 - y3) + x2 * (y3 - y1) 

                + x3 * (y1 - y2)) / 2.0)

  

  
# Функция для проверки, находится ли точка P (x, y)
# лежит внутри треугольника, образованного
# A (x1, y1), B (x2, y2) и C (x3, y3)

def isInside(x1, y1, x2, y2, x3, y3, x, y):

  

    # Рассчитать площадь треугольника ABC

    A = area (x1, y1, x2, y2, x3, y3)

  

    # Рассчитать площадь треугольника PBC

    A1 = area (x, y, x2, y2, x3, y3)

      

    # Рассчитать площадь треугольника PAC

    A2 = area (x1, y1, x, y, x3, y3)

      

    # Рассчитать площадь треугольника PAB

    A3 = area (x1, y1, x2, y2, x, y)

      

    # Проверьте, если сумма А1, А2 и А3

    # такой же, как A

    if(A == A1 + A2 + A3):

        return True

    else:

        return False

  
# Программа драйвера для проверки вышеуказанной функции
# Проверим, находится ли точка P (10, 15)
# лежит внутри треугольника, образованного
# A (0, 0), B (20, 0) и C (10, 30)

if (isInside(0, 0, 20, 0, 10, 30, 10, 15)):

    print('Inside')

else:

    print('Not Inside'

  
# Этот код предоставлен Danish Raza

C #

// Код C #, чтобы проверить, является ли данная точка
// лежит внутри треугольника или нет

using System;

  

class GFG {

  

    / * Полезная функция для расчета площади треугольника

    образованный (x1, y1) (x2, y2) и (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);

    }

  

    / * Функция для проверки, лежит ли точка P (x, y)

    внутри треугольника, образованного A (x1, y1),

    B (x2, y2) и C (x3, y3) * /

    static bool isInside(int x1, int y1, int x2,

                         int y2, int x3, int y3, 

                         int x, int y)

    {

        / * Рассчитать площадь треугольника ABC * /

        double A = area(x1, y1, x2, y2, x3, y3);

  

        / * Рассчитать площадь треугольника PBC * /

        double A1 = area(x, y, x2, y2, x3, y3);

  

        / * Рассчитать площадь треугольника PAC * /

        double A2 = area(x1, y1, x, y, x3, y3);

  

        / * Рассчитать площадь треугольника PAB * /

        double A3 = area(x1, y1, x2, y2, x, y);

  

        / * Проверьте, совпадает ли сумма A1, A2 и A3 с A * /

        return (A == A1 + A2 + A3);

    }

  
/ * Программа драйвера для проверки вышеуказанной функции * /

public static void Main()

{

    / * Проверим, находится ли точка P (10, 15)

    лежит внутри треугольника, образованного

    A (0, 0), B (20, 0) и C (10, 30) * /

    if (isInside(0, 0, 20, 0, 10, 30, 10, 15))

        Console.WriteLine("Inside");

    else

        Console.WriteLine("Not Inside");

}
}

  
// Этот код предоставлен vt_m.

PHP

<?php

  
/ * Полезная функция для расчета

  площадь треугольника, образованного (x1, y1),

  (x2, y2) и (x3, y3) * /

function area($x1, $y1, $x2

              $y2, $x3, $y3)

{

    return abs(($x1 * ($y2 - $y3) + 

                $x2 * ($y3 - $y1) +  

                $x3 * ($y1 - $y2)) / 2.0);

}

  
/ * Функция для проверки

   P (x, y) лежит внутри

   треугольник, образованный A (x1, y1),

   B (x2, y2) и C (x3, y3) * /

function isInside($x1, $y1, $x2, $y2

                  $x3, $y3, $x, $y)

      

    / * Рассчитать площадь треугольника ABC * /

    $A = area ($x1, $y1, $x2, $y2, $x3, $y3);

      

    / * Рассчитать площадь треугольника PBC * /

    $A1 = area ($x, $y, $x2, $y2, $x3, $y3);

      

    / * Рассчитать площадь треугольника PAC * /

    $A2 = area ($x1, $y1, $x, $y, $x3, $y3);

      

    / * Рассчитать площадь треугольника PAB * /

    $A3 = area ($x1, $y1, $x2, $y2, $x, $y);

      

    / * Проверить, если сумма А1, А2

    и A3 такой же, как A * /

    return ($A == $A1 + $A2 + $A3);

}

  

    // Код драйвера

    / * Давайте проверим,

       P (10, 15) лежит внутри

       треугольник, образованный A (0, 0),

       B (20, 0) и C (10, 30) * /

    if (isInside(0, 0, 20, 0, 10, 30, 10, 15))

        echo "Inside";

    else

        echo "Not Inside";

  

  
// Этот код предоставлен anuj_67.
?>


Выход:

 Inside 

Упражнение: Даны координаты четырех углов прямоугольника и точки P. Напишите функцию, чтобы проверить, находится ли P внутри данного прямоугольника или нет.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Проверьте, находится ли данная точка внутри треугольника или нет

0.00 (0%) 0 votes