我设法解决了系统中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,情况相同。 这个问题可以解决吗?
答案 0 :(得分:0)
我知道这不完全是您的情况,但仍然可以解释您的问题
Inverse Sine of a Value Greater than One
考虑正弦波或曲线的外观。作为角度 改变,角度的正弦向上和向下,但永远不会 大于1或小于-1。换句话说,正弦没有角度 大于1。
使用正弦键时,您将角度倾斜并找出正弦 那个角度。例如,当您犯罪(30)时,您会发现 正弦为30度,计算器表示为0.5。当您使用 反正弦(shift-sine)您输入正弦值和 计算器会告诉您角度。所以0.5的反正弦是30 因为30度角的正弦值为0.5。
因此,当您要求计算器做1.732的反正弦时, 问它哪个角度的正弦值为1.732。但是正如我们上面所说, 不存在正弦大于1的角度。反正弦或 不存在1.732的反正弦。那就是计算器的意思。
听起来您的问题是要您尝试在a中找到角度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
所以计算器是正确的:没有这样的三角形!显然我们 如果边“ a”的长度不足以测量顶部B的角度 完成三角形并形成该角度。
答案 1 :(得分:0)
主要是您的角度以弧度为单位,然后将其转换为度。休息一切,然后就可以了:)
此外,我们可以看到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
答案 2 :(得分:-1)
您在几何图形上犯了错误-BM
是中位数,而不是AC
的高度(它们偶然地重合了等距的直角三角形) ,但一般情况下有所不同)。
因此,角度BMC
通常是不正确的,您无法以sin(theta)
和MC
的比率得到BC
但是直角三角形有一个众所周知的属性-center of circumcircle位于斜边的中间,因此在这种情况下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