And*_*eas 5 python math trigonometry
到底是怎么回事??
测试sin和cos函数,找出为什么在将坐标输出到SVG文件时,我在错误的位置上获得如此美妙的定位.所以我制作了这个测试代码,我可以预测答案是找出原因.奇怪的是,没有任何影响计算的东西会增加这种行为,而只是我将要留下的位置.如果位置为0并且在计算后将变为0,则它将不起作用,但如果position为1并且在计算之后它将变为1,则它起作用.
第一次测试:
import math
cX = 2
cY = 2
r = 2
rcX = cX + (r * math.cos(math.radians(0)))
rcY = cY + (r * math.sin(math.radians(0)))
print rcX #4
print rcY #2
r = 1
rlX = rcX + (r * math.cos(math.radians(90)))
rlY = rcY + (r * math.sin(math.radians(90)))
print rlX #4
print rlY #3
r = 4
flX = rlX + (r * math.cos(math.radians(180)))
flY = rlY + (r * math.sin(math.radians(180)))
print flX #0
print flY #3
r = 2
print r * math.cos(math.radians(270))
print flX + (r * math.cos(math.radians(270))) #-3.67394039744e-16 should be 0
print flY + (r * math.sin(math.radians(270))) #1
Run Code Online (Sandbox Code Playgroud)
现在我将cX更改为3,即使它不影响计算,它也能正常工作:
r * math.cos(math.radians(270))
Run Code Online (Sandbox Code Playgroud)
该计算的结果将添加到x协调中
import math
cX = 3
cY = 2
r = 2
rcX = cX + (r * math.cos(math.radians(0)))
rcY = cY + (r * math.sin(math.radians(0)))
print rcX #5
print rcY #2
r = 1
rlX = rcX + (r * math.cos(math.radians(90)))
rlY = rcY + (r * math.sin(math.radians(90)))
print rlX #5
print rlY #3
r = 4
flX = rlX + (r * math.cos(math.radians(180)))
flY = rlY + (r * math.sin(math.radians(180)))
print flX #1
print flY #3
r = 2
print r * math.cos(math.radians(270))
print flX + (r * math.cos(math.radians(270))) #1
print flY + (r * math.sin(math.radians(270))) #1
Run Code Online (Sandbox Code Playgroud)
您正在处理舍入错误,这些错误在(大多数情况下)在处理浮点数学时是不可避免的(请参阅其他人已经链接的文章以了解究竟发生了什么).
在许多情况下,您可以减少其影响(通过以"智能"顺序执行操作或以更"浮点友好"的方式重新表达您的表达式),但在您的情况下最简单的做法是将结果简单地用于例如6位小数,并对它感到高兴.当然,您不需要更高的定位精度,并且您将获得"规范"角度所期望的结果.
归档时间: |
|
查看次数: |
11007 次 |
最近记录: |