Global koordinat alanından yerel bir alana nasıl dönüştürebilirim?


13

Adlı bir varlık göz önüne alındığında EntityA, konumun EntityAbaşlangıç ​​noktası, başlık vektörü X ekseni ve başlık vektörünün normalinin Y ekseni olduğu yerel bir koordinat alanı tanımlamak istiyorum :

aynı resimsel açıklaması

Küresel koordinatları göz önüne alındığında, başka bir varlığın EntityAyerel alanındaki konumunu nasıl bulabilirim ?

Bir örnek: EntityA'in küresel konumu (50,50)' dir ve EntityB(80,90) 'ın konumu . Pozisyonu ne peki EntityBiçinde EntityAbireyin yerel alan?

EDIT: Lütfen matematik kolay gidin.

Yanıtlar:


21

Tamam, yani bu A nesnesi için Dünya Dönüşüm matrisinin ne olduğunu bildiğinizi varsayarsak, sadece bu matrisin tersini oluşturmanız gerekir ve ihtiyacınız olan şeye sahip olursunuz.

A nesnesinin Global Space'e ulaşmak için kullanılan dönme, ölçekleme ve çeviri matrislerinin sırasıyla R , S ve T olduğunu varsayalım . Bunları bir araya getireceksiniz.

S * R * T = W

Şimdi W'yi alın ve ters W ^ -1'ini bir şekilde bulun . Bir matrisin tersi, tam tersini yapan matristir. Matrisin tersi ile çarpımı daima kimlik matrisidir.

G * G ^ -1 = I

böylece W ^ -1 = I / W ;

Şimdi bu ters matrisi dünya sahneye dönüştüğünde uygulayın ve her nesne istediğiniz koordinatlarda olacak.

Matris çarpımı için, bkz. Bu sayfa. Kimlik matrisi için bkz .

İşte size W yapmanız gereken matrisleri veren başka bir sayfa .

Yukarıdaki soruda, x ekseninde 50, y ekseninde 50, her iki eksende de ölçekleme olmamalı ve belirtmediğiniz bir dönüş almalısınız.


Cevabınız için teşekkürler ama aslında bunun pek çoğunu anlamıyorum. Matematikte pek iyi değil. Bir matris nedir? 'Döndürme, ölçekleme ve çeviri matrisleri' ile ne demek istiyorsun?
Aviv Cohn

Bir matris birbiriyle sayı veya bir nesne setini temsil çok kompakt bir yöntemdir. Bilgisayar grafiklerinde, hesaplama yapmak için yaygın olarak kullanılırlar. Döndürme çevirisi ve Ölçekleme matrisleri ile ne demek istediğimi bilmek için yanıttaki son bağlantıyı kontrol edin. evet, hepsini okumak zorunda kalacaksınız. Aksi takdirde, sorununuzu çözmek için ashes999'un yöntemini kullanabilirsiniz, ancak bu kazandı; t VarsaA'nın dönmesini ve ölçeklenmesini açıklar.
Işık Kıvılcımı

9

Bunu geçmişte matrislerden ziyade trigonometri ile yaptım (ben bir matris çaylakıyım). Ashes999'un cevabı orada, göreli vektörü al, sonra EntityA'nın açısının tersine doğru döndür.

   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 Trigonometriyi matrislerden çok daha sezgisel ve kullanımı daha kolay.
Ramchandra Apte

Ölçek ne olacak? Ne zaman uygularsınız?
Llamageddon

Üzgünüm, rotasyon demekti.
Llamageddon

6

Size Işık Kıvılcımı'nın yanıtı ve Elliot'un yanıtı arasında bir yer vermeye çalışmama izin verin, çünkü okuduğumdan, sadece size atılan matematik değil, takip edecek bir algoritma arıyorsunuz.

Sorun İfadesi: Bir konumunuz A (50, 50)ve bir başlığınız olduğu göz önüne alındığında ( bir konum sağlamadığınız için bunu şu şekilde iddia edeceğim y = 2 * x + 25), nereye ve başlığa B (80, 90)göreceli olduğunu bulun A.

Yapmak istediğiniz şey aslında oldukça basittir. 1) ASisteminizin kökenine geçin. Bu, yerel Adeğerlerin küresel konum değerleri eksi küresel konum değerleri olacağı anlamına gelir A. Aolur (0, 0)ve Bolur (30, 40).

1.1) Başlığın da taşınması gerekir. Bunu yapmak gerçekten çok kolaydır, çünkü yerel Aterimlerdeki y kesme noktası her zaman 0'dır ve eğim değişmeyecektir, bu nedenle y = 2 * xbaşlık olarak elimizde .

2) Şimdi önceki istikameti X eksenine hizalamamız gerekiyor. Peki, bunu nasıl yapıyoruz? Kavramsal olarak bunu yapmanın en kolay yolu, x, y koordinatlarından kutupsal koordinat sistemine dönüştürmektir. Kutupsal koordinat sistemi, Rbir konuma uzaklık phive x ekseninden bir dönüş açısı içerir. Rolarak tanımlanır sqrt(x^2 + y^2)ve phiolarak tanımlanır atan(y / x). Bugünlerde çoğu bilgisayar dili devam ediyor ve atan2(y, x)aynı şeyi yapan, atan(y/x)ancak çıktı 0 derece ila 360 derece yerine -180 derece ila 180 derece arasında olacak, ancak her ikisi de çalışacak bir işlevi tanımlar .

Bböylece R = sqrt(30^2 + 40^2) = sqrt(2500) = 50ve phi = atan2(40, 30) = 53.13derece olarak olur.

Benzer şekilde, başlık şimdi değişiyor. Bunu açıklamak biraz zordur, ancak başlık, tanım gereği her zaman kökenimizden geçer A, Rbileşen hakkında endişelenmemize gerek yoktur . Başlıklar her zaman sabitin phi = Cnerede Colduğu şeklinde olacaktır . Bu durumda phi = atan(2 * x / x) = atan(2) = 63.435derece.

Şimdi, başlığı yerel Asistemden X eksenine taşımak için sistemi döndürebiliriz . Çok biz taşındığında gibi Asistemin kökeni, yapmamız gereken tüm çıkarma olduğu phitüm başlığının phisisteminde değerler. Yani phibir Bhale 53.13 - 63.435 = -10.305derecelerde.

Son olarak, kutupsal koordinatlardan x, y koordinatlarına geri dönüş yapmalıyız. Bu dönüşümü yapacak formül X = R * cos(phi)ve Y = R * sin(phi). İçin Bbu nedenle, biz almak X = 50 * cos(-10.305) = 49.2ve Y = 50 * sin(-10.305) = 8.9böylece, Byerel-to-de Ayakındır koordinatları (49,9).

Umarım bu size yardımcı olur ve takip etmeniz için matematikte yeterince hafiftir.


1

Varlık A'nın global alanda (x1, y1, θ) pozunu bilmeniz gerekir; burada θ, x eksenine göre yönlendirmedir.

EntityB konumunu bir global koordinattan (x2, y2) bir yerel koordinata (x2 ', y2') dönüştürmek için:


  1. İfadeleri kullanma

Globalden Lokal'a

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

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

Yerelden Global'e

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

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

  1. Matrisleri kullanma:

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

Globalden Lokal'a

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

Yerelden Global'e

    B_global = R x B_local + A

-2

Basitçe ifade etmek gerekirse, B işletmesinin A işletmesine referans yapması gerekir. Daha sonra, işletmenin A pozisyonu ile B işletmesinin pozisyonu arasındaki farkı elde etmeniz gerekir.


3
Bunun soruyu nasıl cevapladığını anlamıyorum.
Anko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.