1

現在、ポリゴンメッシュをアイソメ図(html5キャンバス2Dコンテキスト)でレンダリングしようとしています。
平面の回転を見つけるための正しい計算/アルゴリズムが見つからないことを除いて、私の作業はほぼ完了しています。

例では、2つのベクトルOx、Oyによって定義された平面AとBがあります

var planeA = {
    Ox: {
        x: 1,
        y: -2,
        x: 1,
    }, Oy: {
        x: 1,
        y: -1,
        z: 0,
    }
}

var planeB = {
    Ox: {
        x: 0,
        y: 1,
        x: 0,
    }, Oy: {
        x: 0,
        y: 0,
        z: -1,
    }
}

平面Aを平面Bと同じ法線にするために、アルファ(Oxの周りの回転)、ベータ(Oyの周りの回転)、およびガンマ(Ozの周りの回転)を見つけて平面Aに適用したいと思います。

4

1 に答える 1

2

まず、ベクトルの外積を取り、次に正規化することによって法線を見つけます。

2つのベクトルABの外積をとるには、次の式を使用します。

C x = A y * B z -A z * B y
C y = -A x * B z + A z * B x
C z = A x * B y -A y * B x

(順序が重要であることに注意してください。通常、AxB BxAです

したがって、2つの平面の場合、外積は(1,1,1)と(-1,0,0)です。

ベクトルを正規化するには、ベクトルをその大きさで割ります。したがって、平面の法線ベクトルは(1 / sqrt(3))(1,1,1)および(-1,0,0)です。

次に、ベクトルを別のベクトルに回転させます(私はあなたが持っていると仮定しatan2()、あなたは右手の法則を冷たくしていると仮定します):

1. O xを中心に回転します。AをXZ平面に入れるには、atan2(A y、A z)だけ回転します。2. O y:を
中心に回転して、正しいphi(O zからの角度)に到達します。Phi Bはatan2(sqrt(B x 2 + B y 2)、B z)であるため、atan2(sqrt(B x 2 + B y 2)、B z)-atan2(A x、A z
3だけ回転します。 O zを中心に回転:正しい「経度」に到達するには、atan2(B y、B x)-atan2(A y、A x)。

したがって、この例では、AをOxの周りにπ/4だけ回転させて(sqrt(2/3)、 0、sqrt(1/3))を取得し、次にOyの周りをπ/2だけ回転させます--atan(sqrt(2 ))(1,0,0)を取得し、次にO zをπで囲んで(-1,0,0)を取得します。

于 2012-11-16T18:10:56.400 に答える