[トピック内 4 記事 (1 - 4 表示)] << 0 >>
二点間の距離を求めるために 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 -