我有这张图,其中包含许多由2点定义的线。现在,我想生成一个热图。结果应该类似于http://docs.ggplot2.org/current/geom_raster.html,不同之处在于每个单元的热量定义为相交多少行。结果应该是用于PIL的numpy数组。



到目前为止,我考虑了两件事,一是遍历所有线和网格,并使用this计算两者之间的距离,如果该距离小于两个单元格之间的距离,则位于其中。这是可能的,因为在实际数据中,线具有一定的最小长度。

将每条线与每个网格单元相交并检查是否在其中的另一种可能性。但这听起来很昂贵,但更准确。沿着这些线,您检查每条水平/垂直线的交点并检查它在哪个单元格中。

Data sample。这是一个Array[Array[Int, Int]]。每对子阵列都指定一行。

最佳答案

这听起来像您想要的:

How to test if a line segment intersects an axis-aligned rectange in 2D?

特别是最高答案:https://stackoverflow.com/a/293052/66349

综上所述:


检查直线的两个点是否都位于框的一侧(左,右,上,下)-如果是,则没有交点
否则,请检查方框的所有四个角是否在直线的同一侧上-如果它们不在同一直线上,则说明您有一个相交点


一般而言,遍历线段并仅测试热图框的子集(可能会落入由线的两点定义的较大框中)可能会更快。而不是遍历热图框并检查每条线的交点。

关于python - 生成线的热图图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20414272/

10-10 14:06