问题:
我无法生成切割多边形的随机线(不是必需的凸面)。 这些线应该具有与完全随机线(随机位置,随机角度)相同的分布,而忽略那些完全错过多边形的线。
到目前为止我的想法:
在多边形内部拾取一个随机点(我已经有了该算法)并且选择一个随机角度是不行的,因为锤形物体会更频繁地通过头部切割(它的面积比手柄大) ,完全随机的线更可能切入手柄。此角度也将无法均匀分布。
出于同样的原因,不可能在表面内或表面上挑选两个点,并生成一条贯穿两个点或任何类似方法的线。
编辑:我有两种方法可以使用,但我对它们中的任何一种都不满意。
找到包含多边形的圆。在圆圈中选择随机线条,直到找到同样穿过多边形的线条。这基本上我上面写的定义只有更高的击中多边形的机会。
沿n个方向投影多边形(例如0°,10°,20°等)。投影的大小与从这个方向受到打击的可能性成正比。然后我选择一个方向(使用投影大小作为加权概率)。最后,我可以在角度上添加360 / n°抖动。这应该足够接近分布,但我想知道是否有更好的方法。
Edit2 :-deleted-
我写了很多但是在想到更多关于它并发现一些错误之后我意识到这已经超出了我的脑海。
我们的想法是在几个特定的方向上投射多边形的凸包,并找到一个函数,通过在已知的投影之间进行混合,为我们提供所有其他投影。但事实证明,细节很复杂,对我来说太过分了。
答案 0 :(得分:3)
随机线与图形相交的概念令人惊讶地难以定义:请参阅Bertrand's paradox以了解这种想法中模糊性的一个众所周知的例子。即使平面中的随机线也不容易定义:你可能会尝试类似“通过随机点以随机角度传递的线”,但是如何选择随机点呢?平面上的点上没有均匀分布。
这是一种精确定义随机线与图F 相交的方法。设 w (θ)为垂直于角度θ的图形 F 的宽度:
当 F 是一个多边形时, w (θ)由分段正弦函数构成,其中多个零件的多边形为convex hull有antipodal pairs of vertices。
现在,使用 p (θ)作为概率密度函数选择角度θ,其中
p (θ)= w (θ)/∫ w (θ)dθ
然后在区间[0, w (θ)]上均匀地选择线的位置。
(你的方法#2试图通过采样少量的θ值并构造分段常数分布来近似 p (θ)。但我们可以得到一个精确的结果,而不需要太多额外的困难。)
要计算积分∫ w (θ)dθ(以及 p (θ)),首先找到多边形的convex hull,然后使用rotating calipers方法查找antipodal pairs of vertices。在相邻的对映体对之间,卡尺从θ 0 移动到θ 1 ,并且在此范围内 w (θ)由<给出/ p>
w (θ)= d sin(θ - φ)
其中φ是对映顶点之间的直线角度 d 是它的长度,如下图所示:
现在在θ 0 到θ 1 的范围内,不定积分为:
∫ w (θ)dθ=∫ d sin(θ - φ)dθ= - d cos(θ - φ)< / p>
所以 w (θ)对[θ 0 ,θ 1 ]范围的定积分是
d (cos(θ 0 - φ) - cos(θ 1 - φ))
对所有对映点对进行求和,并计算出整数。