假设我有一条坐标为x1,y1和x2,y2的线,并且我知道连接这两个点的斜边的长度(因此也知道线通过trig的旋转角度),如果线是1像素厚如何找到该行上的每个像素并将其存储到列表中?
我首先提出了简单的向量计算,用x1,y1表示并执行line / z * math.cos(角度),line / z * math.sin(角度)(分别用于x1和y1),直到达到点x2,y2,但问题是找到变量'z',这样就可以覆盖每个像素,而不会复制像素。
那么计算这个的最佳方法是什么?
答案 0 :(得分:0)
使用float
您应该获得所有积分而不重复 - 但您需要int
。
使用int
,您始终会获得重复 - int(0.1) == int(0.2) == int(0.3) == etc.
。
所以你必须检查你的名单上是否有点。
答案 1 :(得分:0)
这是Bresenham's line algorithm的用途。为了正确使用它,你应该首先弄清楚哪个是你的主轴(线条在Y或X中是否更长)。然后,对于沿主轴的每个整数位置,计算短轴的值是保持相同还是增量(+1或-1,具体取决于斜率)。
在线有几种解释 - this one在Python中。