import matplotlib.pyplot as plt
def draw_line(x1, y1, x2, y2):
dx = abs(x2 - x1)
dy = abs(y2 - y1)
steep = dy > dx
if steep:
x1, y1 = y1, x1
x2, y2 = y2, x2
dx, dy = dy, dx
if x1 > x2:
x1, x2 = x2, x1
y1, y2 = y2, y1
p = 2 * dy - dx
y = y1
points = []
for x in range(x1, x2 + 1):
if steep:
points.append((y, x))
else:
points.append((x, y))
if p >= 0:
y += 1 if y1 < y2 else -1
p -= 2 * dx
p += 2 * dy
return points
def main():
x1, y1 = map(int, input("Enter starting point (x1 y1): ").split())
x2, y2 = map(int, input("Enter ending point (x2 y2): ").split())
points = draw_line(x1, y1, x2, y2)
x_values = [point[0] for point in points]
y_values = [point[1] for point in points]
plt.plot(x_values, y_values, marker='0')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Bresenham Line Drawing Algorithm')
plt.grid()
plt.show()
if name == " main ":
main()
aW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdCAKZGVmIGRyYXdfbGluZSh4MSwgeTEsIHgyLCB5Mik6CiAgICBkeCA9IGFicyh4MiAtIHgxKSAKICAgIGR5ID0gYWJzKHkyIC0geTEpIAogICAgc3RlZXAgPSBkeSA+IGR4IAogICAgaWYgc3RlZXA6CiAgICAgICAgeDEsIHkxID0geTEsIHgxIAogICAgICAgIHgyLCB5MiA9IHkyLCB4MiAKICAgICAgICBkeCwgZHkgPSBkeSwgZHgKICAgIGlmIHgxID4geDI6CiAgICAgICAgeDEsIHgyID0geDIsIHgxIAogICAgICAgIHkxLCB5MiA9IHkyLCB5MQogICAgcCA9IDIgKiBkeSAtIGR4IAogICAgeSA9IHkxCiAgICBwb2ludHMgPSBbXQogICAgZm9yIHggaW4gcmFuZ2UoeDEsIHgyICsgMSk6IAogICAgICAgIGlmIHN0ZWVwOgogICAgICAgICAgICBwb2ludHMuYXBwZW5kKCh5LCB4KSkgCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcG9pbnRzLmFwcGVuZCgoeCwgeSkpIAogICAgICAgIGlmIHAgPj0gMDoKICAgICAgICAgICAgeSArPSAxIGlmIHkxIDwgeTIgZWxzZSAtMSAKICAgICAgICAgICAgcCAtPSAyICogZHggCiAgICAgICAgcCArPSAyICogZHkgCiAgICByZXR1cm4gcG9pbnRzCgogICAgZGVmIG1haW4oKToKICAgICAgICB4MSwgeTEgPSBtYXAoaW50LCBpbnB1dCgiRW50ZXIgc3RhcnRpbmcgcG9pbnQgKHgxIHkxKTogIikuc3BsaXQoKSkgCiAgICAgICAgeDIsIHkyID0gbWFwKGludCwgaW5wdXQoIkVudGVyIGVuZGluZyBwb2ludCAoeDIgeTIpOiAiKS5zcGxpdCgpKSAKICAgICAgICBwb2ludHMgPSBkcmF3X2xpbmUoeDEsIHkxLCB4MiwgeTIpCiAgICAgICAgeF92YWx1ZXMgPSBbcG9pbnRbMF0gZm9yIHBvaW50IGluIHBvaW50c10KICAgICAgICB5X3ZhbHVlcyA9IFtwb2ludFsxXSBmb3IgcG9pbnQgaW4gcG9pbnRzXQoKICAgICAgICBwbHQucGxvdCh4X3ZhbHVlcywgeV92YWx1ZXMsIG1hcmtlcj0nMCcpIAogICAgICAgIHBsdC54bGFiZWwoJ1gtYXhpcycpCiAgICAgICAgcGx0LnlsYWJlbCgnWS1heGlzJykKICAgICAgICBwbHQudGl0bGUoJ0JyZXNlbmhhbSBMaW5lIERyYXdpbmcgQWxnb3JpdGhtJykgCiAgICAgICAgcGx0LmdyaWQoKQogICAgICAgIHBsdC5zaG93KCkKCiAgICBpZiAJCW5hbWUJPT0gIgltYWluCSI6IAogICAgICAgIG1haW4oKQogICA=