Hatena::ブログ(Diary)

C#でプログラミングあれこれ このページをアンテナに追加 RSSフィード

2017-03-12

堂々巡り

うーん、賢くしてるつもりで悩んでるんやけど、ほんまにそれで賢こなってるんかわからんようになってきた。
その頂点群が描く形を維持するのが良いのか、その頂点群が位置を固定するアンカーとしてそれを維持するんが良いんか、行ったり来たりを繰り返してる。

人間的に判断すれば、形を維持して欲しいケースと頂点位置を固定して欲しいケースは区別出来るんやけど自動で出来るんかな。

理想的な挙動のイメージがないわけじゃないんやけど、現実的な計算量でおさまるんかなあ。
時間が無限にとれて凝りまくれたとしても、それで動きがもっさりして全体としてのUXが悪くなるんならそんなんせん方がマシな気がするなあ。

直角しか出てけーへんねんから、2点を結ぶのは2線分(3頂点)あればOKなんで、末尾から逆算してったら最適化できるかなあ。

ちょっと考えるんしんどなってきた。ちょっとちゃうことやって気分転換するか。
f:id:fkmt5:20170312192138p:image

2017-03-11

アルゴリズム実装のための準備2

テストパターンをGUIで作る処理と状態の変化の詳細を表示するプログラムを書いた。
f:id:fkmt5:20170311233522p:image
f:id:fkmt5:20170311233523p:image

ちょっと絵日記じみてきたな。
ほんま大したことやってないんやけど、スクショだけ見たらなんか凄そうな錯覚おこすね。(嘘)
シンプルな実装より、ほんのちょっとだけ賢くしたいだけなんやけどかなり苦戦してる。

どこで妥協するかだけなんやろけどなあ。もうちょっとだけ粘るか。
今実装してるデータ形式は描画時のパフォーマンス重視にしてたんやけど、それだと苦しいところがありそうな気がしてきた。
描画時用のキャッシュするデータ形式と実際のデータ形式分けた方が良いかもなって感じ。
もうちょっと実験してみるか。

しかし、やっぱC#は良いなあ。C++じゃこんなツールも数時間でサクっとは書けんもんなあ。

2017-03-10

アルゴリズム実装のための準備

やってることは大して難しないんやけど、脳みそが疲労してんのかデバッグが進まん。
なので実装結果が目視でおかしいかおかしないかテストするプログラムを先に書いた。

状態の変化前と変化後をみておかしい時は赤くなる。
f:id:fkmt5:20170310225720p:image

パターンを記述したメソッドにカスタムアノテーション付けてテストパターンを網羅してるんやけど、思ったよりちゃんと動いて無くてショック。
ダメなパターン(テストケース)を一般化してアルゴリズムフィードバックするんやけど、最先端の人とかやったらディープラーニングで自動的に
実装出来んちゃうかな?ってちょっと思ってる。

次はテストパターンを生成するプログラムを書いて、そのあとアルゴリズムの再検討やな。
なかなか目的のとこまでたどりつかん。

2017-03-08

Excel方眼紙

処理的には単純なんやけどイチから書くとなると結構変な感じになる。
全パターン網羅するのには図で書いた方が良い。
昔はフリーハンドでノートに書いてたけど、今回はExcel方眼紙を使ってみた。
他にもいい方法あるんかなあ。

これと拡大縮小をやっつけたら、既存コードの整理とまとめかなあ。
もうひとがんばりって感じ。

f:id:fkmt5:20170308215743p:image

2017-02-20 WPFで1pixelの線を引くことの難しさ

WPF 2D

ちょっと、気を抜いたら2週間経ってた。

WPFの論理ピクセル単位(アンチエイリアスあり)の描画
f:id:fkmt5:20170220230707p:image

アンチエリアスオフの描画(RenderOptions.EdgeMode="Aliased")
f:id:fkmt5:20170220225209p:image

ま、表題通りなんやけど。
最終的にはDirect2Dで解決するつもりなんで深く追求してないんやけど
SnapsToDevicePixels="True"も1pixelの幅を考慮した座標に0.5足すハックもRenderOptions.EdgeMode="Aliased"(いわゆるアンチエイリアシングの逆)もうまくいかない。
その辺は、エッセンシャルWPFでもさらっと流してて、さらに言えば昨今の4Kディスプレイとかの高DPI環境ではどうなんのかとか全然わからん。

4Kモニタでドットバイドットの1物理ピクセルの線なんて見えんのかしら。

UserControlのOnRenderメソッドをオーバーライドしてDrawingContextにベクタグラフィック直書きしてるんやけど、全然うまくいってない。
なんか設定ミスってるだけなんかも知らんし、優先度の高い課題ってわけじゃないんで保留にする。

結局最後はDirect2Dで描くつもりなんで、やっぱ気合入んないのよねって結論。