적응 형 테셀레이션. 이 알고리즘에는 많은 알고리즘이 있습니다. 그러나 여기에 하나가 있습니다 :
def line_angle((x0,y0),(x1,y1)):
return atan2(y1-y0,x1-x0)
def adaptive_bezier(p0,p1,p2,lev=32):
p01 = midpoint(p0,p1)
p12 = midpoint(p1,p2)
m = midpoint(p01, p12)
da = abs(line_angle(p0,p1) - line_angle(p1,p2))
if da <= max_tolerance or lev <= 0:
yield m
else:
for p in adaptive_bezier(p0,p01,m,lev-1): yield p
for p in adaptive_bezier(m,p12,p2,lev-1): yield p
이런 식으로 삼각 분할을 할 경우 문제가 복잡합니다. 가장자리 베 지어 각도에 따라 적응 형 테셀레이터 알고리즘을 구동해야합니다. 3 가지 방법으로 테셀레이션 할 때 삼각형을 분할 할 수 있습니다.
2 edges one edge 3 edges
-------- --------- --------
\ ...// \ | / \/\/
\/___/ \ |/ \____/
\/ \ |/ \/
\/ \|/ \/
이러한 패턴에 대한 테셀레이션 결과를 정의하면 잘 처리됩니다. 위키 피 디아 (Wikipedia) 기사에서는 한 모서리 만의 테셀레이션 만 설명합니다.
두 개의 다른 테셀레이션 결과는 하나의 에지 분할의 경우를 연구하여 얻을 수 있습니다.
"2 에지"는 첫 번째 에지를 분할 한 다음 다른 에지를 분할하여 곧바로 얻을 수 있습니다.
"3 가장자리"는 알아 내야 할 일입니다. 그러나 당신은 "2 개의 가장자리"를 볼 수 있습니다. 2 차 베 지어 삼각형의 경우 그곳에 나타나는 다이아몬드의 평균 합계입니다.
-------- /\
\ / /\
\____/ -____-
\/ \/
\/ \/