gpt4 book ai didi

python math.acos 反余弦问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:40 25 4
gpt4 key购买 nike

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

cos = (a ** 2) - (b ** 2) - (c ** 2) / -2 * b * c

我使用了 ** 运算符来计算,sideAsideBsideC 是三角形边的长度。

我目前正在使用 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

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

最佳答案

这里的问题是您的代码格式很糟糕,您看不到您正在制作的带括号的错误。

错误 1

例如,这一行:

sideA = math.sqrt((x - mousex)**2)+((y - mousey)**2)

如果格式正确,看起来像这样:

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)

甚至更好:

sideA = math.hypot(x - mousex, y - mousey)

错误2

然后这一行:

cos = float(sideA**2)-(sideB**2)-(sideC**2)/(-2*(sideB*sideC))

有一个类似的问题 - 您在前三项周围缺少括号,并且您只是将 C 边的平方除以 2bc。应该是:

cos = (sideA ** 2 - sideB ** 2 - sideC ** 2) / ( -2 * sideB * sideC)

解决方案

由于上述原因,您没有正确计算余弦,因此您传递给 math.acos() 的内容超出了余弦的允许范围(余弦总是在 -1 <= cos A <= 1 范围内),所以它给了你域错误。打印出您的值将有助于看到您在这里得到了一些非常奇怪的东西。

这是你的程序的一个固定的工作版本,修改为直接为 mousex 设置值和 mousey :

#!/usr/bin/env python

import math

x, y = 100, 100
centerX, centerY = x + 50, y + 50
mousex, mousey = 100,150

sideA = math.hypot(x - mousex, y - mousey);
sideB = math.hypot(centerX - mousex, centerY - mousey)
sideC = math.hypot(centerX - x, centerY - y)
cosA = (sideB ** 2 + sideC ** 2 - sideA ** 2) / (2 * sideB * sideC)
angle = math.acos(cosA)

print "sideA: %.2f, sideB: %.2f, sideC: %.2f" % (sideA, sideB, sideC)
print "cosA: %.6f" % (cosA)
print "angle: %.2f radians, %.2f degrees" % (angle, math.degrees(angle))

哪些输出:

paul@horus:~/src/sandbox$ ./angle.py
sideA: 50.00, sideB: 50.00, sideC: 70.71
cosA: 0.707107
angle: 0.79 radians, 45.00 degrees
paul@horus:~/src/sandbox$

我冒昧地稍微重新安排了您的余弦规则计算,以消除对分母取反的需要。

关于python math.acos 反余弦问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26726960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com