座標を曲げる — 矩形SDFと対称化
距離関数は、形を変えるのに形を触らず、入れる座標のほうを変える。x を Math.abs(x) に置き換えると、左半分が右半分の鏡像になる。原点で abs が折り返すので、片側を描けば反対側が揃う。
SDF を距離で持つと、対称化や複製が座標の前処理になる。形を評価する前に入力座標へ関数をかませると、その逆変換ぶんだけ形が動く。abs(x) は原点での鏡映、mod(x, p) - p/2 は周期 p の無限複製、回転行列の逆回転は全体の回転に対応する。矩形 SDF は outside = |max(px, 0)|、inside = min(max(px, py), 0) の和で書く。px = |x| - 半幅 が正なら箱の外、負なら内で、外側成分の長さに内側の食い込みを足すと角まで正しい距離になる。
矩形の SDF は、中心からの |dx| - 半幅、|dy| - 半高 を作り、外側成分の長さと内側成分の最大を足す。abs で四象限に折り返すと、一個ぶんの計算が四隅に出る。
二重の abs が四つの箱を作る。内側の Math.abs(x - cx) で中心線に畳み、そこから s * 0.22 ずらしてもう一度 Math.abs で折り返すと、左右に一個ずつ箱が複製される。縦も同じなので四隅に出る。sin(d * 0.08) は距離を縞に焼いていて、等値線が何本も並んで形からの距離の広がりが見える。中(d < 0)の縞を薄くして内外を分けている。座標を mod で割れば無限複製になり、逆回転をかければ全体が回る。形でなく入力をいじる。