获取角度在-180到+180之间
问题描述:
在我开始感谢每个人之前。获取角度在-180到+180之间
通过我的应用程序s/w我会阅读syncro值将在角度。 当我运行Python脚本时,值被收集在特定的变量中。
假设范围为-180至180
而且我得到了角-180。根据要求它应该是+/- 1度窗口;即;在179和-179之间。
我该如何检查它是否落入该范围?
angle = -180
tolerance = 1 (in degree)
if(180-1) <= -180 <= (-180+1):
# statements
angle1 = -179
tolerance = 1
if(-170-1)<= -179 <= (-179+1):
# statements
angle2 = 179
tolerance = 1
if(179-1) <= 179 <= (179+1):
# statements
这将适用于所有角度组合吗?你怎么看 ?
答
如果我理解正确的话,你必须要确保他们接近某些角度目标角度,给定一个特定的公差来定义接近度。我认为这是你需要的:
def restrict_angle(angle):
"make sure any angle falls in the [0..360) range"
return angle % 360
def is_angle_almost(angle, target_angle, tolerance):
tolerance= abs(tolerance) # same meaning, easier logic
angle= restrict_angle(angle)
upper_limit= restrict_angle(target_angle + tolerance)
lower_limit= restrict_angle(target_angle - tolerance)
if upper_limit < lower_limit: # when target_angle close to -180
upper_limit+= 360
return (lower_limit <= angle <= upper_limit
or lower_limit <= angle + 360 <= upper_limit)
if __name__ == "__main__":
for test in (
((90, 92, 3), True),
((90, 92, -3), True),
((90, 92, -1), False),
((180, 181, 1), True),
((180, 182, 1), False),
((179, -180, 1), True),
((-175, 180, 6), True),
((-175, 180, 4), False),
((4, 0, 5), True),
):
if is_angle_almost(*test[0]) != test[1]:
print ("fails for " + str(test[0]))
break
else:
print "all tests successful"
你将使用的功能是is_angle_almost
。
http://docs.python.org/library/stdtypes.html#index-600 – 2010-07-28 09:00:07
-1:“假设范围是-180到180.”该代码应符合要求。这是什么?为什么这很复杂? – 2010-07-28 10:29:35
请检查我的答案,如果这是你需要的,请相应地编辑你的问题以说清楚,或者我可以为你做;只是问。 – tzot 2010-08-27 07:42:59