Помощь - Поиск - Пользователи - Календарь
Полная версия: Площадь по стороне и двум прилежащим углам
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Lykash
Вычислить площадь S треугольника по одной стороне "а" и прилежащим к ней углам "альфа" и "бета", при этом углы можно задавать или в градусах или в радианах.
TarasBer
Находишь третий угол.
Находишь синусы углов.
Находишь длины сторон (исходя из того, что длина стороны пропорциональна синусу противолежащего угла).
Находишь площадь по Герону.
Lapp
Тарас, мне кажется можно чуть проще..

Опускаем высоту на a из противоположной вершины. Она делит a на две части, x и a-x. Находим x из условия

x * tg(alpha) = (a-x) * tg(beta)

Получаем

x = a * tg(beta) / (tg(alpha)+tg(beta))

Теперь высота найдется как x*tg(alpha), а дальше площадь найти не проблема. Как и можно было ожидать, формула получается симметричная:

S = a2 * tg(alpha) * tg(beta) / (tg(alpha)+tg(beta)) / 2

Надеюсь, в таких простых вычислениях негде было ошибиться даже и устно ))
Остается скользкий вопрос.. Чертеж (в голове)) я делал только для острых углов alpha и beta (и, тем самым, положительного x), но мне кажется, что все будет работать и для тупых (одного тупого, ессно)).
TarasBer
> Тарас, мне кажется можно чуть проще..

Да, так намного проще, а я ведь ещё подумал - раз у меня в решении вылезает Герон, значит я что-то делаю через задницу...
Lykash
вот помогли нормально на другом форуме:

uses crt;
var a,b,al,bt,gm,s:real;
w:byte;
begin
clrscr;
write('Введите длину строны А a=');
readln(a);
writeln('Угол 1-в градусах 2-в радианах');
repeat
readln(w);
until w in [1..2];
repeat
writeln('Введите прилегающие углы');
readln(al,bt);
if w=1 then
begin
al:=al*pi/180;
bt:=bt*pi/180;
end;
if (al+bt>=pi)or(al<=0)or(bt<=0) then
writeln('Углы должны быть положительные и в сумме меньше 180 градусов');
until (al+bt<pi)and(al>0)and(bt>0);
gm:=pi-al-bt;{угол протмв стороны А}
b:=a*sin(bt)/sin(gm);{сторона В из теоремы синусов}
s:=0.5*a*b*sin(al);{площадь по двум сторонам и углу между ними}
write('S=',s:0:2);
readln
end.
Lapp
Цитата(Lykash @ 16.02.2012 20:31) *
вот помогли нормально на другом форуме:

Извини, братан, мы не просекли, что "помочь" значит на самом деле сделать за тебя..

В следующий раз хотя бы пиши, что именно хочешь (кроме условия). Ну, или хотя бы "пожалуйста", что ли..
И соблюдай правила (пп. 1 и 2 вверху страницы).
Удачи тебе в поиске "помощников", неуч..


2 TarasBer:
А в коде еще более простой способ )).. хи-хи на наши с тобой седины.. )))
TarasBer
> вот помогли нормально на другом форуме

Да пошёл ты...

> А в коде еще более простой способ

Получается a*a*sin(alhpa)*sin(beta)/(sin(alpha+beta))
Если в твоей формуле с тангенсами домножить на косинусы, то как раз это и получится.

Добавлено через 1 мин.
Ага, нашёл: http://www.cyberforum.ru/turbo-pascal/thread446300.html
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.