Oke, jadi anggaplah Anda tahu apa matriks World Transformation untuk objek A itu, Anda hanya perlu membuat kebalikan dari matriks itu dan Anda akan mendapatkan apa yang Anda butuhkan.
Misalkan rotasi, penskalaan dan matriks terjemahan dari objek A yang digunakan untuk mendapatkannya ke Global Space adalah R , S dan T masing-masing. Anda akan mengalikannya menjadi seperti ini
S * R * T = W
Sekarang, ambil W dan temukan kebalikannya W ^ -1 . Kebalikan dari matriks adalah matriks yang melakukan sebaliknya. Produk dari matriks dengan kebalikannya selalu matriks identitas.
W * W ^ -1 = I
dengan demikian W ^ -1 = I / W ;
Sekarang Terapkan matriks terbalik ini sebagai transformasi dunia ke adegan dan setiap objek akan berada dalam koordinat yang Anda inginkan.
Untuk perkalian matriks, lihat halaman ini.
Untuk matriks Identity, lihat ini.
Berikut halaman lain yang memberikan Anda matriks Anda akan perlu untuk membuat W .
Dalam pertanyaan di atas, Anda harus mengambil terjemahan dalam sumbu x 50, terjemahan dalam sumbu y sebagai 50, tidak ada penskalaan di kedua sumbu, dan rotasi yang belum Anda tentukan.
Saya sudah melakukan ini dengan trigonometri daripada matriks di masa lalu (saya seorang noob matriks). Jawaban Ashes999 ada di tengah-tengah, dapatkan vektor relatif, lalu putar dengan kebalikan dari sudut EntityA.
sumber
Biarkan saya mencoba memberi Anda sesuatu di antara jawaban The Light Spark dan jawaban Elliot, karena dari apa yang saya baca, Anda benar-benar mencari algoritma untuk diikuti dan bukan hanya matematika yang dilemparkan kepada Anda.
Pernyataan Masalah: Karena Anda memiliki lokasi
A (50, 50)
dan tajuk (karena Anda tidak menyediakannya, saya akan menyatakannya sebagaiy = 2 * x + 25
), cari di manaB (80, 90)
relatif terhadapA
dan tajuk tersebut.Apa yang ingin Anda lakukan sebenarnya cukup mudah. 1) Pindahkan
A
ke tempat asal sistem Anda. Ini hanya berarti bahwa nilai-A
nilai lokal akan menjadi nilai posisi global dikurangi nilai posisi globalA
.A
menjadi(0, 0)
danB
menjadi(30, 40)
.1.1) Judul juga perlu dipindahkan. Ini sebenarnya sangat mudah dilakukan, karena intersepsi y dalam
A
istilah lokal selalu 0, dan kemiringannya tidak akan berubah, jadi kami memilikiy = 2 * x
judulnya.2) Sekarang kita perlu menyelaraskan heading sebelumnya ke sumbu X. Jadi, bagaimana kita melakukan ini? Cara termudah, secara konseptual untuk melakukan ini adalah mengkonversi dari koordinat x, y ke sistem koordinat polar. Sistem koordinat kutub melibatkan
R
, jarak ke lokasi, danphi
, sudut rotasi dari sumbu x.R
didefinisikan sebagaisqrt(x^2 + y^2)
danphi
didefinisikan sebagaiatan(y / x)
. Sebagian besar bahasa komputer akhir-akhir ini maju dan mendefinisikanatan2(y, x)
fungsi yang melakukan hal yang sama persis sepertiatan(y/x)
tetapi melakukannya sedemikian rupa sehingga output cenderung dari -180 derajat ke 180 derajat daripada 0 derajat ke 360 derajat, tetapi keduanya berfungsi.B
dengan demikian menjadiR = sqrt(30^2 + 40^2) = sqrt(2500) = 50
, danphi = atan2(40, 30) = 53.13
dalam derajat.Demikian pula, tajuk sekarang berubah. Ini agak sulit untuk dijelaskan, tetapi karena judulnya, menurut definisi, selalu melewati asal
A
kita, kita tidak perlu khawatir tentangR
komponennya. Judul selalu akan dalam bentuk diphi = C
manaC
konstan. Dalam hal ini,phi = atan(2 * x / x) = atan(2) = 63.435
derajat.Sekarang, kita dapat memutar sistem untuk memindahkan heading ke sumbu-X dari sistem-lokal
A
. Sama seperti ketika kita pindahA
ke asal sistem, yang harus kita lakukan adalah mengurangiphi
judul dari semuaphi
nilai dalam sistem. Jadiphi
dariB
menjadi53.13 - 63.435 = -10.305
derajat.Akhirnya, kita harus mengubah kembali dari koordinat polar menjadi koordinat x, y. Formula untuk melakukan transformasi itu adalah
X = R * cos(phi)
danY = R * sin(phi)
. KarenaB
itu, kami mendapatkanX = 50 * cos(-10.305) = 49.2
danY = 50 * sin(-10.305) = 8.9
, jadiB
dalamA
koordinasi lokal dekat(49,9)
.Semoga itu membantu, dan cukup ringan pada matematika untuk Anda ikuti.
sumber
Anda perlu mengetahui pose Entity A di ruang global (x1, y1, θ), di mana θ adalah orientasi relatif terhadap sumbu x.
Untuk mengonversi lokasi EntityB dari koordinat global (x2, y2) ke koordinat lokal (x2 ', y2'):
Global ke Lokal
Lokal ke Global
Menggunakan matriks:
Global ke Lokal
Lokal ke Global
sumber
Sederhananya entitas B akan memerlukan referensi ke entitas A. Anda kemudian harus mendapatkan perbedaan antara posisi entitas A dan posisi entitas B.
sumber