Algorithm 因此,如果超出十六进制边界…+1,您不妨对一个框进行采样并丢弃。这似乎比我的答案更简单:-),但与内部“边缘”点相比,内部“边缘”点的可能性更大(Amadan对我的答案的担忧)。如果我们处理的是纯连续实数(在这种情况下,任意点的概率=0),那么这个问题就没
Algorithm 因此,如果超出十六进制边界…+1,您不妨对一个框进行采样并丢弃。这似乎比我的答案更简单:-),但与内部“边缘”点相比,内部“边缘”点的可能性更大(Amadan对我的答案的担忧)。如果我们处理的是纯连续实数(在这种情况下,任意点的概率=0),那么这个问题就没,algorithm,language-agnostic,random,procedural-generation,Algorithm,Language Agnostic,Random,Procedural Generation,因此,如果超出十六进制边界…+1,您不妨对一个框进行采样并丢弃。这似乎比我的答案更简单:-),但与内部“边缘”点相比,内部“边缘”点的可能性更大(Amadan对我的答案的担忧)。如果我们处理的是纯连续实数(在这种情况下,任意点的概率=0),那么这个问题就没有意义了,但实际上这是一个合理的问题,因为我们只处理有限数量的有理近似。它保证是正六边形吗?如果是,为什么不在问题中说明?如果不是,那么“居中”是什么意思?是的,这是一个规则的六边形-很好的点,编辑以反映。感谢所有非常有趣的解决方案:一个额外的
因此,如果超出十六进制边界…+1,您不妨对一个框进行采样并丢弃。这似乎比我的答案更简单:-),但与内部“边缘”点相比,内部“边缘”点的可能性更大(Amadan对我的答案的担忧)。如果我们处理的是纯连续实数(在这种情况下,任意点的概率=0),那么这个问题就没有意义了,但实际上这是一个合理的问题,因为我们只处理有限数量的有理近似。它保证是正六边形吗?如果是,为什么不在问题中说明?如果不是,那么“居中”是什么意思?是的,这是一个规则的六边形-很好的点,编辑以反映。感谢所有非常有趣的解决方案:一个额外的澄清,它不是绝对必要的,以尽量减少随机数呼叫的数量,当然了helps@mikera:嗯,这似乎无关紧要,因为这里最简单的解决方案可以最大限度地减少对
随机调用的平均次数
!感谢所有人的伟大想法-这是一张显示最终结果的图片:因为我们将处理有限数量的有理数(以及六边形中有限数量的点),这并不能给出这些点的均匀分布,因为得到原点的几率大于得到六边形边上一点的几率。(和阿玛丹回答的问题一样)。但我想这很容易纠正。这个解决方案(原则上也是你的)是连续分布的一个有效浮点实现,其中获得任何特定点的概率为0。唯一的偏差与舍入误差和随机数源的有限精度有关。离散解也是一个好问题,但它与提出的问题不同。作者必须详细说明他想如何离散六边形。我想OP不会关心精确的离散化,并且会很高兴你能提供任何合理的离散化(你已经在做了)。我同意你的观点,顺便说一句。实际上我的解决方案和白痴的是一样的,我只是没有仔细阅读。在正面,我对它进行了编码。第一块代码是一个函数,它在六边形中生成一个随机晶格点。第二个块调用该函数500次并绘制结果。第三段代码显示了函数中使用的引导菱形。事实上,想想看,这并不是很统一,因为靠近圆心的树彼此更接近。也就是说,两个θ值t1和t2上的树在“极点”附近的物理距离要比在圆的边缘更近。
F ____ B
/\ /\
A /__\/__\ E
\ /\ /
\/__\/
D C
R = random(); //Generate a random number called R between 0-1
S = random(); //Generate a random number called S between 0-1
if(R + S >=1)
{
R = 1 – R;
S = 1 – S;
}
from math import sqrt
from random import randrange, random
from matplotlib import pyplot
vectors = [(-1.,0),(.5,sqrt(3.)/2.),(.5,-sqrt(3.)/2.)]
def randinunithex():
x = randrange(3);
(v1,v2) = (vectors[x], vectors[(x+1)%3])
(x,y) = (random(),random())
return (x*v1[0]+y*v2[0],x*v1[1]+y*v2[1])
for n in xrange(500):
v = randinunithex()
pyplot.plot([v[0]],[v[1]],'ro')
pyplot.show()
from math import sqrt
from random import randrange, random
from matplotlib import pyplot
size = 10
vectors = [(-1.,0),(.5,sqrt(3.)/2.),(.5,-sqrt(3.)/2.)]
def randinunithex():
if not randrange(3*size*size+1): return (0,0)
t = randrange(3);
(v1,v2) = (vectors[t], vectors[(t+1)%3])
(x,y) = (randrange(0,size),randrange(1,size))
return (x*v1[0]+y*v2[0],x*v1[1]+y*v2[1])
# Plot 500 random points in the hexagon
for n in xrange(500):
v = randinunithex()
pyplot.plot([v[0]],[v[1]],'ro')
# Show the trimmed rhombuses
for t in xrange(3):
(v1,v2) = (vectors[t], vectors[(t+1)%3])
corners = [(0,1),(0,size-1),(size-1,size-1),(size-1,1),(0,1)]
corners = [(x*v1[0]+y*v2[0],x*v1[1]+y*v2[1]) for (x,y) in corners]
pyplot.plot([x for (x,y) in corners],[y for (x,y) in corners],'b')
pyplot.show()