gpt4 book ai didi

Python 三角函数返回复数?

转载 作者:行者123 更新时间:2023-11-30 22:24:56 25 4
gpt4 key购买 nike

我正在编写接受电机转动程度的代码,并使用该数据来计算车轮所经过的距离(使用距离 = 旋转次数 * 每转所经过的距离)。

然后进行误差调整(考虑摩擦等环境因素)。

最后,使用三角学计算沿 x 轴和 y 轴移动的距离。

以上所有操作都是由类 CooperativeManager 中包含的函数 straight 完成的。该函数由另一个类的实例调用。

class CoordinateManager:
goalcord = [20, 0]

def __init__(self):
self.curcord = [0, 0]
self.theta = 0

def get_compass_angle(self):
compass = Sensor(address='in2')
return compass.value(0)

def turn(self, iangle, fangle):
self.theta = self.theta + (fangle-iangle)

def straight(self, turnangle):
d = turnangle*2*3.14*2/360
d = 1.8120132*(d**0.8938054)
thetarad = radians(self.theta)
dx = d*sin(thetarad)
dy = d*cos(thetarad)
self.curcord[0] += dx
self.curcord[1] += dy

打印 dself.theta 显示它们包含正确的值。

这必定意味着数组 self.curcord 也具有有效值。然而,事实并非如此。打印 self.curcord 的两个元素会输出复数(一些大 float + 另一个大 float j)。

除了三角函数必须返回复数之外,我想不出任何合乎逻辑的解释。但是,我认为 python 内置 lib 函数返回错误值的可能性非常小。

是否存在我可能忽略的逻辑错误?

编辑:我只是尝试将最后两行更改为:

self.curcord[0] += dx
self.curcord[1] += dy

我刚刚在显示值时尝试使用 .real 。尽管这些值(value)观现在是真实的,但它们仍然是错误的。我会进一步看看这是否是由于某些计算错误造成的。

最佳答案

既然你在上面的评论中说过turnangle可以是任何整数,那么问题可以直接追溯到这一行:

d = 1.8120132*(d**0.8938054)

由于turnangle可以为负数,因此执行该行之前d的值也可以为负数;负值的任意小数次幂通常复杂

因此问题根本不在于三角函数。上述也让我相信,当你说

Printing both d and self.theta shows that they contain correct values

...您只在这一行之后这样做:

d = turnangle*2*3.14*2/360

这可以解释为什么您错误地认为问题一定出在其他地方。

<小时/>

更新:

  1. 像您一样将变量设置为其自身的某个函数是一个非常坏的习惯。尝试使用不同的变量名称以避免混淆 - 正如您在上面看到的,我必须引用“这一行”而不是它们的变量名称。

  2. 假设无论转动角度的符号如何,电机的行为都是相同的,也许这样的事情会起作用?

    d = sign(d) * 1.8120132 * (abs(d) ** 0.8938054)

关于Python 三角函数返回复数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47698771/

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