Задача: Треугольник задан координатами своих вершин на плоскости: [latex]A(x_{a}, y_{a})[/latex], [latex]B(x_{b}, y_{b})[/latex], [latex]C(x_{c}, y_{c})[/latex]. Определить, является он прямо-, остро-, или тупоугольным.
Замечание: Не следует отбрасывать экстремальные случаи, когда вершины треугольников совпадают или лежат на одной прямой. Например, треугольник с нулевой стороной обладает свойством прямоугольника и имеет два прямых угла!
Тесты:
[latex]x_{A}[/latex] |
[latex]y_{A}[/latex] |
[latex]x_{B}[/latex] |
[latex]y_{B}[/latex] |
[latex]x_{C}[/latex] |
[latex]y_{C}[/latex] |
Результат |
комментарий |
0 |
1 |
0 |
2 |
0 |
3 |
тупоугольный |
пройден |
1 |
4 |
3 |
2 |
6 |
2 |
тупоугольный |
пройден |
6 |
2 |
6 |
2 |
6 |
4 |
прямоугольный |
пройден |
2 |
1 |
2 |
3 |
5 |
3 |
прямоугольный |
пройден |
5 |
5 |
5 |
5 |
5 |
5 |
невозможно определить тип треугольника |
пройден |
2 |
1 |
3 |
4 |
4 |
1 |
остроугольный |
пройден |
2 |
1 |
1 |
3 |
4 |
4 |
остроугольный |
пройден |
Ссылка на С++ : http://ideone.com/LfWkbB
Ссылка на Java: http://ideone.com/yrS444
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include <iostream> #include <cmath> using namespace std; int main(){ double xA, yA, xB, yB, xC, yC, AB, BC, CA, alpha, beta, gamma; cin >> xA >> yA >> xB >> yB >> xC >> yC; if ((xA==xB) && (xB==xC) && (yA == yB) && (yB == yC)) { cout << ("Невозможно определить тип треугольника"); } else if ((xA==xB && yA==yB) || (xB==xC && yB==yC) || (xC==xA && yC==yA)) { cout << ("прямоугольный"); } else { AB = sqrt((xB-xA)*(xB-xA)+(yB-yA)*(yB-yA)); BC = sqrt((xC-xB)*(xC-xB)+(yC-yB)*(yC-yB)); CA = sqrt((xA-xC)*(xA-xC)+(yA-yC)*(yA-yC)); alpha = (AB*AB + CA*CA - BC*BC)/(2*AB*CA); beta = (AB*AB + BC*BC -CA*CA)/(2*AB*BC); gamma = (CA*CA + BC*BC - AB*AB)/(2*CA*BC); { if (( alpha == 0 ) || (beta == 0) || (gamma == 0)) { cout << ("прямоугольный") ; } if ((alpha < 0)||(beta < 0) || (gamma < 0)) { cout << ("тупоугольный") ; } if ((alpha > 0) && (beta > 0) && (gamma > 0)) { cout << ("остроугольный") ; } } } return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
import java.util.*; import java.lang.*; import java.io.*; import java.math.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { double xA, yA, xB, yB, xC, yC, AB, BC, CA, alpha, beta, gamma; Scanner in = new Scanner(System.in); xA = in.nextDouble(); yA = in.nextDouble(); xB = in.nextDouble(); yB = in.nextDouble(); xC = in.nextDouble(); yC = in.nextDouble(); if ((xA==xB) && (xB==xC) && (yA == yB) && (yB == yC)) { System.out.printf ("Невозможно определить тип треугольника"); } else if ((xA==xB && yA==yB) || (xB==xC && yB==yC) || (xC==xA && yC==yA)) { System.out.printf ("прямоугольный"); } else { AB = Math.sqrt((xB-xA)*(xB-xA)+(yB-yA)*(yB-yA)); BC = Math.sqrt((xC-xB)*(xC-xB)+(yC-yB)*(yC-yB)); CA = Math.sqrt((xA-xC)*(xA-xC)+(yA-yC)*(yA-yC)); alpha = (AB*AB + CA*CA - BC*BC)/(2*AB*CA); beta = (AB*AB + BC*BC -CA*CA)/(2*AB*BC); gamma = (CA*CA + BC*BC - AB*AB)/(2*CA*BC); { if (( alpha == 0 ) || (beta == 0) || (gamma == 0)) { System.out.printf ("прямоугольный") ; } if ((alpha < 0)||(beta < 0) || (gamma < 0)) { System.out.printf ("тупоугольный") ; } if ((alpha > 0) && (beta > 0) && (gamma > 0)) { System.out.printf ("остроугольный") ; } } } } } |
Решение :
Для начала проверяем такое условие при котором мы не можем определить тип треугольника, если же оно не выполняется , то треугольник прямоугольный
|
if ((xA==xB) && (xB==xC) && (yA == yB) && (yB == yC)) { cout << ("Невозможно определить тип треугольника"); } else if ((xA==xB && yA==yB) || (xB==xC && yB==yC) || (xC==xA && yC==yA)) { cout << ("прямоугольный"); |
Если не одно из этих условий не выполняется, то мы ищем стороны треугольника и по теореме косинусов находим косинус угла. Далее выполняем три таких условия, при которых определяется какой треугольник : остро- тупо- или прямоугольный
|
if (( alpha == 0 ) || (beta == 0) || (gamma == 0)) { cout << ("прямоугольный") ; } if ((alpha < 0)||(beta < 0) || (gamma < 0)) { cout << ("тупоугольный") ; } if ((alpha > 0) && (beta > 0) && (gamma > 0)) { cout << ("остроугольный") ; } |
Related Images:
Для отправки комментария необходимо войти на сайт.