Comprueba si se puede formar un triángulo rectángulo moviendo cualquiera de las coordenadas

Dadas tres coordenadas de un triángulo (x1, y1) , (x2, y2) , (x3, y3) . La tarea es averiguar si el triángulo se puede transformar en un triángulo rectángulo moviendo solo un punto exactamente la distancia 1. 
Si es posible hacer que el triángulo sea rectángulo , imprima «POSIBLE» , de lo contrario imprima » NO ES POSIBLE”
Si el triángulo ya es rectángulo , también se debe informar. 
Ejemplos: 
 

Entrada: 
x1 = -1, y1 = 0 
x2 = 2, y2 = 0 
x3 = 0, y3 = 1 
Salida: POSIBLE La
primera coordenada (-1, 0) puede cambiarse a (0, 0) y corregirse -angulado
Entrada: 
x1 = 36, y1 = 1 
x2 = -17, y2 = -54 
x3 = -19, y3 = 55 
Salida: POSIBLE 
 

Enfoque: 
Como se sabe que para un triángulo de lados a , b y c , el triángulo será rectángulo si se cumple la siguiente ecuación: a 2 + b 2 = c 2 
Entonces, para todas las coordenadas del triángulo, averigua todos los lados y para las 3 posibles permutaciones de ellos verifica si ya es un triangulo rectangulo y reportalo.
Si la condición anterior no se cumple, entonces se deben realizar las siguientes operaciones 
: debemos cambiar todas las coordenadas por 1 una por una y verificar que sea una combinación válida para un triángulo rectángulo. 
Mira que puede haber 4 combinaciones posibles para cambiar cada coordenada por 1. Son (-1, 0), (0, 1), (1, 0), (0, -1) . Así que ejecute un ciclo y aplique esos cambios uno por uno para cada coordenada y verifique que la fórmula a 2 + b 2 = c 2 sea verdadera o no. 
Si es cierto, entonces es posible transformar el triángulo en un triángulo rectángulo , de lo contrario no.
A continuación se muestra la implementación del código anterior: 
 

C++

// C++ implementation of
// the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Storing all the possible
// changes to make the triangle
// right-angled
int dx[] = { -1, 0, 1, 0 };
int dy[] = { 0, 1, 0, -1 };
 
// Function to check if the triangle
// is right-angled or not
int ifRight(int x1, int y1,
            int x2, int y2,
            int x3, int y3)
{
 
    int a = ((x1 - x2) * (x1 - x2))
            + ((y1 - y2) * (y1 - y2));
 
    int b = ((x1 - x3) * (x1 - x3))
            + ((y1 - y3) * (y1 - y3));
 
    int c = ((x2 - x3) * (x2 - x3))
            + ((y2 - y3) * (y2 - y3));
 
    if ((a == (b + c) && a != 0 && b != 0 && c != 0)
        || (b == (a + c) && a != 0 && b != 0 && c != 0)
        || (c == (a + b) && a != 0 && b != 0 && c != 0)) {
        return 1;
    }
 
    return 0;
}
 
// Function to check if the triangle
// can be transformed to right-angled
void isValidCombination(int x1, int y1,
                        int x2, int y2,
                        int x3, int y3)
{
    int x, y;
 
    // Boolean variable to
    // return true or false
    bool possible = 0;
 
    // If it is already right-angled
    if (ifRight(x1, y1,
                x2, y2,
                x3, y3)) {
        cout << "ALREADY RIGHT ANGLED";
        return;
    }
    else {
 
        // Applying the changes on the
        // co-ordinates
        for (int i = 0; i < 4; i++) {
 
            // Applying on the first
            // co-ordinate
            x = dx[i] + x1;
            y = dy[i] + y1;
 
            if (ifRight(x, y,
                        x2, y2,
                        x3, y3)) {
                cout << "POSSIBLE";
                return;
            }
 
            // Applying on the second
            // co-ordinate
            x = dx[i] + x2;
            y = dy[i] + y2;
 
            if (ifRight(x1, y1,
                        x, y,
                        x3, y3)) {
                cout << "POSSIBLE";
                return;
            }
 
            // Applying on the third
            // co-ordinate
            x = dx[i] + x3;
            y = dy[i] + y3;
 
            if (ifRight(x1, y1,
                        x2, y2,
                        x, y)) {
                cout << "POSSIBLE";
                return;
            }
        }
    }
 
    // If can't be transformed
    if (!possible)
        cout << "NOT POSSIBLE" << endl;
}
 
