生成不重叠的坐标

时间:2017-01-22 10:12:01

标签: python

我有一个随机定位线元素的程序。但是,我希望这些线不要相互重叠或交叉(线根本不接触)。

查看如何执行此操作的示例通常使用循环来循环遍历行元素的数量并生成坐标,然后在该循​​环内的另一个循环来检查坐标是否处于最小距离。

根据我迄今为止的经验,使用循环确实对程序征税,并且在显示刺激时,框架往往会下降。

我这样做的另一个想法是生成一个坐标列表,然后计算每个坐标的距离。我到目前为止的代码如下:

$(document).ready(function(){
    $("button").click(function(){
        $("p").css({"background-color": "yellow", "font-size": "200%"});
    });
});

我不太确定如何从这里开始 - 理想情况下我希望程序保持最小距离的坐标比设置import numpy as np import scipy.spatial.distance import random length_line=12 nLines = 1000 #the number of line elements that I want #Random coordinates for the lines. 500X500 pixels centred around 0 xys = np.random.random([nEls,2])*500-250 #Calculating the distance of the centre of the lines from each other dist = scipy.spatial.distance.pdist(xys) minDist = (length_line/2)+2 #the minimum distance that should not cause overlap print sys 更多,并且可能取代不是坐标的坐标别的东西。

这可能吗?谢谢。

1 个答案:

答案 0 :(得分:0)

如果我的理解是正确的,您希望生成,它们彼此不会部分重叠? (但他们可以交叉,对吧?)。在以下建议中,区段和线之间的区别是必不可少的。

方法是简化问题:通过将段扩展为(无限长度)。检查两条线不重叠是微不足道的(基本上一条线是第一度函数,用f(0)和渐变表示)。

在这里,我为二维空间做出推理,但它可以扩展为三维空间。

两个避免接近重叠,你必须在某种程度上舍入f(0)和渐变(例如小数点后的一位或两位数)。这应该比计算距离更快。

每次生成新细分时,您都会:

  1. 将细分展开为一条线(计算渐变和f(0))。
  2. 检查该渐变是否存在预先存在的行。 此测试应该消除大多数候选人。
    • 快速执行此操作将实现哈希表,其中键是渐变,值是f(0),起点和终点)。
  3. 如果有候选人,请检查f(0)。 这也应该消除大多数剩余的候选人。
  4. 最后比较两个段不重叠 - 因为您已经知道两个段都在同一条线上,第一个段的最高点(y维度)不应该大于第二个段的最低点或反之亦然。