グローバル座標空間からローカル空間に変換するにはどうすればよいですか?


13

という名前のエンティティが与えられた場合、EntityAローカル座標空間を定義します。ここで、の位置EntityAは原点、その見出しベクトルはX軸、見出しベクトルの法線はY軸です。

同じの絵の説明

グローバル座標が与えられている場合、EntityAのローカル空間で別のエンティティの位置を見つけるにはどうすればよいですか?

例:EntityAのグローバルポジションは(50,50)であり、それEntityBは(80,90)です。では、のローカル空間EntityBEntityAの位置は何ですか?

編集:数学で簡単に行ってください。

回答:


21

さて、そのオブジェクトAのワールド変換マトリックスが何であるかを知っていると仮定すると、そのマトリックスの逆行列を作成するだけで、必要なものが得られます。

グローバルスペースに到達するために使用されるオブジェクトAの回転、スケーリング、および変換行列がそれぞれRS、およびTであるとします。これらを一緒に掛けます

S * R * T = W

次に、Wを取得、その逆W ^ -1をなんとか見つけます。マトリックスの逆は、ちょうど反対のことを行うマトリックスです。行列とその逆行列の積は、常に単位行列です。

W * W ^ -1 = I

したがって、W ^ -1 = I / W ;

次に、この逆行列をワールド変換としてシーンに適用すると、各オブジェクトが希望の座標になります。

行列の乗算については、このページを参照してください。 単位行列については、こちらをご覧ください

Wを作成するために必要な行列を提供する別のページを次に示します。

上記の質問では、x軸の平行移動を50、y軸の平行移動を50、どちらの軸にもスケーリングなし、指定していない回転を使用する必要があります。


答えてくれてありがとう、しかし私は実際にこれの多くを理解していない。数学にはあまり向いていません。とは行列ですか?「回転、スケーリング、および変換行列」とはどういう意味ですか?
アビブコーン14

A マトリックスは、相互に数値またはオブジェクトの集合を表現する非常にコンパクトな方法です。コンピューターグラフィックスでは、計算を行うために広く使用されます。答えの最後のリンクをチェックして、回転変換とスケーリングマトリックスの意味を確認してください。はい、すべてを読む必要があります。それ以外の場合は、ashes999のメソッドを使用して問題を解決できますが、EntityAの回転とスケーリングがある場合はそれを考慮しません。
ライトスパーク14

9

私は過去にマトリックスではなく三角法でこれを行いました(私はマトリックス初心者です)。Ashes999の答えはその半分です。相対ベクトルを取得し、それをEntityAの角度の逆数だけ回転させます。

   relativeX = B.x - A.x
   relativeY = B.y - A.y
   rotatedX = Cos(-Angle) * relativeX - Sin(-Angle) * relativeY
   rotatedY = Cos(-Angle) * relativeY + Sin(-Angle) * relativeX

2
+1マトリックスよりもはるかに直感的で使いやすい三角法。
Ramchandra Apte

スケールはどうですか?いつ適用しますか?
ラマゲドン

申し訳ありませんが、ローテーションを意味します。
ラマゲドン

6

ライトスパークの答えとエリオットの答えの間のどこかにあなたに何かを与えてみましょう。

問題の記述:場所A (50, 50)と見出しがある場合(場所を指定しなかったため、「」と断言しますy = 2 * x + 25)、見出しB (80, 90)と相対的な場所を見つけますA

あなたがしたいことは実際にはかなり簡単です。1)Aシステムの元に移動します。これは単に、local-to- Avaluesがグローバル位置値からグローバル位置値を引いたものになることを意味しますAAとなり(0, 0)Bなり(30, 40)

1.1)見出しも移動する必要があります。local-to- Aterm のy切片は常に0で、勾配は変わらないため、これは実際には非常に簡単y = 2 * xです。見出しとして使用します。

2)次に、前の見出しをX軸に揃える必要があります。だから、これをどうやってやるの?概念的にこれを行う最も簡単な方法は、x、y座標から極座標系に変換することです。極座標系には、、R場所までの距離、およびphix軸からの回転角度が含まれます。Rとして定義されsqrt(x^2 + y^2)phiとして定義されatan(y / x)ます。最近のほとんどのコンピューター言語は、出力が0度から360度ではなく-180度から180度になる傾向があるようにatan2(y, x)、まったく同じことを行う関数を定義しますatan(y/x)が、どちらも機能します。

BしたがってR = sqrt(30^2 + 40^2) = sqrt(2500) = 50、とphi = atan2(40, 30) = 53.13になります。

同様に、見出しが変更されました。これは説明するのが少し難しいですが、定義により見出しが常に原点を通過Aするため、Rコンポーネントについて心配する必要はありません。見出しは常に定数がphi = Cどこにあるかという形になりますC。この場合、phi = atan(2 * x / x) = atan(2) = 63.435度。

これで、システムを回転させて、ローカルからAシステムのX軸に見出しを移動できます。Aシステムの原点に移動したときと同じように、システム内のphiすべてのphi値から見出しを減算するだけです。ので、度phiBなり53.13 - 63.435 = -10.305ます。

最後に、極座標からx、y座標に戻す必要があります。その変換を行うための式があるX = R * cos(phi)Y = R * sin(phi)。以下のためにBそれゆえ、我々が得るX = 50 * cos(-10.305) = 49.2Y = 50 * sin(-10.305) = 8.9、そのB地域の対中A座標近くにあります(49,9)

うまくいけば、それが助けになり、あなたが従うのに十分な数学の光である。


1

グローバル空間(x1、y1、θ)でのエンティティAの姿勢を知る必要があります。ここで、θはx軸に対する方向です。

EntityBの場所をグローバル座標(x2、y2)からローカル座標(x2 '、y2')に変換するには:


  1. 式を使用する

グローバルからローカル

x2' = (x2-x1)cosθ + (y2-y1)sinθ

y2' = -(x2-x1)sinθ + (y2-y1)cosθ

ローカルからグローバル

x2 = x2'cosθ - y2'sinθ + x1

y2 = x2'sinθ + y2'cosθ + y1

  1. マトリックスの使用:

    R = [cosθ   -sinθ
    
         sinθ    cosθ]
    
    A = [x1
         y1]
    
    B_global = [x2
                y2]
    
    B_local = [x2' 
               y2']

グローバルからローカル

    B_local = inv(R) x (B_global - A)

ローカルからグローバル

    B_global = R x B_local + A

-2

簡単に言えば、エンティティBにはエンティティAへの参照が必要になります。エンティティAの位置とエンティティBの位置の差を取得する必要があります。


3
これが質問にどのように答えるかはわかりません。
アンコ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.