こちらの続きです。
端点一致を探る、組み合わせテスト6 - C#ATIA
一ヶ所だけバグを発見しました。
こちらのコードですが
端点一致を探る、組み合わせテスト3 - C#ATIA
GetPointElem関数内のGet3DMortonNumber関数を利用する際の引数部分の
計算式を
CByte((p(0) - rgnMin(0)) / unit(0))
こんな風にしていました。 細かな事は抜きにしてオリジナルのコードとしては、
"計算値の値の小数点以下を切り捨てる" 事をやっており
それをVBA化したつもりでした。
前回の座標値(9,9,9)の場合は、結局
CByte((9 - (-10)) / 5)
と言う処理になります。これをイミディエイトウインドウで計算させると
?CByte((9 - (-10)) / 5) 4
ん? 電卓でも計算できますが、キャスト(型変換)を除いた結果を見ると
?(9 - (-10)) / 5 3.8
切り捨ててないじゃないですか。 長年キャストは切り捨てだと思い込んでました。
無い知恵絞って、商を取れば良いんだな と思いこのようにしましたが
?((9 - (-10)) / 5)\1 4
商、お前もか!
調べて見るとIntとFixと言うのがあるんですね、知りませんでした。
【VB6/VBA】数値を切り上げ/切り下げする - オープンリファレンス
負の数が必要かどうか確認していませんが、
?Fix((9 - (-10)) / 5) 3
これなら正しいです。GetPointElem関数をとりあえずFixに直すと
座標値2 モートン順序 "63" で正しいです。 ボリューム時のインデックスNoは
まだ直っていませんが。 ・・・こんなレベルから戦うのはシンドイなぁ。
※追記です
コメント頂いた分の画像です。