pub fn scanline_spans(
subpaths: &[SubPath],
y: f32,
rule: FillRule,
) -> Vec<(f32, f32)>Expand description
走査線 y とパスの交点を求め、塗るべき x 区間を返す(純粋関数)。
返り値は (x_start, x_end) の並びで、いずれも昇順・非重複。
閉じていない副パスも、塗りのときは仕様上「閉じているものとして」扱う。
§なぜ純粋関数にするか
巻き数の数え方(nonzero と evenodd の違い)と、頂点をちょうど
走査線が通るときの二重計上は、目視では気づけない典型的なバグ源。
ここを試験で固定しておけば、実際のピクセル書き込み側は
「区間を塗るだけ」の単純な処理に保てる。
計算量: O(辺の数 log 辺の数)(交点の整列ぶん)。