1
5
可以使用Interval对象。间隔是两个原始的、不可移动的点之间的圆弧。 以下只是伪代码。别指望它到处跑。
编辑: |
2
10
假设你有
所以,如果一段的长度是
现在你还剩下一些分数。如果再添加一个点,则按点之间的间距对线段进行排序。实际上,将点添加到具有最低秩的段。重新把这个插入到你的排序列表中,然后再这样做,直到你的点数用完为止。 因为每次将一个点放置到一个线段中时,结果将是间距尽可能大的点,并且点之间的间距不取决于添加它们的顺序,因此最终会得到最佳间距。 (编辑:其中“最佳”是指“点之间的最大最小距离”,即尽可能避免最坏情况下点相互重叠。)
|
3
4
假设点之间的间隔是1。。。是的。如果我们把每个片段分成最小尺寸d的片段,我们就可以
你所需要的就是找到这样的人
进一步编辑 下面是查找d的代码
|
4
2
求N个点的分布,其中任意两点与M个点之间的最小距离的长度是最大的。
因此,您可以使用二进制搜索来找到最优L,它取最小L=0和最大L=min(s),并检查sum(ls/L-1表示s中的ls)>=N。 对于每一段s[i],你可以把s[i]/L-1点均匀地放在它上面。
更新
|
5
1
你从来没有说过什么是“如何均匀分布”的精确测量。间隔大小与完全间隔间隔间隔大小的总均方根方差,还是别的? 如果你在一开始看任何一个特定的开放区间,我相信一个最优的解决方案 k 该间隔中的点总是将它们均匀地隔开。因此,问题归结为选择最小间隔大小的截止点,以获得一定数量的间隙点。完成后,如果你没有足够的分数来分配,从最大到最小的间隔中,从每个间隔中删除一个分数,然后重复,直到你得到一个合理的答案。
|
6
0
我建议您将问题考虑为:
|
7
0
一个想法,把角度写成列表(以度为单位): [30, 80, 120, 260, 310] [ 50, 40, 140, 50, 80] 注意,我们绕310+80(mod 360)=30,第一个角 对于要添加的每个点,拆分最大的差异: n=1,分为140: n=2,分80: [50, 40, 70, 70, 50, 40, 40] 转换回角度: [30, 80, 120, 190, 260, 310, 350] |
8
0
Starting with array [30, 80, 120, 260, 310] and adding n = 5 angles, the given algorithm (see below) gives [30, 55, 80, 120, 155, 190, 225, 260, 310, 350] with a root mean square of the differences between angles rms(diff) = sqrt[sum(diff * diff)] / n = 11.5974135047, which appears to be optimal for practical purposes.
|
9
0
我有一个名为“condition”的函数,它接受两个参数——分子(const)和分母(pass by ref)。它要么“增大”要么“缩小”分母的值,直到整数个“分母”适合分子,即分子/分母是整数。 分母是增大还是缩小,取决于哪一个分母会使它发生较小的变化。 将分子设置为2*pi,分母设置为任何接近你想要的间距的值,你应该得到非常接近均匀分布的值。 请注意,我还有一个函数“compare”,它在一定的公差范围内比较两个double是否相等。
那么条件函数是
|
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |