区間ごとの描画で頂点追加場所判定が正確になった複数の画像を並べて重ねて1枚の画像にするPixtack紫陽花2.4.21.106
前回、2015/01/04は1日前
線上に頂点の追加時の誤判定が無くなったはず、実際に線を描いて判定するようにした
閉じた曲線で頂点数が3の時に頂点を消去した場合エラーになっていたのを修正
ベジェ曲線を追加
頂点の追加時の判定をより正確に
今までは各頂点とクリックした座標の角度で判定していたけど
実際に1本1本線を描いてクリックした座標の色の有無で判定するようにした
ベジェ曲線に最低限必要な頂点数は4つで
それ以上のときは3の倍数+1が必要
それ以外の時は線が描画されない
線の上になる頂点の番号は0から数えるとちょうど3の倍数になるみたい
頂点の追加の判定
クリックした座標と合わせてみて色がついていればその区間に新頂点を追加すればいい、っていう判定方法
問題は曲線
曲線は隣の頂点の影響を受ける
1-2区間の画像がほしい時でもその隣の0と3の座標によって変化するので
0と3も必要になる
けど
この要求をかなえるのがVBにはちゃんと用意されていた
DrawCurve(Pen、Point、offset、NumberOfSegments)
普通の曲線の描画に使うDrawCurveでOffsetとNumberOfSegmentsっていう
Offsetがどこから描画するかの指定
NumberOfSegmentsがOffsetから描画する区間の指定
今回使うのは必ず1区間だけだからNumberOfSegmentsは必ず1になる
描画に必要な頂点数は開いた線なら3、閉じた線なら4のどちらかだから3か4で固定して
そうするとOffsetは0か1になるとか始点終点の関係とか順番とか考えて
まとめたらこうなった
意外だったのが頂点数が3しか無い図形もそれ以上の場合と同じだったこと
直線の場合
直線以外の場合
必要頂点数は3
開いた線でOffsetが始点の場合
開いた線でSegmentsが終点の場合
それ以外の場合
必要頂点数は4
Segmentsに始点終点が無くて開いた線の場合
それ以外の場合
Offsetが始点の場合
Offsetが終点の場合
終点から始点の場合
それ以外の場合
これで欲しい区間の画像が得られるので
あとはできあがった画像(Bitmap)に対してGetPixel(クリックした座標)で
色が付いているかどうかがわかるので、これで判定
線の上に頂点を追加するのはこれで出来た、複数の線が重なっている場合は
頂点番号が小さいほうが優先される
出来上がってみて思ったのは今までの角度からの判定より簡単だった
それもDrawCurveに区間指定の描画があったからこそ
これで線の上での角度による頂点追加判定は必要なくなったんだけど
線以外の追加では今までどおり角度判定なので誤判定が出る
今回追加したベジェ曲線は一個追加するごとに3つ増えることにしないとつじつまが合わないし、その増えた2点は曲がり具合も見ないとおかしくなりそう
ダウンロード先
ヤフーボックス
次回、2015/01/06は1日後