Sebenarnya, ternyata Anda tidak bisa memilikinya 'dua arah': jika niat Anda adalah untuk tidak memiliki rasa 'orientasi absolut' di bola (yaitu, jika para pemain tidak selalu eg menghadap ke arah kutub ), maka Anda harus memiliki gagasan tentang orientasi pemain. Ini karena, bertentangan dengan apa yang mungkin dikatakan oleh intuisi, gerakan di bola tidak persis seperti gerakan di pesawat, bahkan tidak secara lokal (cukup); lengkungan intrinsik bola berarti bahwa pemain dapat mengambil tindakan yang akan memutar diri mereka sendiri!
Untuk contoh paling ekstrim dari apa yang saya bicarakan, bayangkan bahwa pemain mulai pada titik di khatulistiwa (untuk kenyamanan kita akan membayangkan wajah jam dipetakan ke khatulistiwa dari atas, dan menempatkan pemain pada jam 6 ), menghadap 'atas' - yaitu, menuju Kutub Utara. Misalkan pemain berjalan sampai ke Kutub Utara; maka mereka akan menghadap langsung ke titik 12:00. Sekarang, biarkan pemain bergerak langsung ke kanan, dari Kutub Utara kembali ke khatulistiwa; mereka akan berakhir pada titik jam 3 - tetapi karena wajah mereka tidak berubah ketika mereka bergerak ke kanan(Idenya adalah bahwa wajah mereka tidak berubah tidak peduli bagaimana mereka bergerak), mereka masih akan menghadapi titik jam 12 - mereka sekarang menghadapi sepanjang garis katulistiwa! Sekarang, biarkan mereka bergerak 'mundur' kembali ke titik awal (jam 6); maka mereka masih akan menghadap ke garis khatulistiwa, jadi mereka akan menghadap ke arah jam 3 - hanya bergerak di sepanjang bola tanpa pernah mengubah orientasi 'pribadi' mereka telah menyebabkan mereka berputar dari menghadap ke arah kutub utara ke menghadap ke garis khatulistiwa! Dalam arti tertentu, ini adalah penjabaran dari yang lama 'seorang pemburu bergerak satu mil ke selatan, satu mil ke barat dan kemudian satu mil ke utara' lelucon - tetapi di sini kita mengambil keuntungan dari lengkungan bola untuk menghasilkan perubahan arah. Perhatikan bahwa efek yang sama masih terjadi bahkan pada skala yang jauh lebih kecil;
Untungnya, angka empat melakukan (seperti yang Anda catat sendiri) menangani situasi ini; karena angka empat mewakili rotasi sewenang-wenang, itu secara efektif mewakili 'titik plus orientasi' sewenang-wenang di bola: bayangkan mulai dengan 'triaksi' di titik asal dan berikan beberapa rotasi acak, lalu gerakkan satu unit ke arah mana pun sumbu diputar ' Titik sumbu Z; sedikit pemikiran akan meyakinkan Anda bahwa ini membawa Anda ke titik di unit bola dengan beberapa 'orientasi' (yaitu, beberapa pengaturan sumbu X dan Y dari triaksi Anda), dan bahwa Anda bisa mendapatkan setiap titik + orientasi pada unit sphere dengan cara ini (cukup tetapkan sumbu Z Anda untuk menunjuk sepanjang garis dari titik asal melalui titik Anda pada bola, lalu bawa triaksi Anda kembali ke titik asal di sepanjang garis itu). Apalagi, karena penggandaan angka empat sesuai dengan komposisi rotasi, setiap operasi yang Anda gambarkan dapat diwakili dengan mengalikan 'orientasi Anda saat ini' dengan angka empat yang dipilih secara tepat: khususnya, karena angka empat (unit) angka empat (qx, qy, qz, qw) berarti 'memutar tentang sumbu (qx, qy, qz) oleh arccos (qw)', lalu (tergantung pada pilihan spesifik sistem koordinat Anda, dan membiarkan c_a menjadi cos (alpha) dan s_a menjadi sin (alpha)) dua dari tiga angka empat M_x = (s_a, 0, 0, c_a), M_y = (0, s_a, 0, c_a), dan M_z = (0, 0, s_a, c_a) akan mewakili 'rotate (yaitu bergerak) ke arah I 'Saya saat ini dihadapkan oleh alpha' dan 'putar ke arah orthogonal dengan yang saya sedang hadapi oleh alpha'. (Yang ketiga dari empat angka tersebut akan mewakili 'putar karakter saya tentang porosnya sendiri'Cur_q = M_x * Cur_q
jika pemain telah menekan ke atas, atau Cur_q = M_y * Cur_q
jika pemain menekan ke kanan (atau mungkin sesuatu seperti Cur_q = M_yinv * Cur_q
jika pemain menekan ke kiri, di mana M_yinv adalah 'kebalikan' dari angka empat M_y, mewakili rotasi dengan cara lain). Perhatikan bahwa Anda harus berhati-hati di 'sisi' mana Anda menerapkan rotasi, apakah untuk pra-kelahiran atau pascamultiply; sejujurnya, mungkin paling mudah untuk menyelesaikannya dengan coba-coba, mencoba penggandaan dan melihat mana yang berhasil.
Beralih dari angka empat yang diperbarui ke titik di bola (dan ke orientasi karakter Anda) juga relatif mudah: dengan korespondensi paragraf terakhir, yang harus Anda lakukan adalah menggunakan angka empat Anda berdasarkan vektor (1, 0,0), (0,1,0) dan (0,0,1) dari frame Anda melalui operasi 'rotate vector by quaternion' v → qvq -1 (di mana perkalian di sini adalah angka empat dikalikan dan kami mengidentifikasi vektor v = (x, y, z) dengan 'angka empat yang merosot' (x, y, z, 0)). Misalnya, posisi pada unit sphere didapat dengan hanya mentransformasikan vektor z: pos = (qx, qy, qz, qw) * (0, 0, 1, 0) * (-qx, -qy, -qz, qw) = (qx, qy, qz, qw) * (qy, -qx, qw, qz) = (2 (qy * qw + qz * qx), 2 (qz * qy-qw * qx), (qz ^ 2 + qw ^ 2) - (qx ^ 2 + qy ^ 2), 0), jadi(2(qy*qw+qz*qx), 2(qz*qy-qw*qx), (qz^2+qw^2)-(qx^2+qy^2))
akan menjadi koordinat dari pengguna yang 'ditransformasikan' pada unit sphere (dan untuk mendapatkan koordinat pada sphere yang sewenang-wenang, tentu saja, Anda hanya akan mengalikannya dengan radius sphere); perhitungan serupa bekerja untuk sumbu lainnya, untuk menentukan misalnya arah menghadap pengguna.