[컴퓨터 그래픽스]Liang-Barsky 선분 클리핑
Liang-Barsky 선분 클리핑
장점: 반복적으로 클리핑하지 않아도 됨.
단점: 다소 식이 어려워보일 순 있음.
I. 매개변수 선분 방정식
(xs, ys)를 거쳐 (xe, ye)를 통과하는 직선의 매개변수 방정식
{x = xs + @(xe - xs)
{y = ys + @(ye - ys)
@ = 0, (x, y) = (xs, ys): 선분 시작점
@ = 1, (x, y) = (xe, ye): 선분 끝점
@ < 0, 선분 아래쪽, 선분에 포함 안 됨.
@ > 0, 선분 위쪽, 선분에 포함 안 됨.
0 <= @ <= 1, 선분 내부에 존재
클리핑 윈도
xwmin <= xs + @(xe - xs) <= xwmax
ywmin <= ys + @(ye - ys) <= ywmax
일관된 수식으로 정리(이해정도만)
@pk <= qk, k(k = 1, 2, 3, 4)
좌측경계
@(xs - xe) <= xs - xwmin
@p1 <= q1
p1 = xs - xe = -delta x, q1 = xs - xwmin = -delta xmin
우측경계
@(xe - xs) <= xwmax - xs
@p2 <= q2
p2 = xe - xs = delta x, q2 = xwmax - xs = delta xmax
하단경계
@(ys - ye) <= ys - ywmin
@p3 <= q3
p3 = ys - ye, q3 = ys - ywmin = -delta ymin
상단경계
@(ye - ys) <= ywmax - ys
@p4 <= q4
p4 = ye - ys, q4 = ywmax - ys = delta ymax
II. 클리핑 방법
무한 확장된 직선이 좌우 경계와 교차하는 점의 @
=> 어려워서 생략...
좌우
p1 = xs - xe < 0 이면,
@xw_in = @1, @xw_out = @2
p2 = xe - xs < 0 이면,
@xw_in = @2, @xw_out = @1
상하
p3 = ys - ye < 0 이면,
@yw_in = @3, @yw_out = @4
p4 = ye - ys <0 이면,
@yw_in = @4, @yw_out = @3
@1 = (xwmin - xs)/(xe - xs)
@2 = (xwmax - xs)/(xe - xs)
@3 = (ywmin - ys)/(ye - ys)
@4 = (ywmax - ys)/(ye - ys)
@s = max(@xw_in, @yw_in, 0)
@e = min(@xw_out, @yw_out, 1)
ex. 들어오면서 @는 -0.5, -0.1, 나가면서 @는 0.6, 1.1
-> -0.5, -0.1, 0 중 최대값 0, 0.6, 1.1, 1 중 최소 0.6
=> @s = 0, @e = 0.6
ex2. 그림 그려서 생각하면 좋다.
클리핑 영역 내로 들어오는 직선에 대해서
그 안의 선분이 속한 영역을 찾아야 한다.
영역 내로 들어오는 @값 @1(좌측), @4(상단)
영역 밖으로 나가는 @값 @2(우측), @3(하단)
에 대해서 선분의 시작점 (xs, ys), 끝점(xe, ye)은 그 영역 안에 있을 수도 있고 밖에 있을 수도 있다.
원칙
@s <= @e
모순
@s > @e
=> 만약 구한 @s, @e가 모순에 해당한다면, 클리핑 영역에 속하지 않는다고 생각하면 된다.
* 보통 Liang-Barsky와 Cohen-Sutherland 적절히 혼합해서 쓴다.