Python 3.x 用python 3在直角三角形中求角

Python 3.x 用python 3在直角三角形中求角,python-3.x,math,Python 3.x,Math,在系统中的5个案例中,我只解决了1个案例的问题。我确信我的方法是正确的,但由于某些原因,它不适用于其他情况。 下面是我的代码 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: "))

在系统中的5个案例中,我只解决了1个案例的问题。我确信我的方法是正确的,但由于某些原因,它不适用于其他情况。 下面是我的代码

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也是如此。。
这个问题可以解决吗?

我知道这不完全是你的问题,但它仍然可以解释你的问题

想想正弦波或曲线是什么样子。作为天使 变化,角度的正弦会上下移动,但它永远不会移动 高于1或低于-1。换句话说,没有正弦角 这大于1

当你使用正弦键时,你会输入一个角度,然后从中取出正弦 那个角度。例如,当你做sin30时,你会发现 正弦为30度,计算器显示为0.5。当你使用 输入正弦值和 计算器告诉你角度。所以,0.5的反正弦是30 因为30度角的正弦值为0.5

因此,当你要求计算器做1.732的反正弦时,你 我们问它什么角度的正弦为1.732。但正如我们上面所说, 没有正弦大于1的角度。逆正弦或 1.732的ARCIN不存在。这就是计算器所说的

听起来你的问题是要在a中找到角度B a=40,b=80,a=60度的三角形。尝试构建 这样一个三角形,看看会发生什么。我们做角度A和标记80 单位在它的一条光线上为b面,然后围绕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
因此,计算器是正确的:不存在这样的三角形!显然我们 如果“a”侧不够长,无法在顶部测量角度B
完成三角形并形成该角度。

您在几何上犯了错误-BM是中间值,而不是AC的高度。对于等高线直角三角形,它们意外重合,但在一般情况下不同

所以角BMC在一般情况下是不正确的,你们不能得到MC和BC的比值

但在斜边中点有直角三角形的众所周知的性质,所以M点是圆心。 这个事实立即告诉我们BM=MC两个半径,BMC三角形是等腰的,θ=ACB角

解决方案非常简单,请注意,atan使用:


这主要是你的角度以弧度表示,然后你把它转换成度。休息,然后一切都会到位:

此外,我们可以看到BM等于MC基,即中间值到斜边的属性,使得三角形MBC为等腰线,因此角度MBC=角度MCB

import math 
if __name__ == '__main__':
    AB = input()
    assert 0<int(AB)<=100
    BC = input()
    assert 0<int(BC)<=100
    assert (int(AB) >= 0 and float(AB).is_integer() == True) and (int(BC) >= 0 and float(BC).is_integer() == True)
    AC = math.sqrt((int(AB)**2) + (int(BC)**2))
    tan_acb_rad = int(AB)/int(BC)
    acb_rad = math.atan(tan_acb_rad) #the angle comes in radians
    acb_deg = math.degrees(acb_rad) #you have to convert it into degrees
    ang_mbc = acb_deg
    print(str(int(round(ang_mbc,0)))+u"\N{DEGREE SIGN}") #adding the degree symbol at end

这不是你的直接问题,但看看whileAB>100和ABAlso,如果角度ABC是90度,那么AC不可能是1,BC不可能是100。除脱气情况外,AB为零不是三角形,AC肯定大于BC。我想,你说的是AC,你的意思是AB。你有没有试着画出其他三角形来确认它们实际上是相连的边。。。
import math 
if __name__ == '__main__':
    AB = input()
    assert 0<int(AB)<=100
    BC = input()
    assert 0<int(BC)<=100
    assert (int(AB) >= 0 and float(AB).is_integer() == True) and (int(BC) >= 0 and float(BC).is_integer() == True)
    AC = math.sqrt((int(AB)**2) + (int(BC)**2))
    tan_acb_rad = int(AB)/int(BC)
    acb_rad = math.atan(tan_acb_rad) #the angle comes in radians
    acb_deg = math.degrees(acb_rad) #you have to convert it into degrees
    ang_mbc = acb_deg
    print(str(int(round(ang_mbc,0)))+u"\N{DEGREE SIGN}") #adding the degree symbol at end