極小反例サンプル.zelが描画できた!

1931点の53直系血族図.ZELは22回でループを脱出している.6165点のCollatz3900-6165.ZELは24回で描画できる.これが今のところ描画可能な最大サンプルだ.12146点のCollatz12146.ZELなどでは,結婚点不一致が20点近くまで減少した後,増加に転じその後は,ほぼ単調に増加し続けるような動作になっている.現行では結婚点が一致している場合には無条件でセグメントをマージするようになっている.セグメント検定に何か致命的な瑕疵があることは間違いないように思われるが,それを突き止めるのは至難の業だ.どうすればよいのだろう?

ともかく,ブレークして一度描画させてみることにしよう.極小反例サンプルを開いてみる.

極小反例サンプル.zelをレッドラインオーバーで開いた後,ズーム倍率を切り替えようとして例外が発生した.

image

CDC::_LPtoDPでエラーが発生している模様だ.レンジオーバーの可能性もある.矩形の右座標が2995305になっている.16進で0x2DB469だ.その前にポイント座標で83869328=0x4FFBEいう値が入っている.POINT という構造体はLONGで構成されている.LONG=longであるとすると,32ビットしかない.しかし,INT_MAXは2147483647で0x7FFFFFFFまでカバーしていることになっている.

TREEVIEW::LimitSizeOverではLIMITSIZE=0x7D00と見ている.ただし,現在はこの関数は呼び出されていない.SIZEOVERAUTOZOOMOUTをオンにしてビルドしてみよう.

!解けた!極小反例サンプル.zelが描画できた!

image

どうも,どこかでレンジオーバーが置きていたもののように思われる.フォントサイズを強制的に四分の一に縮小して描画できた.ただし,100%までズームすると,かなり悲惨なことになってしまう.

image

フォントの描画関数の方は調整していないので,こうなってしまうのは仕方ない.また,100%と言っても,1/4の縮小図面の100%なので,通常の見慣れたサイズで表示されるという訳ではない.ともかく,何らかの方法で折り合いを付けなくてはならないが,それも結構手間が掛かりそうだ.というか,こういう巨大サンプルをどう扱うかという基本的な課題についてもう少し考察を深める必要がある.それでも,ともかく描画できるようになったということは喜ばしいことだ.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA