给定一个w x h大小的网格,按以下方式生成
self.grid = [ ['-'] * self.w ] * self.h
我希望在所述网格中的两点之间“绘制”一条字符“线”。以下代码是我想出的
def line( self, char, (x1, y1), (x2, y2) ):
self.point( char, (x1, y1) )
x = x1 + cmp( x2, x1 )
y = y1 + cmp( y2, y1 )
while x != x2 or y != y2:
self.point( char, (x, y) )
x = x + cmp( x2, x )
y = y + cmp( y2, y )
self.point( char, (x2, y2) )
point() 函数只是用char填充网格中的一个点。
这就像直线和完美对角线的魅力。它也适用于“弯曲”线,因为它不会引发错误,但它看起来并不完全像两点之间的线,更像是......我不知道,曲棍球棒。
例如,给定一个 10x7 的网格和调用
line( 'X', (1,1), (5,9) )
我明白了
----------
-X--------
--X-------
---X------
----X-----
-----XXXXX
----------
我想要的可能更像是
----------
-X--------
---X------
-----X----
-------X--
---------X
----------
我将如何做到这一点,同时又不会在此过程中打破直线和完美的对角线?我需要两段不同的代码来处理这两种情况,还是一种算法可以同时处理这两种情况?