【问题标题】:Finding intersections of lines with grid查找线与网格的交点
【发布时间】:2017-12-13 16:45:02
【问题描述】:

我有轨迹数据,其中每条轨迹都由一系列坐标组成,每条轨迹都由唯一的 ID 标识。

这些轨迹在 x - y 平面中,我想将整个平面划分为大小相等的单元格网格(方形网格)。该网格显然是不可见的,但用于将轨迹划分为子轨迹。每当一条轨迹与一条网格线相交时,它就成为一个带有“new_id”的新子轨迹,即一条轨迹在网格线的交点处被划分,并且这些线段中的每一条都有新的唯一id .

最后,我希望选择任何随机网格单元并检索该单元中的所有子轨迹。

请建议我一种将二维平面划分为网格的方法,以及遇到网格线时应该如何分割轨迹。我正在研究 Python,并寻求一些 Python 实现链接、建议、算法,甚至是相同的伪代码。

如果有什么不清楚的地方请告诉我。

【问题讨论】:

    标签: python algorithm pandas numpy grid


    【解决方案1】:

    网格索引很简单:

    x_idx =  Floor(x / CellSize)  //rounding it integer down 
    

    但是找到与网格的交叉点取决于方式 - 如何定义轨迹。如果它们是折线 - 直线段序列 - 只需计算线段与网格线的交点

     X = k * CellSize
     Y = l * CellSize
    

    段的开始和结束单元格之间的 k,l 个间隔

    示例:折线从点 x[0], y[0] 开始。这对应于带有索引的单元格

    x_idx[0] =  Floor(x[0] / CellSize)
    y_idx[0] =  Floor(y[0] / CellSize)
    

    第一段 x[1], y[1] 末尾的查找单元格。如果单元格索引保持不变,则整个段位于单个单元格中,并且与网格没有交集。如果x_idx[1] 大于x_idx[0],则段与垂直网格线相交

    (x_idx[0] + 1) * CellSize   //right border of the initial cell
    (x_idx[0] + 2) * CellSize   
    ...
    (x_idx[1]) * CellSize       //left border of the final cell
    

    How to find intersection point

    附:如果段很长并且通常与许多单元格相交,则值得使用高级算法进行交叉计算,例如Amanatides and Woo

    【讨论】:

    • 请您更详细地解释查找交叉部分。每个轨迹都由许多 x,y 点组成,所以是的,它们是线段序列。我无法理解建议中提到的术语“k”和“l”,y_idx 是否与 x_idx 相同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2015-11-04
    相关资源
    最近更新 更多