这是Georg Umlauf 教授讲座中的一些递归算法
INTERSECT(b_0,...,b_m;c_0,...,c_n, EPSILON)
if [min b_i, max b_i] AND [min c_i, max c_i] != EMPTY { // check bounding boxes
if m*(m-1)*max||delta^2(b_i)|| > EPSILON) { // check flatness
Calculate b'_0, ..., b'_2m over [0, 0.5, 1] with the deCasteljau algorithm;
INTERSECT(b'_0,...,b'_m;c_0,...,c_n;EPSILON);
INTERSECT(b'_m,...,b'_2m;c_0,...,c_n;EPSILON);
}
}
else {
if (n*n-1)*max||delta^2(c_i)|| > EPSILON then {
Calculate c'_0, ..., c'_2m over [0, 0.5, 1] with the deCasteljau algorithm;
INTERSECT(b_0,...,b_m;c'_0,...,c'_n;EPSILON);
INTERSECT(b_0,...,b_m;c'_n,...,c'_2n;EPSILON);
}
else {
Intersect line segments b_0b_m and c_0c_n;
}
}
其中delta^2(b_i)
定义为b_{i+2} - 2*b_{i+1} + b_i
。