如何使用pygame找到一行中的每个像素?

时间:2013-11-30 04:57:57

标签: python pygame lines pixels

假设我有一条坐标为x1,y1和x2,y2的线,并且我知道连接这两个点的斜边的长度(因此也知道线通过trig的旋转角度),如果线是1像素厚如何找到该行上的每个像素并将其存储到列表中?

我首先提出了简单的向量计算,用x1,y1表示并执行line / z * math.cos(角度),line / z * math.sin(角度)(分别用于x1和y1),直到达到点x2,y2,但问题是找到变量'z',这样就可以覆盖每个像素,而不会复制像素。

那么计算这个的最佳方法是什么?

2 个答案:

答案 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中。