python:计算dreamcatcher的步骤
我目前一直在努力计算一个捕梦者和它的内圈。基本上你有一个给定半径的外圆,你需要计算它的周长。然后你必须计算一个神奇的值,即每个弓的宽度(图中有数字的东西)应该有多宽,结果应该是弓不会在起点结束,而是与第一个弓重叠大约半个弓 以下是我迄今为止所做的尝试:python:计算dreamcatcher的步骤,python,Python,我目前一直在努力计算一个捕梦者和它的内圈。基本上你有一个给定半径的外圆,你需要计算它的周长。然后你必须计算一个神奇的值,即每个弓的宽度(图中有数字的东西)应该有多宽,结果应该是弓不会在起点结束,而是与第一个弓重叠大约半个弓 以下是我迄今为止所做的尝试: import math # in cm rad = 5.0 perimeter = round(rad * 2.0 * math.pi, 2) print "perimeter == %f" % perimeter #bow = "?"
import math
# in cm
rad = 5.0
perimeter = round(rad * 2.0 * math.pi, 2)
print "perimeter == %f" % perimeter
#bow = "?"
incValue = 0.00001
start = incValue
end = perimeter
while start < end / 10:
tmp = start * 10
while tmp < perimeter:
tmp += start
if tmp - perimeter == start / 2:
print "bow could be %s" % str(tmp)
start += incValue
print "done"
导入数学
#厘米
rad=5.0
周长=圆形(rad*2.0*math.pi,2)
打印“周长==%f”%period
#弓=“?”
incValue=0.00001
开始=递增值
结束=周长
当开始<结束/10时:
tmp=开始*10
当tmp<周长:
tmp+=启动
如果tmp-周长==开始/2:
打印“弓可能是%s”%str(tmp)
开始+=增量值
打印“完成”
但是我找不到一个适合这种约束的值。我想你可以用它得到你想要的值
bow_length = perimeter / (desired_number_of_full_bows + 0.5)
但如果你真的对让近似系统工作感兴趣,我认为这一行会引起问题:
if tmp - perimeter == start / 2:
浮点数很少相互比较相等,因此通常检查它们是否非常接近。因此,您可以改为:
if abs((tmp - perimeter) - (start / 2)) < epsilon:
如果abs((tmp-周长)-(开始/2))
。。。其中,
epsilon
表示您愿意接受的两个数字之间可能存在的最大“摆动空间”。它可能类似于0.0001,尽管您可以使用较大或较小的值进行实验,以查看哪个值最有效。我认为如果tmp-permiture==start/2
是有问题的,因为浮点数之间的比较很少如此整齐。您可能需要实现某种very\u几乎等于(a,b)
,当abs(a-b)
时返回True。在任何情况下,你都不能用船头长度=周长/(期望的船头数+0.5)
找到你想要的值吗?你能证明你所说的每个船头的宽度是准确的吗?@Kasra说每个船头的宽度
等于两个船头之间的距离(例如在图片中)Erste Umschlingung
和2
?@Kevin或者你可以如果abs(tmp-周长-(开始/2))>阈值
,并且阈值
是你想要接受的最大偏转。@Kasra think ofbow
是圆上结的距离