Нахождение угла в прямоугольном треугольнике с питоном 3 - PullRequest
0 голосов
/ 13 сентября 2018

Question

Мне удалось решить этот вопрос только для 1 случая из 5 в системе. Я уверен, что мой метод правильный, но по некоторым причинам он не работает для других случаев. Ниже мой код

import math 
AB = int(input("Enter a value for side AB: "))
while(AB>100 and AB<=0):
     AB = input("Enter a value for side AB: ")   
BC = int(input("Enter a value for side BC: "))
while(BC>100 and BC<=0):
     BC = input("Enter a value for side BC: ")
hyp = math.sqrt(math.pow(AB,2) + math.pow(BC,2)) #find side AC
mhyp = hyp/2                                     #find side MC
sind = (mhyp/BC)                                 #sin(deg)=opp/hypotenuse
degree = round(((math.asin(sind))/((math.pi)*2))*360,0) #find the angle
print("%d" %(degree) + "°")

Для случая, когда AC и BC равны 10, угол равен 45 градусам. Но когда AC = 1 и BC = 100, это приводит к ошибке, поскольку арксинус не может принимать значение больше 1,7 радиан. То же самое касается AC = 20 и BC = 10 и AC = 100 и BC = 1 .. Этот вопрос решаем?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вы допустили ошибку в геометрии - BM равно медиана , а не высота до AC (они случайно совпадают для изоселевого прямоугольного треугольника, но отличаются в общем случае ).

Таким образом, угол BMC не является правильным в общем случае, и вы не можете получить sin(theta) как соотношение MC и BC

Но есть хорошо известное свойство прямоугольного треугольника - центр окружности лежит в середине гипотенузы, поэтому точка M в данном случае - это центр окружности.
Этот факт немедленно говорит нам, что BM=MC (два радиуса), BMC треугольник равнобедренный и theta = ACB angle.

Решение довольно простое (обратите внимание atan с использованием):

import math
AB = 1
BC = 1
theta = math.atan(AB / BC)
degrees = round(theta * 180 / math.pi)
print(degrees)

>> 45

AB = 3
BC = 4
...
>> 37
0 голосов
/ 13 сентября 2018

Я знаю, что это не совсем ваш случай, но он все еще может объяснить вашу проблему

Обратный синус значения больше единицы

Подумайте о том, что синусволна или кривая выглядит так.При изменении углов синус угла увеличивается и уменьшается, но никогда не поднимается выше 1 или ниже -1.Другими словами, нет угла с синусом больше 1.

Когда вы используете клавишу синуса, вы вводите угол и убираете синус этого угла.Например, когда вы делаете грех (30), вы находите синус 30 градусов, а калькулятор говорит, что он равен 0,5.Когда вы используете обратный синус (shift-sine), вы вводите значение синуса, и калькулятор сообщает вам угол.Таким образом, обратный синус 0,5 равен 30, поскольку угол 30 градусов имеет синус 0,5.

Поэтому, когда вы просите калькулятор сделать обратный синус 1,732, вы спрашиваете, какой угол имеет синус1,732.Но, как мы уже говорили выше, нет угла, у которого синус больше 1. Обратный синус или арксин, равный 1.732, не существует.Это то, что говорит калькулятор.

Похоже, ваша проблема состоит в том, чтобы попросить вас попытаться найти угол B в треугольнике с a = 40, b = 80 и A = 60 градусов.Попробуйте построить такой треугольник и посмотрите, что получится.Мы создаем угол A и помечаем 80 единиц на одном из его лучей для стороны b, затем поворачиваем дугу вокруг результирующей точки C с радиусом или длиной 40, так что ее пересечение с другим лучом даст точку B. Что происходит?

                B
              /
             /
            /
           /
          /
     c   /                    ooooooooo
        /                 oooo         oooo
       /               ooo \               ooo
      /              oo     \
     /              o        \ a=40
    /              o          \
   /              o            \
  /               o             \
 /60             o               \
A----------------o----------------C-----------
                 b=80

Значит, калькулятор верен: такого треугольника нет!Очевидно, что мы не можем измерить угол B сверху, если сторона 'a' недостаточно длинна, чтобы завершить треугольник и сформировать этот угол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...