ბრეზენჰემის_ალგორითმი
განზოგადებული ოპტიმიზირებული ალგორითმი
procédure tracerSegment(entier x1, entier y1, entier x2, entier y2) est déclarer entier dx, dy; si (dx ← x2 - x1) ≠ 0 alors si dx > 0 alors si (dy ← y2 - y1) ≠ 0 alors si dy > 0 alors // მრუდი ვექტორი პირველ მეოთხედში si dx ≥ dy alors // დიაგონალური ვექტორი ან მრუდი ჰორიზონტალურთან მიახლოებულიმ პირველ ბაიტში                                                 '           déclarer  entier e ; dx ← (e ← dx) × 2 ; dy ← dy × 2 ; // e არის დადებითი boucler sans fin // ჰორიზონტალური გადაადგილება tracePixel(x1, y1) ; interrompre boucle si (x1 ← x1 + 1) = x2 ; si (e ← e - dy) < 0 alors y1 ← y1 + 1 ; ''// დიაგონალური გადაადგილება' e ← e + dx ; fin si ; fin boucle ; sinon // ვერტიკალუღტან მიახლოებული მრუდი ვექტორი, მეორე ბაიტში déclarer entier e ; dy ← (e ← dy) × 2 ; dx ← dx × 2 ; // e არის დადებითი boucler sans fin // ვერტიკალური გადაადგილება tracePixel(x1, y1) ; interrompre boucle si (y1 ← y1 + 1) = y2 ; si (e ← e - dx) < 0 alors x1 ← x1 + 1 ; // დიაგონალური გადაადგილება e ← e + dy ; fin si ; fin boucle ; fin si ; sinon // dy < 0 (et dx > 0) // მრუდი ვექტორი მეოთხე მეოთხედში si dx ≥ -dy alors // დიაგონალური ვექტორი ან მრუდი ჰორიზონტალურთან მიახლოებული, მერვე ბაიტში déclarer entier e ; dx ← (e ← dx) × 2 ; dy ← dy × 2 ; // e არის დადებითი boucler sans fin // ჰორიზონტალური გადაადგილება tracePixel(x1, y1) ; interrompre boucle si (x1 ← x1 + 1) = x2 ; si (e ← e + dy) < 0 alors y1 ← y1 - 1 ; // დიაგონალური გადაადგილება e ← e + dx ; fin si ; fin boucle ; sinon // ვერტიკქლურთან მიახლოებული მრუდი ვექტორი მეშვიდე ბაიტში déclarer entier e ; dy ← (e ← dy) × 2 ; dx ← dx × 2 ; // e არის უარყოფითი boucler sans fin // ვერტიკალური გადაადგილება tracePixel(x1, y1) ; interrompre boucle si (y1 ← y1 - 1) = y2 ; si (e ← e + dx) > 0 alors x1 ← x1 + 1 ; // დიაგონალური გადაადგილება e ← e + dy ; fin si ; fin boucle ; fin si ; fin si ; sinon // dy = 0 (et dx > 0) // მარჯვნივ მიმართული ჰორიზონტალური ვექტორი répéter tracePixel(x1, y1) ; jusqu’à ce que (x1 ← x1 + 1) = x2 ; fin si ; sinon // dx < 0 si (dy ← y2 - y1) ≠ 0 alors si dy > 0 alors // მრუდი ვექტორი მეორე მეოთხედში si -dx ≥ dy alors // მრუდი ვექტორი ან ჰორიზონტალურთან მიახლოებული მრუდი, მეოთხე ბაიტში déclarer entier e ; dx ← (e ← dx) × 2 ; dy ← dy × 2 ; // e არის უარყოფითი boucler sans fin // ჰორიზონტალური გადაადგილება tracePixel(x1, y1) ; interrompre boucle si (x1 ← x1 - 1) = x2 ; si (e ← e + dy) ≥ 0 alors y1 ← y1 + 1 ; // დიაგონალური გადაადგილება e ← e + dx ; fin si ; fin boucle ; sinon // ჰორიზონტალურთან მიახლოებული მრუდი ვექტორი, მესამე ბაიტში déclarer entier e ; dy ← (e ← dy) × 2 ; dx ← dx × 2 ; // e არის დადებითი boucler sans fin // ვერტიკალური გადაადგილება tracePixel(x1, y1) ; interrompre boucle si (y1 ← y1 + 1) = y2 ; si (e ← e + dx) ≤ 0 alors x1 ← x1 - 1 ; // დიაგონალური გადაადგილება e ← e + dy ; fin si ; fin boucle ; fin si ; sinon // dy < 0 (et dx < 0) // მრუდი ვექტორი მესამე მეოთხედში si dx ≤ dy alors // დიაგონალური ვექტორი ან ჰორიზონტალურთან მიახლოებული მრუდი, მეხუთე ბაიტში déclarer entier e ; dx ← (e ← dx) × 2 ; dy ← dy × 2 ; // e არის უარყოფითი boucler sans fin // ჰორიზონტალური გადაადგილება tracePixel(x1, y1) ; interrompre boucle si (x1 ← x1 - 1) = x2 ; si (e ← e - dy) ≥ 0 alors y1 ← y1 - 1 ; // დიაგონალური გადაადგილება e ← e + dx ; fin si ; fin boucle ; sinon // ვერტიკალურთან მიახლოებული მრუდი ვექტორი, მეექვსე ბაიტში déclarer entier e ; dy ← (e ← dy) × 2 ; dx ← dx × 2 ; // e არის უარყოფითი boucler sans fin // ვერტიკალური გადაადგილება tracePixel(x1, y1) ; interrompre boucle si (y1 ← y1 - 1) = y2 ; si (e ← e - dx) ≥ 0 alors x1 ← x1 - 1 ; // დიაგონალური გადაადგილება e ← e + dy ; fin si ; fin boucle ; fin si ; fin si ; sinon // dy = 0 (et dx < 0) // მარჯვნივ მიმართული ჰორიზონტალური ვექტორი répéter tracePixel(x1, y1) ; jusqu’à ce que (x1 ← x1 - 1) = x2 ; fin si ; fin si ; sinon // dx = 0 si (dy ← y2 - y1) ≠ 0 alors si dy > 0 alors // ვერტიკალურად ზრდადი ვექტორი répéter tracePixel(x1, y1) ; jusqu’à ce que (y1 ← y1 + 1) = y2 ; sinon // dy < 0 (et dx = 0) // ვერტიკალურად კლებადი ვექტორი répéter tracePixel(x1, y1) ; jusqu’à ce que (y1 ← y1 - 1) = y2 ; fin si ; fin si ; fin si ; // საბოლოო პიხელები (x2, y2) არ არის გავლებული. fin procédure ;