Skip to content

Instantly share code, notes, and snippets.

@0xKD
Created February 5, 2013 14:36
Show Gist options
  • Save 0xKD/4714810 to your computer and use it in GitHub Desktop.
Save 0xKD/4714810 to your computer and use it in GitHub Desktop.
Bresenham line drawing in Python using Pygame
import sys,pygame
from pygame import gfxdraw
pygame.init()
screen = pygame.display.set_mode((400,400))
screen.fill((0,0,0))
pygame.display.flip()
white = (255,255,255)
def bresenham(x1,y1,x2,y2):
dx = x2-x1
dy = y2-y1
D = 2*dy - dx
gfxdraw.pixel(screen,x1,y1,white)
y = y1
for x in range(x1+1,x2+1):
if D > 0:
y += 1
gfxdraw.pixel(screen,x,y,white)
D += (2*dy-2*dx)
else:
gfxdraw.pixel(screen,x,y,white)
D += 2*dy
pygame.display.flip()
bresenham(10,10,50,50)
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
@lomnom
Copy link

lomnom commented Jul 11, 2021

c++

void bresenham(Screen* screen,Texture* texture,int startX,int startY,int endX,int endY){
	int biggerX=startX>endX ? startX : endX;
	int smallerX=startX<endX ? startX : endX;

	int biggerY=startY>endY ? startY : endY;
	int smallerY=startY<endY ? startY : endY;

	int diffX=biggerX-smallerX;
	int diffY=biggerY-smallerY;

	int D=2*diffY-diffX;
	screen->screen[smallerY][smallerX]=texture;
	int y=startY>endY ? endY : startY;

	for (int x=smallerX;x<biggerX;x++){
		if (D>0){
			y++;
			if ((x>=screen->cols)||(y>=screen->rows)){
				break;
			}
			screen->screen[y][x]=texture;
			D += (2*diffY-2*diffX);
		}else{
			if ((x>=screen->cols)||(y>=screen->rows)){
				break;
			}
			screen->screen[y][x]=texture;
			D += 2*diffY;
		}
	}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment