二点間の距離を求めるためにsqrt( a*a + b*b )という計算を何度も行うため、多少、精度が悪くても良いので高速に行いたいのですが検索すると結構、高速化のアルゴリズムが書かれたページが見つかります。http://www.geocities.co.jp/SiliconValley-PaloAlto/5438/sqrt.htm例えば、このページには u_long sqrt2(u_long f) { u_long s = f,t; if(x == 0) return 0; do { t = s; s = (t + f / t) >> 1; }while(s < t); return t; }というコードが書かれていますがこれをVBで書き換えるとどうなりますか?自分でやろうとしたのですが if(x == 0)という分岐が出てくるのにその前にxが宣言されていないのでどうすれば良いか分かりませんでした。
この手の話は経験上、毎回の sqrt( a*a + b*b ) を速くするより、 式の簡略化の方が効果が大きいです。 例えば、複数の2点間の距離のうち、最小となる2点を求めるなら、 a*a + b*b の結果を比較すれば十分。 なぜなら、a*a + b*b が最小なら、sqrt( a*a + b*b )も最小と 決まっているから。 最小の2点が見つかった後、最後に画面に2点間の距離を表示する 際に sqrt() すれば良いです。 私の方は、上記の式の確認は行っておりませんが、 同じように簡略化できるか検討してみると良いです。
- Child Tree -