@startuml
title Liang-Barsky: отсечение отрезка прямоугольником

start
:Input segment P0,P1 and clip rect;
:dx = x1-x0, dy = y1-y0;
:t0 = 0, t1 = 1;

:Process boundary x >= left\np=-dx, q=x0-left;
if (clip test fails?) then (yes)
  stop
endif

:Process boundary x <= right\np=dx, q=right-x0;
if (clip test fails?) then (yes)
  stop
endif

:Process boundary y >= top\np=-dy, q=y0-top;
if (clip test fails?) then (yes)
  stop
endif

:Process boundary y <= bottom\np=dy, q=bottom-y0;
if (clip test fails?) then (yes)
  stop
endif

:Compute clipped points:\nP0' = P0 + t0*(P1-P0)\nP1' = P0 + t1*(P1-P0);
:Round to integer pixels;
:Return accepted clipped segment;
stop

@enduml
