Skip to main content

scanline_spans

Function scanline_spans 

Source
pub fn scanline_spans(
    subpaths: &[SubPath],
    y: f32,
    rule: FillRule,
) -> Vec<(f32, f32)>
Expand description

走査線 y とパスの交点を求め、塗るべき x 区間を返す(純粋関数)。

返り値は (x_start, x_end) の並びで、いずれも昇順・非重複。 閉じていない副パスも、塗りのときは仕様上「閉じているものとして」扱う。

§なぜ純粋関数にするか

巻き数の数え方(nonzeroevenodd の違い)と、頂点をちょうど 走査線が通るときの二重計上は、目視では気づけない典型的なバグ源。 ここを試験で固定しておけば、実際のピクセル書き込み側は 「区間を塗るだけ」の単純な処理に保てる。

計算量: O(辺の数 log 辺の数)(交点の整列ぶん)。