Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:计算dreamcatcher的步骤_Python - Fatal编程技术网

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 of
bow
是圆上结的距离