python math.acos反余弦问题

python math.acos反余弦问题,python,math,trigonometry,Python,Math,Trigonometry,我需要找到一个平面上只有三个坐标点的三角形的角。在方程末尾的正则三角中,我将使用: cos = (a ** 2) - (b ** 2) - (c ** 2) / -2 * b * c 我使用了**运算符来计算三角形的幂,sideA,sideB和sideC是三角形边的长度 我目前正在使用math.acos()查找角度,但我得到了一个数学域错误。math.acos()是我理解为反余弦的正确函数吗 以下是我的程序中的代码摘录: x = 100 y = 100 centerX = x + 50 cen

我需要找到一个平面上只有三个坐标点的三角形的角。在方程末尾的正则三角中,我将使用:

cos = (a ** 2) - (b ** 2) - (c ** 2) / -2 * b * c
我使用了
**
运算符来计算三角形的幂,
sideA
sideB
sideC
是三角形边的长度

我目前正在使用
math.acos()
查找角度,但我得到了一个数学域错误。
math.acos()
是我理解为反余弦的正确函数吗

以下是我的程序中的代码摘录:

x = 100
y = 100
centerX = x + 50
centerY = y + 50

if event.type == MOUSEMOTION:
            mousex, mousey = event.pos
            sideA = math.sqrt((x - mousex)**2)+((y - mousey)**2)
            sideB = math.sqrt((centerX - mousex)**2)+((centerY - mousey)**2)
            sideC = math.sqrt((centerX - x)**2)+((centerY - y)**2)
            cos = float(sideA**2)-(sideB**2)-(sideC**2)/(-2*(sideB*sideC))
            angle = math.acos(cos)
            print angle

我做错了什么?当我把程序中的数字输入计算器时,我得到了正确的角度

是,
math.acos
是反余弦的正确函数


你的错误在别处,但没有你输入的准确样本,我们帮不了你多少忙。哪一行产生错误?错误信息是什么?

是,
math.acos
是反余弦的正确函数


你的错误在别处,但没有你输入的准确样本,我们帮不了你多少忙。哪一行产生错误?错误消息是什么?

您这里的问题是代码格式太差,您看不到所产生的带括号的错误

错误1 例如,这一行:

sideA = math.sqrt((x - mousex)**2)+((y - mousey)**2)
cos = float(sideA**2)-(sideB**2)-(sideC**2)/(-2*(sideB*sideC))
正确格式化后,如下所示:

sideA = math.sqrt((x - mousex) ** 2) + ((y - mousey) ** 2)
当删除多余的括号时,您可以更清楚地看到发生了什么:

sideA = math.sqrt((x - mousex) ** 2) + (y - mousey) ** 2
您只需将一条边的平方传递给
math.sqrt()
,然后将第二条边的平方添加到它。应该是:

sideA = math.sqrt((x - mousex) ** 2 + (y - mousey) ** 2)
cos = (sideA ** 2 - sideB ** 2 - sideC ** 2) / ( -2 * sideB * sideC)
或者更好:

sideA = math.hypot(x - mousex, y - mousey)
错误2 那么这一行:

sideA = math.sqrt((x - mousex)**2)+((y - mousey)**2)
cos = float(sideA**2)-(sideB**2)-(sideC**2)/(-2*(sideB*sideC))
也有一个类似的问题——前三个术语周围缺少括号,只需要将C边的平方除以2bc。应该是:

sideA = math.sqrt((x - mousex) ** 2 + (y - mousey) ** 2)
cos = (sideA ** 2 - sideB ** 2 - sideC ** 2) / ( -2 * sideB * sideC)
解决方案
由于上述原因,您没有正确计算余弦,因此您传递给
math.acos()
的内容远远超出了余弦的允许范围(余弦始终在
-1范围内)。您的问题是,您的代码格式太差,无法看到您正在使用括号的错误

错误1 例如,这一行:

sideA = math.sqrt((x - mousex)**2)+((y - mousey)**2)
cos = float(sideA**2)-(sideB**2)-(sideC**2)/(-2*(sideB*sideC))
正确格式化后,如下所示:

sideA = math.sqrt((x - mousex) ** 2) + ((y - mousey) ** 2)
当删除多余的括号时,您可以更清楚地看到发生了什么:

sideA = math.sqrt((x - mousex) ** 2) + (y - mousey) ** 2
您只需将一条边的平方传递给
math.sqrt()
,然后将第二条边的平方添加到其中。它应该是:

sideA = math.sqrt((x - mousex) ** 2 + (y - mousey) ** 2)
cos = (sideA ** 2 - sideB ** 2 - sideC ** 2) / ( -2 * sideB * sideC)
或者更好:

sideA = math.hypot(x - mousex, y - mousey)
错误2 那么这一行:

sideA = math.sqrt((x - mousex)**2)+((y - mousey)**2)
cos = float(sideA**2)-(sideB**2)-(sideC**2)/(-2*(sideB*sideC))
有一个类似的问题-前三个术语周围缺少括号,并且只将C边的平方除以2bc。应该是:

sideA = math.sqrt((x - mousex) ** 2 + (y - mousey) ** 2)
cos = (sideA ** 2 - sideB ** 2 - sideC ** 2) / ( -2 * sideB * sideC)
解决方案
由于上述原因,您没有正确计算余弦,因此传递给
math.acos()
的内容远远超出了余弦的允许范围(余弦始终在
-1范围内)。错误出现在math.acos(cos)上线路感谢您的帮助也感谢您对我的测试测试x、y和centerX centerY是常数mouseX mouseY是屏幕上的鼠标x y线我运行的一个轨迹是mouseX和mouseY使用58和102线,我得到了17.39(四舍五入)作为我的回答,但是如果我在我的程序中运行这些数字,我会在acos上得到一个错误。有什么想法吗?没有,我没有,因为你的描述再一次是模糊的。请给我们一个最小的复制案例——几行代码,我们实际上可以在我们的计算机上运行,除了Python之外没有任何先决条件,并产生你遇到的错误。错误来了在math.acos(cos)线上,感谢您的帮助,也感谢您对我的测试测试x、y和centerX centerY是常数mouseX mouseY是屏幕上的鼠标x y线我运行的一条轨迹使用鼠标x和mouseY的58和102线,我得到了17.39(四舍五入)作为我的回答,但是如果我在我的程序中运行这些数字,我会在acos上得到一个错误。有什么想法吗?没有,我没有,因为你的描述再一次是模糊的。请给我们一个最小的复制案例——几行代码,我们实际上可以在我们的计算机上运行,除了Python之外没有任何先决条件,并产生您遇到的错误。我从来没有注意到我没有接受答案。你应该得到那个代表!从来没有注意到我没有接受答案。你应该得到那个代表!