- Код уже работает с L = 90 °.
- Да, высота должна быть от точки
A
до основания a
между точками B
и C
, образуя прямоугольный угол с этой базой. Вывод сделал это предположение, в частности, в отношении способа его использования h
и a
во второй области формулы 1/2 h a
. Эта точная формула не применяется, если h
было нарисовано по-разному.
- Причина, по которой ваш второй набор входов привел к нереальному ответу, заключается в том, что иногда набор математических параметров может быть несовместим друг с другом и описывать невозможную конструкцию, и ваши значения
P
, h
и L
делают именно это. В частности, они описывают невозможный треугольник.
Учитывая высоту h
и угол L
, наименьший периметр P
, что может быть достигнуто равнобедренный треугольник разделить пополам по h
. С L=30
это будет иметь периметр P = a + b + c = 2h tan15 + h/cos15 + h/cos15
, который, подключив ваш h=3
, приводит к P=7.819
. Вместо этого вы попытались использовать P=3+sqrt(3)=4.732
. Попробуйте использовать различные цифры меньше 7.819 (плюс немного, я закруглен здесь), и вы увидите, что все они приводят к мнимым результатам. Это математика, говорящая вам, что вы вычисляете то, что не может существовать в действительности.
Если вы заполните отсутствующую ближайшую скобку между Y
и /
в строке 5, тогда ваш код работает отлично.
Я написал код немного иначе, чем вы, вот что я сделал:
Prompt P
Prompt H
Prompt L
HP²/(2H(1+cos(L))+2Psin(L))→Y
(HP-Ysin(L))/H→Z
Z²-4Y→D
If D<0:Then
Disp "IMAGINARY"
Stop
End
(Z+√(D))/2→C
Y/C→B
P-(B+C)→A
Disp A
Disp B
Disp C
Edit: @Gabriel, нет ничего особенного (по этому вопросу) о углах 30-60-90 ; существует бесконечное число наборов P
, h
и L
входов, которые описывают такие треугольники. Однако, если вы действительно хотите найти такие треугольники в ответе, вы действительно изменили вопрос; вместо того, чтобы просто знать один угол L
плюс P
и h
, вы теперь знаете три угла (30-60-90) плюс P
и h
. Вы уже перечеркнули треугольник, так что вполне уверенно, что случайно созданный набор входов будет описывать невозможный треугольник. В качестве надуманного примера, если вы указали h
как 0,0001 и P
как 99999, то это явно невозможно, потому что треугольник с крошечной высотой и довольно неэкстремальными углами (которые 30-60-90) не может достичь периметра во много раз больше его высоты ,
Если вы хотите начать с только один из P
или h
, то вы можете получить уравнения для расчета всех параметров треугольника из известного P
или h
плюс знания 30-60-90 углов.
Чтобы дать один пример этого, если предположить, что побочный a
образует основание треугольника между 90 ° и 60 ° углами, то мы имеем L=30
и (маркировку угла 60 °, как B) мы имеем h=b
, и вы можете получить простые уравнения для всех параметров:
P = a + h + c
sin60 = h/c
cos60 = a/c
=> P = c cos60 + c sin60 + c
P = c(cos60 + sin60 + 1)
c = P/(cos60 + sin60 + 1)
b = h = c sin60
a = c cos60
Подключив в P=100
мы имеем
c = 100/(cos60 + sin60 + 1) = 42.265
b = h = 36.603
a = 21.132
Если вы подключаете P=100
, h=36.603
и L=30
в код, вы увидите, что вы получаете точные результаты.
Я попробовал это на 45-45-90 треугольнике и он работал (с Р = 2 + sqrt2, H = 1, L = 45), но он не сделал работа над треугольником 30-60-90 (P = 3 + sqrt (3), h = 3, L = 30); он сказал, что не настоящий ответ ... кто-нибудь знает почему? – Gabriel