// Driver Code
int main()
 
{
    int x1 = -49, y1 = 0;
    int x2 = 0, y2 = 50;
    int x3 = 0, y3 = -50;
 
    isValidCombination(x1, y1,
                       x2, y2,
                       x3, y3);
 
    return 0;
}

Java

// Java implementation of the approach
import java.util.*;
class GFG
{
 
// Storing all the possible
// changes to make the triangle
// right-angled
static int dx[] = { -1, 0, 1, 0 };
static int dy[] = { 0, 1, 0, -1 };
 
// Function to check if the triangle
// is right-angled or not
static boolean ifRight(int x1, int y1,
                       int x2, int y2,
                       int x3, int y3)
{
    int a = ((x1 - x2) * (x1 - x2)) +
            ((y1 - y2) * (y1 - y2));
 
    int b = ((x1 - x3) * (x1 - x3)) +
            ((y1 - y3) * (y1 - y3));
 
    int c = ((x2 - x3) * (x2 - x3)) +
            ((y2 - y3) * (y2 - y3));
 
    if ((a == (b + c) && a != 0 && b != 0 && c != 0) ||
        (b == (a + c) && a != 0 && b != 0 && c != 0) ||
        (c == (a + b) && a != 0 && b != 0 && c != 0))
    {
        return true;
    }
    return false;
}
 
// Function to check if the triangle
// can be transformed to right-angled
static void isValidCombination(int x1, int y1,
                               int x2, int y2,
                               int x3, int y3)
{
    int x, y;
 
    // Boolean variable to
    // return true or false
    boolean possible = false;
 
    // If it is already right-angled
    if (ifRight(x1, y1, x2, y2, x3, y3))
    {
        System.out.print("ALREADY RIGHT ANGLED");
        return;
    }
    else
    {
 
        // Applying the changes on the
        // co-ordinates
        for (int i = 0; i < 4; i++)
        {
 
            // Applying on the first
            // co-ordinate
            x = dx[i] + x1;
            y = dy[i] + y1;
 
            if (ifRight(x, y, x2, y2, x3, y3))
            {
                System.out.print("POSSIBLE");
                return;
            }
 
            // Applying on the second
            // co-ordinate
            x = dx[i] + x2;
            y = dy[i] + y2;
 
            if (ifRight(x1, y1, x, y, x3, y3))
            {
                System.out.print("POSSIBLE");
                return;
            }
 
            // Applying on the third
            // co-ordinate
            x = dx[i] + x3;
            y = dy[i] + y3;
 
            if (ifRight(x1, y1, x2, y2, x, y))
            {
                System.out.print("POSSIBLE");
                return;
            }
        }
    }
 
    // If can't be transformed
    if (!possible)
        System.out.println("NOT POSSIBLE");
}
 
// Driver Code
public static void main(String[] args)
{
    int x1 = -49, y1 = 0;
    int x2 = 0, y2 = 50;
    int x3 = 0, y3 = -50;
 
    isValidCombination(x1, y1, x2, y2, x3, y3);
}
}
 
// This code is contributed by Rajput-Ji

Python3

# Python3 implementation of the above approach
 
# Storing all the possible
# changes to make the triangle
# right-angled
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
 
