前回までの状況はこちら。
最新ソースをgitHubにアップしました。
https://github.com/takishita2nd/GLCD
今回は画面に直線を引きます。
始点と終点の座標を与えると、直線を引くようにします。
傾きがあった場合でも引けるようにします。
といっても、サンプルをPythonに書き換えただけですが。
def GLCDLine(Xp0, Yp0, Xp1, Yp1):
#差分の大きい方を求める
steep = (abs(Yp1 - Yp0) > abs(Xp1 - Xp0))
#X,Yの入れ替え
if steep == True:
x = Xp0
Xp0 = Yp0
Yp0 = x
x = Xp1
Xp1 = Yp1
Yp1 = x
if Xp0 > Xp1:
x = Xp0
Xp0 = Xp1
Xp1 = x
x = Yp0
Yp0 = Yp1
Yp1 = x
#傾き計算
deltax = Xp1 - Xp0
deltay = abs(Yp1 - Yp0)
er = 0
y = Yp0
ystep = 0
#傾きでステップの正負を切り替え
if Yp0 < Yp1:
ystep = 1
else:
ystep = -1
#直線を点で描画
for x in range(Xp0, Xp1 + 1):
if steep == True:
GLCDPutPixel(y, x)
else:
GLCDPutPixel(x, y)
er += deltay
if (er << 1) >= deltax:
y += ystep
er -= deltax
まずどちらの方向に描画していくか(縦or横)を判定します。
基本的に絶対値が大きい方向に描画していきます。
縦方向に描画していく場合はx/yを入れ替えます。
あとは傾きに応じてy/xを加算しながらx/y方向に描画していきます。
def __main():
PinsInit(20, 7, 8, 9, 18, 19, 10, 11, 12, 13, 14, 15, 16, 17)
GLCDInit()
GLCDDisplayClear()
GLCDBox(0, 0, 127, 63)
GLCDLine(0, 15, 127, 15)
try:
while True:
time.sleep(1.0)
except KeyboardInterrupt:
GLCDDisplayClear()
GPIO.cleanup()
def __main():
PinsInit(20, 7, 8, 9, 18, 19, 10, 11, 12, 13, 14, 15, 16, 17)
GLCDInit()
GLCDDisplayClear()
GLCDBox(0, 0, 127, 63)
GLCDLine(0, 15, 127, 18)
try:
while True:
time.sleep(1.0)
except KeyboardInterrupt:
GLCDDisplayClear()
GPIO.cleanup()
「【ラズパイ】【GLCD】画面に直線を引く」への1件のフィードバック