Рубрики

Найти все углы данного треугольника

Учитывая координаты всех трех вершин треугольника в плоскости 2D, задача состоит в том, чтобы найти все три угла.

Пример:

Input : A = (0, 0), 
        B = (0, 1), 
        C = (1, 0)
Output : 90, 45, 45

Для решения этой проблемы мы используем ниже закон косинусов .

c^2 = a^2 + b^2 - 2(a)(b)(cos beta)

После перестановки

beta = acos( ( a^2 + b^2 - c^2 ) / (2ab) )

В тригонометрии закон косинусов (также известный как формула косинуса или правило косинуса) связывает длины сторон треугольника с косинусом одного из его углов.

First, calculate the length of all the sides. 
Then apply above formula to get all angles in 
radian. Then convert angles from radian into 
degrees.

Ниже приведена реализация вышеуказанных шагов.

C ++

// Код для поиска всех трех углов
// треугольника с заданной координатой
// из всех трех вершин
#include <iostream>
#include <utility> // for pair
#include <cmath> // for math functions

using namespace std;

  
#define PI 3.1415926535

  
// возвращает квадрат расстояния ч / б две точки

int lengthSquare(pair<int,int> X, pair<int,int> Y)

{

    int xDiff = X.first - Y.first;

    int yDiff = X.second - Y.second;

    return xDiff*xDiff + yDiff*yDiff;

}

  

void printAngle(pair<int,int> A, pair<int,int> B,

                pair<int,int> C)

{

    // Квадрат длины be a2, b2, c2

    int a2 = lengthSquare(B,C);

    int b2 = lengthSquare(A,C);

    int c2 = lengthSquare(A,B);

  

    // длина сторон a, b, c

    float a = sqrt(a2);

    float b = sqrt(b2);

    float c = sqrt(c2);

  

    // Из закона косинуса

    float alpha = acos((b2 + c2 - a2)/(2*b*c));

    float betta = acos((a2 + c2 - b2)/(2*a*c));

    float gamma = acos((a2 + b2 - c2)/(2*a*b));

  

    // Преобразование в степень

    alpha = alpha * 180 / PI;

    betta = betta * 180 / PI;

    gamma = gamma * 180 / PI;

  

    // печатаем все углы

    cout << "alpha : " << alpha << endl;

    cout << "betta : " << betta << endl;

    cout << "gamma : " << gamma << endl;

}

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

int main()

{

    pair<int,int> A = make_pair(0,0);

    pair<int,int> B = make_pair(0,1);

    pair<int,int> C = make_pair(1,0);

  

    printAngle(A,B,C);

  

    return 0;

}

Джава

// Java-код, чтобы найти все три угла
// треугольника с заданной координатой
// из всех трех вершин

  

import java.awt.Point;

import static java.lang.Math.PI;

import static java.lang.Math.sqrt;

import static java.lang.Math.acos;

  

class Test

{

    // возвращает квадрат расстояния ч / б две точки

    static int lengthSquare(Point p1, Point p2)

    {

        int xDiff = p1.x- p2.x;

        int yDiff = p1.y- p2.y;

        return xDiff*xDiff + yDiff*yDiff;

    }

      

    static void printAngle(Point A, Point B,

            Point C)

    {

    // Квадрат длины be a2, b2, c2

    int a2 = lengthSquare(B,C);

    int b2 = lengthSquare(A,C);

    int c2 = lengthSquare(A,B);

      

    // длина сторон a, b, c

    float a = (float)sqrt(a2);

    float b = (float)sqrt(b2);

    float c = (float)sqrt(c2);

      

    // Из закона косинуса

    float alpha = (float) acos((b2 + c2 - a2)/(2*b*c));

    float betta = (float) acos((a2 + c2 - b2)/(2*a*c));

    float gamma = (float) acos((a2 + b2 - c2)/(2*a*b));

      

    // Преобразование в степень

    alpha = (float) (alpha * 180 / PI);

    betta = (float) (betta * 180 / PI);

    gamma = (float) (gamma * 180 / PI);

      

    // печатаем все углы

    System.out.println("alpha : " + alpha);

    System.out.println("betta : " + betta);

    System.out.println("gamma : " + gamma);

    }

      

    // Метод драйвера

    public static void main(String[] args) 

    {

        Point A = new Point(0,0);

        Point B = new Point(0,1);

        Point C = new Point(1,0);

       

        printAngle(A,B,C);

    }

}

C #

// C # код, чтобы найти все три угла
// треугольника с заданной координатой
// из всех трех вершин

using System;

      

class GFG

{

    class Point

    {

        public int x, y;

        public Point(int x, int y)

        {

            this.x = x;

            this.y = y;

        }

    }

      

    // возвращает квадрат расстояния ч / б две точки

    static int lengthSquare(Point p1, Point p2)

    {

        int xDiff = p1.x - p2.x;

        int yDiff = p1.y - p2.y;

        return xDiff * xDiff + yDiff * yDiff;

    }

      

    static void printAngle(Point A, Point B, Point C)

    {

        // Квадрат длины be a2, b2, c2

        int a2 = lengthSquare(B, C);

        int b2 = lengthSquare(A, C);

        int c2 = lengthSquare(A, B);

          

        // длина сторон a, b, c

        float a = (float)Math.Sqrt(a2);

        float b = (float)Math.Sqrt(b2);

        float c = (float)Math.Sqrt(c2);

          

        // Из закона косинуса

        float alpha = (float) Math.Acos((b2 + c2 - a2) / 

                                           (2 * b * c));

        float betta = (float) Math.Acos((a2 + c2 - b2) / 

                                           (2 * a * c));

        float gamma = (float) Math.Acos((a2 + b2 - c2) / 

                                           (2 * a * b));

          

        // Преобразование в степень

        alpha = (float) (alpha * 180 / Math.PI);

        betta = (float) (betta * 180 / Math.PI);

        gamma = (float) (gamma * 180 / Math.PI);

          

        // печатаем все углы

        Console.WriteLine("alpha : " + alpha);

        Console.WriteLine("betta : " + betta);

        Console.WriteLine("gamma : " + gamma);

    }

      

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

    public static void Main(String[] args) 

    {

        Point A = new Point(0, 0);

        Point B = new Point(0, 1);

        Point C = new Point(1, 0);

      

        printAngle(A, B, C);

    }

}

  
// Этот код предоставлен Rajput-Ji


Выход:

alpha : 90
betta : 45
gamma : 45

Ссылка :
https://en.wikipedia.org/wiki/Law_of_cosines

Эта статья предоставлена Пратиком Чхаджером . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

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

Найти все углы данного треугольника

0.00 (0%) 0 votes