# Function to check if the triangle
# is right-angled or not
def ifRight(x1, y1, x2, y2, x3, y3):
 
    a = ((x1 - x2) * (x1 - x2)) + \
        ((y1 - y2) * (y1 - y2))
 
    b = ((x1 - x3) * (x1 - x3)) + \
        ((y1 - y3) * (y1 - y3))
 
    c = ((x2 - x3) * (x2 - x3)) + \
        ((y2 - y3) * (y2 - y3))
 
    if ((a == (b + c) and a != 0 and b != 0 and c != 0) or
        (b == (a + c) and a != 0 and b != 0 and c != 0) or
        (c == (a + b) and a != 0 and b != 0 and c != 0)):
        return 1
 
# Function to check if the triangle
# can be transformed to right-angled
def isValidCombination(x1, y1, x2, y2, x3, y3):
 
    x, y = 0, 0
 
    # Boolean variable to
    # return true or false
    possible = 0
 
    # If it is already right-angled
    if (ifRight(x1, y1, x2, y2, x3, y3)):
        print("ALREADY RIGHT ANGLED")
        return
 
    else:
 
        # Applying the changes on the
        # co-ordinates
        for i in range(4):
 
            # Applying on the first
            # co-ordinate
            x = dx[i] + x1
            y = dy[i] + y1
 
            if (ifRight(x, y, x2, y2, x3, y3)):
                print("POSSIBLE")
                return
 
            # Applying on the second
            # co-ordinate
            x = dx[i] + x2
            y = dy[i] + y2
 
            if (ifRight(x1, y1, x, y, x3, y3)):
                print("POSSIBLE")
                return
 
            # Applying on the third
            # co-ordinate
            x = dx[i] + x3
            y = dy[i] + y3
 
            if (ifRight(x1, y1, x2, y2, x, y)):
                print("POSSIBLE")
                return
 
    # If can't be transformed
    if (possible == 0):
        print("NOT POSSIBLE")
 
# Driver Code
x1 = -49
y1 = 0
x2 = 0
y2 = 50
x3 = 0
y3 = -50
 
isValidCombination(x1, y1, x2, y2, x3, y3)
 
# This code is contributed by Mohit Kumar

C#

// C# implementation of the approach
using System;
 
class GFG
{
 
    // Storing all the possible
    // changes to make the triangle
    // right-angled
    static int []dx = { -1, 0, 1, 0 };
    static int []dy = { 0, 1, 0, -1 };
     
    // Function to check if the triangle
    // is right-angled or not
    static bool ifRight(int x1, int y1,
                        int x2, int y2,
                        int x3, int y3)
    {
        int a = ((x1 - x2) * (x1 - x2)) +
                ((y1 - y2) * (y1 - y2));
     
        int b = ((x1 - x3) * (x1 - x3)) +
                ((y1 - y3) * (y1 - y3));
     
        int c = ((x2 - x3) * (x2 - x3)) +
                ((y2 - y3) * (y2 - y3));
     
        if ((a == (b + c) && a != 0 && b != 0 && c != 0) ||
            (b == (a + c) && a != 0 && b != 0 && c != 0) ||
            (c == (a + b) && a != 0 && b != 0 && c != 0))
        {
            return true;
        }
        return false;
    }
     
    // Function to check if the triangle
    // can be transformed to right-angled
    static void isValidCombination(int x1, int y1,
                                   int x2, int y2,
                                   int x3, int y3)
    {
        int x, y;
     
        // Boolean variable to
        // return true or false
        bool possible = false;
     
        // If it is already right-angled
        if (ifRight(x1, y1, x2, y2, x3, y3))
        {
            Console.WriteLine("ALREADY RIGHT ANGLED");
            return;
        }
        else
        {
     
            // Applying the changes on the
            // co-ordinates
            for (int i = 0; i < 4; i++)
            {
     
                // Applying on the first
                // co-ordinate
                x = dx[i] + x1;
                y = dy[i] + y1;
     
                if (ifRight(x, y, x2, y2, x3, y3))
                {
                    Console.WriteLine("POSSIBLE");
                    return;
                }
     
                // Applying on the second
                // co-ordinate
                x = dx[i] + x2;
                y = dy[i] + y2;
     
                if (ifRight(x1, y1, x, y, x3, y3))
                {
                    Console.WriteLine("POSSIBLE");
                    return;
                }
     
                // Applying on the third
                // co-ordinate
                x = dx[i] + x3;
                y = dy[i] + y3;
     
                if (ifRight(x1, y1, x2, y2, x, y))
                {
                    Console.Write("POSSIBLE");
                    return;
                }
            }
        }
     
        // If can't be transformed
        if (!possible)
            Console.WriteLine("NOT POSSIBLE");
    }
     
    // Driver Code
    static public void Main ()
    {
        int x1 = -49, y1 = 0;
        int x2 = 0, y2 = 50;
        int x3 = 0, y3 = -50;
     
        isValidCombination(x1, y1, x2, y2, x3, y3);
    }
}
 
// This code is contributed by AnkitRai01

Javascript

<script>
// Javascript implementation of
// the above approach
 
// Storing all the possible
// changes to make the triangle
// right-angled
let dx = [ -1, 0, 1, 0 ];
let dy = [ 0, 1, 0, -1 ];
 
// Function to check if the triangle
// is right-angled or not
function ifRight(x1, y1, x2, y2,
            x3, y3)
{
 
    let a = ((x1 - x2) * (x1 - x2))
            + ((y1 - y2) * (y1 - y2));
 
    let b = ((x1 - x3) * (x1 - x3))
            + ((y1 - y3) * (y1 - y3));
 
    let c = ((x2 - x3) * (x2 - x3))
            + ((y2 - y3) * (y2 - y3));
 
    if ((a == (b + c) && a != 0 && b != 0 && c != 0)
        || (b == (a + c) && a != 0 && b != 0 && c != 0)
        || (c == (a + b) && a != 0 && b != 0 && c != 0)) {
        return 1;
    }
 
    return 0;
}
 
// Function to check if the triangle
// can be transformed to right-angled
function isValidCombination(x1, y1,
                        x2, y2,
                        x3, y3)
{
    let x, y;
 
    // Boolean variable to
    // return true or false
    let possible = 0;
 
    // If it is already right-angled
    if (ifRight(x1, y1,
                x2, y2,
                x3, y3)) {
        document.write("ALREADY RIGHT ANGLED");
        return;
    }
    else {
 
        // Applying the changes on the
        // co-ordinates
        for (let i = 0; i < 4; i++) {
 
            // Applying on the first
            // co-ordinate
            x = dx[i] + x1;
            y = dy[i] + y1;
 
            if (ifRight(x, y,
                        x2, y2,
                        x3, y3)) {
                document.write("POSSIBLE");
                return;
            }
 
            // Applying on the second
            // co-ordinate
            x = dx[i] + x2;
            y = dy[i] + y2;
 
            if (ifRight(x1, y1,
                        x, y,
                        x3, y3)) {
                document.write("POSSIBLE");
                return;
            }
 
            // Applying on the third
            // co-ordinate
            x = dx[i] + x3;
            y = dy[i] + y3;
 
            if (ifRight(x1, y1,
                        x2, y2,
                        x, y)) {
                document.write("POSSIBLE");
                return;
            }
        }
    }
 
    // If can't be transformed
    if (!possible)
        document.write("NOT POSSIBLE<br>");
}
 
// Driver Code
    let x1 = -49, y1 = 0;
    let x2 = 0, y2 = 50;
    let x3 = 0, y3 = -50;
 
    isValidCombination(x1, y1,
                       x2, y2,
                       x3, y3);
 
</script>
Producción: 

POSSIBLE

 

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por dangenmaster2 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 *