WebAssembly描画ソフト(2)
昭和のペイントソフト作成プロジェクト第二段
文章書く時間が無い……。画像ローダ調べて居たらImage Loader遅いだの使いにくいだのあるので、もはや自力で実装してしまえばよくないとか始めたらドツボに……。結局とりあえず自力JPEGを実装してみたら遅い、結局 WebGLを叩かないと速くならない気がする。WASMで使う場合は、Offscrean Canvasを使うのが早いかも。マルチスレッド化と固定小数点演算にすれば速くなるのかな?(RSTマーカーの扱いがよく分からぬ。表示が崩れるわ壊れるわ、一度だけ惜しいところまで言ったがインプリ変えたら元に戻った) 古いJPEGほどエラーが出まくる(大体、Photoshop……) 後、古い画像はやはりプログレッシブが多いな。ベースラインだけでお茶を濁そうとしたのに…
今回は、楕円描画。ここからパク(ry参考。
このアルゴリズムはax^2 + by^2 = R^2で計算しているが、こちらの実装系は、f(x, y)=(rx sin θ, ry cos θ) なので正規化する必要がある。
結論を言うと ry^2 x^2 + rx^2 y^2 = rx^2*ry^2 になる。rx^2*ry^2が大きすぎるので、ギミックを仕込む。
傾いた楕円だが、アフィン変換してlineで補完でお茶を濁す。それっぽい。
ここから円弧の描画も可能。楕円を書くアルゴリズムは4倍に水増ししているのだが2面が鏡像なので角度の計算が要注意だ。
肝心の角度だが arcsin (x/rx) で計算できる。後は、θが円弧の範囲に入っているかチェックするだけ。
――というかアフィン変換を実装しないと行けない。アフィン変換は行列演算なのでOpenGLが威力を発揮するのだが、スカラーで実装するのであった。
――とはいえ、Image実装しないとアフィン変換が火を噴かない。
この記事が気に入ったらサポートをしてみませんか?