同じ値を計算する方法が複数ある場合があります。どちらがより効率的で、atan2かsqrtですか?
今、私は2次元凸多角形を「展開」するアルゴリズムを考え出しています。これを行うために、私は各頂点を摂動する方向を見つけたいと思う。同じ厚さの「スキン」を有するポリゴンを全周に展開する結果を生成するためには、その方向で摂動する量も頂点での角度に依存する。しかし、今私は方向性が心配です。
atan2を使用する方法の1つは、Bを私の頂点、Aを前の頂点、Cを次の頂点とすることです。私の方向は「角度平均」angle(B-A)
とangle(B-C)
です。
もう1つの方法は、sqrt:unit(B-A)+unit(B-C)
です。unit(X)
がX/length(X)
の場合、私の方向のベクトルが得られます。
平均角度値が少しの作業を必要とするので、方法番号2に向かって傾いています。しかし、私は基本的にatan2への2回の呼び出しとsqrtへの2回の呼び出しのどちらかを選択しています。どちらが一般的に高速ですか?シェイダープログラムでこれをやっていたらどうでしょう?
私は自分自身でプログラムを最適化しようとしているわけではありません。これらの機能が一般的にどのように実装されているかを知りたいのです(標準のCライブラリなど)。より良い選択。
私が知っているので、sqrt関数とtrig関数の両方では、答えに到達するための反復メソッドが必要です。これが、可能な限り避けようとする理由です。人々はルックアップテーブルや補間などを使ってより速い結果を出す "近似"関数を思いついた。これらのルーチンやルーチンに深く関わっているためにコードにボトルネックがあるという強い証拠が見つからない限り、私はもちろんこれらを気にすることはありませんが、sqrt、trig funcs、およびinverse trig funcsの違いは、 。
ベストアンサーは、あなたが試してみることです。 – madth3
「拡大」を「縮尺」とすると、各ベクトルに定数を掛けることができます。 –
@ BlueRaja-DannyPflughoeft表現がそのようなことを許すなら、それは便利だろう。もし私がポリゴンの重心を知っていれば。重心の計算にはクロスプロダクトのみが含まれるため、ここに何かがあるかもしれません! –