12243点,結婚数10170のCollatz4000X.ZELが開けた

ようやく難題が一つ片付いた.というか,まだ完全には終わっていないが,片付くという目処は付いた.確定的な原因は不明だが,サンプルサイズが大きくなると,座標計算のどこかでオーバーフローによる障害が発生しているように思われる.とりあえず,フォントサイズを小さくすることで描画できるところまでは漕ぎ着けた.箱は正しく描画できているのだが,名前のサイズと位置が悪い.

現行ではWin 32でビルドしているので,8バイトを超える整数ではオーバーフローが起きる可能性がある.描画フェーズ以前ではすべての計算は論理座標系で行っているはずだが,現行では論理座標系=物理座標系=ピクセル座標系になっているのではないかと思う.論理座標系は物理座標系から切り離すことができるはずであり,実際,現在はPNTPERLOGという変換パラメータを4倍にすることで,1/4に縮小している.本来なら,これで描画できてもよいはずなのだが… ⇒座標計算では縮小しているが,描画ではフォントサイズをそのまま適用しているためだろう.⇒COUPLING::m_logfont1/2/3を直接参照している.やはり,これを直接書き換えるしかないのではないか?

DrawTextLineで強制的にフォントサイズを縮小して,氏名だけは枠内に表示できるようになったが,まだ位置が悪い.また,付帯情報として表示している数字は大きいままだ.むしろ,ファイルを読み込んだときに調整した方が早いのではないか?⇒とりあえず,これが一番簡便な方法だ.暫定的にこれで運用することにしよう.

image

とりあえず全体を描画できるようになったが,ズーム倍率は211%止まりでそれ以上には拡大できない.また,メモリ描画環境も落ちて,生描画になってしまう.⇒SIZEOVERAUTOZOOMOUTというオプションを外したら,500%でも描画できるようになった.

image

これなら,まぁまぁ使い物になるのではないだろうか?一部にカードのダブりが出ているが,その辺りは後で見ることにしよう.Collatz12146.ZELも描画できた.Collatz4000X.ZELというのを開いてみよう.多分,これが手元のサンプルでは最大級ではないかと思う.このサンプルは12243点,結婚数10170なので,Collatz12146よりも少しだけ大きい.⇒レッドラインオーバーになってしまった.ただし,現行ではレッドラインを30回に引いているので,もう少し大きくすれば多分パスできると思う.⇒いや,ダメだ.やはり,まだオーバーフローがどこかで生じているのだろう.⇒フォントサイズを1/5まで縮小して描画できるようになった.この関係を定式化しなくてはならない.

フォントサイズを極限の1×1まで縮小しても作図可能であることは確認できた.三極検定ではこの極端な設定で計算し,事後に実際のフォントサイズを割り当てるということができれば最善なのだが,可能だろうか?そうなれば,名実ともに「論理フォント」と呼ぶに相応しい位置付けになるのだが…しかし,実サイズに戻したときにもオーバーフローのリスクはあり,また,再計算が収束しないという可能性もあるので,現行論理の延長上で収めるというのが妥当な線かもしれない…


コメントを残す

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

CAPTCHA