Задача:
Треугольник задается координатами своих вершин на плоскости : [latex]A(x_{1} , y_{2})[/latex] , [latex]B(x_{2} , y_{2})[/latex] , [latex]C(x_{3} , y_{3})[/latex] . Найти длину и основание высоты, опущенной из вершины A на сторону ВС.
Тесты
[latex]x_{А}[/latex] | [latex]y_{A}[/latex] | [latex]x_{B}[/latex] | [latex]y_{B}[/latex] | [latex]x_{C}[/latex] | [latex]y_{C}[/latex] | Основание ([latex]BC[/latex]) | Высота[latex]h[/latex] | Комментарий |
7 | 9 | 45 | 9 | 34 | 5 | 11 | 13 | пройден |
0.75 | 1 | 0.25 | 2 | 0.5 | 3 | 1 | 0 | пройден |
98 | 67 | 56 | 47 | 34 | 95 | 52 | 47 | пройден |
0 | 1 | 0 | 3 | 0 | 4 | 1 | 0 | пройден |
В четвертом примере имеем вырожденный треугольник, для которого площадь будет равна нулю , следовательно и высота так же равна 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 |
#include <iostream> #include <math.h> using namespace std; int main(){ double xA, yA, xB, yB, xC, yC; int h, S, AB, BC, AC; cin>>xA>>yA>>xB>>yB>>xC>>yC; AB = sqrt((xB-xA)*(xB-xA)+(yB-yA)*(yB-yA)); BC = sqrt((xC-xB)*(xC-xB)+(yC-yB)*(yC-yB)); AC = sqrt((xA-xC)*(xA-xC)+(yA-yC)*(yA-yC)); { if((AB>BC+AC)&&(BC>AB+AC)&&(AC>AB+BC)) { cout << ("Treygolnik ne syshestvyet"); } else { S = fabs((xB-xA)*(yC-yA)-(xC-xA)*(yB-yA))/2.0; h = (2*S)/ BC; cout << BC << " " << h; } } 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 |
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; double h, S, AB, BC, AC; Scanner in = new Scanner(System.in); xA = in.nextDouble(); yA = in.nextDouble(); xB = in.nextDouble(); yB = in.nextDouble(); xC = in.nextDouble(); yC = in.nextDouble(); AB = Math.sqrt((xB-xA)*(xB-xA)+(yB-yA)*(yB-yA)); BC = Math.sqrt((xC-xB)*(xC-xB)+(yC-yB)*(yC-yB)); AC = Math.sqrt((xA-xC)*(xA-xC)+(yA-yC)*(yA-yC)); if((AB>BC+AC)&&(BC>AB+AC)&&(AC>AB+BC)) { System.out.printf("Treygolnik ne syshestvyet"); } else { S = Math.abs((xB-xA)*(yC-yA)-(xC-xA)*(yB-yA))/2.0; h = (2*S)/ BC; System.out.printf("BC"); System.out.printf(" "); System.out.printf("%.1f",h); } } } |
ссылка на C++ : http://ideone.com/fBfd8S
ссылка на Java : http://ideone.com/ut9G6J
Решение:
Для начала находим стороны треугольника :
8 9 10 |
AB = sqrt((xB-xA)*(xB-xA)+(yB-yA)*(yB-yA)); BC = sqrt((xC-xB)*(xC-xB)+(yC-yB)*(yC-yB)); AC = sqrt((xA-xC)*(xA-xC)+(yA-yC)*(yA-yC)); |
далее выполняем условие , что если сумма двух сторон меньше третей то треугольник не существует. Если же наоборот начинаем считать плащадь треугольника по формуле :
18 |
S = fabs((xB-xA)*(yC-yA)-(xC-xA)*(yB-yA))/2.0; |
и с помощью площади находим высоту :
19 |
h = (2*S)/ BC; |
и в конце выводим высоту и основание.
— Проблемы с формулой в заголовке таблицы
— Мы много раз говорили о недопустимости подобного: «Treygolnik ne syshestvyet». Либо учите английские слова, либо кириллические буквы.
Детали обсудим на экзамене.