怎么回事??
测试sin和cos函数,找出为什么在将坐标输出到svg文件中时,我会在错误的位置得到如此漂亮的定位。所以我做了这个测试代码,我可以预测答案,找出原因。奇怪的是,没有任何影响计算的东西,它自己加上了这种行为,而只是简单地加上了我要呆的地方的位置。如果位置为0,计算后将变为0,则不起作用;但如果位置为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
现在我将cx改为3,即使它不影响以下计算,它也可以工作:
r * math.cos(math.radians(270))
计算的结果加在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
最佳答案
事实上,这是一个非常低的数字,非常接近于零。这里有一篇很棒的文章,可以帮助你理解浮动的共同挑战和陷阱:“What Every Computer Scientist Should Know About Floating-Point Arithmetic”