Ю2.3

Задача: Треугольник задан координатами своих вершин на плоскости:   [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

Код:

 

Решение : 

Для начала проверяем такое условие при котором мы не можем определить тип треугольника, если же оно не выполняется , то треугольник прямоугольный

Если не одно из этих условий не выполняется, то мы ищем стороны треугольника и по теореме косинусов находим косинус угла. Далее выполняем три таких условия, при которых определяется какой треугольник : остро- тупо- или прямоугольный

 

 

Сіренко Валерія Сергіївна
Сіренко Валерія Сергіївна

Latest posts by Сіренко Валерія Сергіївна (see all)

2 thoughts on “Ю2.3

  1. Похоже на правду, но я не понимаю, зачем извлекать корни при подсчете длин сторон, чтобы потом использовать опять же квадраты этих длин. Корень — это дорогостоящая операция, теряющая точность.
    Да, Вы делите на произведение длин, но поскольку Вам нужен только знак косинуса, а стороны всегда имеют положительную дину, на них можно не делить.
    Чтобы не быть голословным, приведу тест, который Ваша программа не проходит:
    0 0
    4194300 2097150
    3145725 4194300
    Как легко заметить, данный треугольник является прямоугольным.
    И еще: не стоит сравнивать double-переменные на равенство. Лучше воспользоваться конструкцией fabs(x — y) < eps.

Добавить комментарий