Mengapa asal dalam koordinat grafik komputer di kiri atas?


37

Dari apa yang saya lihat hampir semua hal menggunakan koordinat di mana (0, 0) berada di kiri atas dan sumbu Y positif bergerak ke arah bawah layar Anda.

Kenapa seperti ini? Mengapa tidak sumbu Y positif konvensional naik seperti yang ditunjukkan dalam grafik di kelas matematika sederhana?


7
Saya berpendapat bahwa mulai dari atas dan meningkat ketika Anda turun lebih masuk akal daripada konvensi matematika, karena lebih erat berkaitan dengan cara di mana bahasa indo-eropa dibaca dan ditulis.
Piyama Panda

3
Saya pikir Y + up masuk akal ketika menggambar objek fisik, karena tanah adalah asal Anda, dan sebagian besar dunia Anda berada di atas tanah. Namun, untuk tampilan, saya berhipotesis bahwa ini terkait dengan meniru cara bahasa indo-eropa ditulis.
Panda Pajama


4
Bukankah koordinat perangkat yang dinormalisasi dari OpenGL memiliki sumbu Y ke atas?
Ray

1
Jadi pada dasarnya Anda bertanya, "Apa asal usulnya?"
Ken

Jawaban:


43

Ini disebabkan dalam sejarah. Komputer awal memiliki Tabung Ray Katoda (CRT) yang "menggambar" gambar dengan sinar katoda dari sudut kiri atas ke kanan bawah.

Untuk memudahkan antarmuka antara memori kartu grafis dan CRT, memori dibaca dari awal dan gambar diambil dari kiri atas (dengan alamat memori terendah) ke kanan bawah (dengan alamat memori tertinggi).

Ekstensi (berdasarkan komentar)

CRT didasarkan pada perangkat TV analog yang tersedia saat itu.

Perangkat TV membuat gambar baris demi baris pertama dari kiri ke kanan dan kemudian dari atas ke bawah . Alasan untuk ini hanya dapat diasumsikan didasarkan pada gaya penulisan di negara barat.


7
Tentu, tetapi mengapa CRT menarik dari kiri atas (dilihat dari penonton)? Kenapa tidak vertikal? Kenapa tidak dari kanan ke kiri? Kenapa tidak dari bawah ke atas?
Panda Pajama

1
Anda dapat menemukan pembuatan gambar CRT di sini . Pada dasarnya ini untuk televisi analog tetapi CRT untuk komputer memiliki teknologi yang sama.
Uwe Plonus

12
@PandaPajama komputer CRT melakukannya karena begitulah standar TV analog, dan awalnya untuk komputer di rumah sering TV digunakan alih-alih monitor khusus. Mengapa TV pertama mentransmisikan informasi dengan membaginya dalam scanlines dan menggambar scanlines dari kiri ke kanan - saya tidak yakin, tapi itu akan konsisten dengan cara kita menulis, sehingga mungkin menjadi alasan yang cukup baik untuk memilih antara opsi yang sewenang-wenang.
Peteris

2
@Peteris: Cara orang Eropa menulis
Mooing Duck

1
Secara teknis, CRT menarik dari Tahap Kanan Atas ke Tahap Kiri Bawah.
ps2goat

3

Ini adalah pertanyaan bagus yang sudah sering saya pikirkan. Jawaban sederhana untuk "mengapa" adalah karena format TV juga menarik garis mereka dari kiri ke kanan kemudian dari atas ke bawah. Monitor komputer asli adalah layar CRT (TV kecil), jadi formatnya tetap sama. Ketika monitor menjadi layar datar (dan TV juga menjadi layar datar), sama wajarnya untuk menjaga format yang sama agar mudah kompatibilitas.

Tentu saja Anda bisa bertanya: mengapa TV menggambar seperti ini? Mereka diciptakan pada awal abad ke-20 sehingga Anda dapat membayangkan berapa banyak pemikiran atau ketiadaannya masuk ke desain, jika itu bahkan dipertanyakan. Catatan: tidak dimaksudkan untuk tidak sopan karena jauh lebih menantang untuk mendapatkan persamaan untuk membelokkan sinar secara magnetis ke garis yang tepat pada layar, sebagai lawan dari matriks sederhana "bola lampu" kecil. (Ini agak memunculkan pertanyaan bagaimana di bumi mereka menemukan CRT sebelum matriks titik sederhana, jauh di awal abad ke-20?)

Namun demikian, dugaan saya adalah bahwa mungkin itu tidak pernah dipertanyakan (hal yang buruk) karena bahasa Barat menulis kata-kata dari kiri ke kanan dan dari atas ke bawah. Mungkin tidak ada yang memahami kemungkinan melakukannya secara berbeda.

Secara pribadi, saya tidak suka format ini. Saya mendapatkan sikap ini ketika saya memprogram game dan simulasi lain yang melibatkan orbit elips. Setiap kali Anda mencari menggambar persamaan yang melibatkan dosa, cos, atau tan, Anda harus hati-hati membalikkan tanda-tanda yang berhubungan dengan parameter sumbu y ... atau Anda akan mendapatkan hal yang salah. Contohnya adalah persamaan parametrik untuk elips yang ditarik pada sudut 2D apa pun. Ini bisa menjadi mimpi buruk nyata membedah dosa, dosa karena dosa , dan hal-hal serupa.

Secara ringkas berbicara dalam istilah matematika, layar dalam Quadrant 4 bukannya Quadrant 1. Ini tidak perlu rumit.

BTW saat Anda mencapai 3 dimensi, sumbu z dianggap naik "ke atas" ke arah positif. Agak ironis. [EDIT]: Mungkin tidak, lihat komentar saya di bawah ini.

2 hal lagi yang saya sadari / temui:

Sundial di belahan bumi utara (yang memiliki pointer dan cakram yang menghadap ke utara sejajar dengan tanah) selalu berputar searah jarum jam . Jadi jika kita meletakkan nol jam di bagian atas "tampilan jam", maka penunjuk bayangan mulai bergerak ke kanan. Ini bisa menjadi asal dari arah kiri ke kanan dalam bahasa barat, menyebar ke koordinat Cartesian dan layar TV / komputer.

Komputer lama tidak terlalu banyak menggambar objek grafis. Mereka menggambar teks di command prompt. Jadi wajar untuk menempatkan baris 0 pada y = 0. Jika kita memiliki asal bawah-kiri, matematika menggambar garis teks akan sedikit lebih terlibat, dan itu bisa menjadi masalah besar bagi komputer lambat yang lama (yang bahkan membuat jalan pintas untuk menambah 1, demi kebaikan, demi Tuhan, disebut "++"). Plus, Anda perlu mengetahui resolusi layar, sedangkan jika Anda hanya melakukan baris 0 pada y = 0, Anda tidak perlu tahu resolusi.


2
Anda membuatnya terdengar seperti awal abad ke-20 dihuni oleh Neanderthal;)
bummzack

1
Ah, saya hanya mencoba untuk menekankan kontras dalam kompleksitas antara CRT dan matriks LED. CRT memiliki matematika yang luar biasa rumit yang terlibat dalam defleksi magnetik sinar cahaya. Dot matrix adalah cara yang lebih mudah untuk membungkus kepala Anda: hanya mengirim arus listrik ke LED yang tepat pada waktu yang tepat. Jika ada, kompleksitas yang lebih besar ini menunjukkan bahwa awal abad ke-20 dihuni oleh lebih banyak genius yang lebih baik, karena mereka harus melakukan hal yang lebih kompleks ini di era yang jauh lebih terbatas.
DrZ214

LED-matriks yang digunakan untuk menampilkan informasi, mereka tidak pernah menjadi populer untuk TV dan monitor komputer. Layar datar modern bukan matriks LED, tetapi LCD backlit. LED hanya digunakan untuk lampu latar di beberapa layar, tetapi gambar tidak dibuat oleh LED. LCD adalah teknik sederhana, tetapi meningkatkan resolusi dari tampilan jam tangan lama menjadi ratusan atau ribuan piksel di seluruh layar (dan kemudian beberapa, karena Anda memerlukan tiga subpiksel untuk menambah warna!) Belum tentu jauh lebih mudah daripada memodulasi sinyal gelombang. mengendalikan sinar EM (yang sebanding dengan siaran radio)
oerkelens

Sumbu Z tidak ironis - ini matematika. Sistem koordinat perlu menggunakan tangan kanan, jadi jika + X di kanan dan + Y di layar, itu membuat + Z naik. Sama seperti jika kita mempertahankan + X ke kanan, + Y ke bawah, + Z ada di layar.
tpg2114

1
@ tgp2114 Mengapa sistem koordinat perlu dilakukan dengan tangan kanan?
Taemyr

3

Tambahan: Grafik awal dilakukan pada monitor vektor , hanya satu langkah dari osiloskop yang terlihat di lab di mana (0,0) akan berada di tengah-tengah layar, tergantung pada beberapa tombol putar untuk mengatur skala X / Y, X / Y offset, dan mungkin inversi X / Y.

Perangkat keras khusus Atari "Asteroids" (1979) misalnya menggunakan layar vektor; akan menarik untuk mengetahui apa yang dipikirkan sistem koordinat programnya.

Sistem "Sketchpad" Ivan Sutherland (1963) didasarkan pada tampilan vektor TX-2 , dan dalam "Sketchpad: Sistem Komunikasi Grafis Manusia-Mesin" (tesis PhD, Januari 1963), ia menulis di halaman 70ff:

Sistem koordinat sistem tampilan TX-2 memiliki asal di pusat lingkup dan memerlukan sepuluh bit informasi defleksi yang terletak di sebelah kiri subword komputer 18 bit untuk setiap sumbu.

...

Untuk kenyamanan dalam merepresentasikan banyak variabel komponen dan untuk presisi lebih dari 18 bit, Sketchpad menggunakan sistem koordinat internal untuk menggambar representasi yang terpisah dari representasi yang diperlukan oleh sistem tampilan. Sistem internal ini disebut sistem koordinat "halaman". Dalam memikirkan gambar di Sketchpad, koordinat halaman dianggap sebagai tetap. Transformasi halaman ke lingkup memberikan kemampuan untuk melihat pada ruang lingkup bagian mana pun dari halaman yang diinginkan, pada tingkat pembesaran apa pun, seolah-olah melalui kaca pembesar (...) Faktor skala untuk tampilan mengontrol ukuran kotak yang akan muncul di ruang lingkup. Jumlah aktual yang disimpan adalah setengah panjang sisi bujur sangkar, yang disebut SCSZ untuk Lingkup SiZe) seperti yang ditunjukkan pada Gambar 5.2. Juga disimpan adalah koordinat halaman dari pusat ruang lingkup. Dengan mengubah angka-angka ini, bagian halaman yang ditunjukkan pada ruang lingkup dapat diubah ukurannya dan dipindahkan, tetapi tidak diputar.

Diagram 5.2 pada halaman 73 menunjukkan bahwa "sistem koordinat halaman" menggunakan konvensi matematis dari sistem koordinat kartesius X / Y. (Orang mungkin bertanya mengapa konvensi itu seperti itu ...)


tetapi: layar vektor hanya digunakan karena memori terlalu jarang untuk mewakili seluruh gambar yang dapat ditampilkan dan daftar vektor + durasi presentasi + koneksi membutuhkan lebih sedikit memori (seperti poligon vs. voksel)
Micka

2

Tidak semuanya kiri atas.

OpenGL, misalnya, menetapkan bahwa titik asal berada di bawah- kiri, dan ini meresap di seluruh API: koordinat tekstur, viewports, persegi panjang texel, proyeksi orto standar: itu adalah kiri bawah sepanjang jalan.

Ada perbedaan dalam berpikir di sini.

Di layar komputer, seperti halnya buku, ketika orang membaca (dan saya berasumsi bahasa seperti bahasa Inggris di sini) mereka baca dari kiri ke kanan dan dari atas ke bawah. Anda melakukannya sendiri ketika Anda menulis pertanyaan ini dan Anda melakukannya ketika Anda membaca jawaban untuk itu.

Dalam matematika dan desain ketika Anda memplot grafik, Anda memiliki sumbu X dan Y dengan X positif ke kiri dan Y positif naik.

Jika Anda membangun sesuatu seperti GUI 2D dalam gim, bisa lebih mudah dan lebih intuitif bagi banyak orang untuk meletakkannya dengan cara "kiri atas adalah asal".

Jika Anda membuat sesuatu untuk meniru desain atau tata letak pada kertas grafik, mungkin lebih mudah dan lebih intuitif bagi banyak orang untuk meletakkannya dengan cara "kiri bawah adalah asal".

Sebenarnya kedua hal ini adalah konvensi yang cukup informal, dan jika Anda membuat proyeksi orto Anda sebenarnya dapat memilih untuk memiliki asal Anda pada titik sembarang pada (atau mematikan) layar, dengan X positif pergi ke kiri atau kanan dan positif Anda naik atau turun. Ini hanya masalah menyesuaikan matriks proyeksi Anda sesuai.

Karenanya, satu-satunya hal yang penting adalah memilih konvensi mana yang akan Anda gunakan dan menggunakannya secara konsisten.


Jawaban yang bagus Saya membuat algoritma dengan banyak trigonometri yang pada akhirnya akan mengarah pada hal-hal yang digambar di layar, dan saya benar-benar tidak yakin apakah saya melanggar beberapa tabu atau konvensi dengan memiliki sumbu y yang positif naik.
Alexander Høst

-1

Karena layar mulai menampilkan gambar dari sudut kiri atas. Akan lebih mudah untuk mengkoordinasikan rendering atau gambar sumbu koordinat ketika (0,0,0) berada di sudut kiri atas dengan sumbu + Y masuk ke layar.


-2

Argumen UNTUK: (Dengan Contoh)

var R uint32 = 0xFF0000FF; //:Red pixel
var W uint32 = 0xFFFFFFFF; //:White Pixel.
var Pixels []uint32 = { 
W,W,W,R,R,W,W,W,
W,W,R,R,R,R,W,W,
W,R,R,R,R,R,R,R,
W,W,W,R,R,W,W,W,   //:8x8 pixel image of " ↑ "
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W, }

Kode cocok dengan hasil di layar :

masukkan deskripsi gambar di sini

Panah merah akan terbalik jika Anda TIDAK menggunakan asal kiri atas.

Saya tidak bisa mengatakan apakah ini "mengapa". Hanya saja, itu alasan yang bagus untuk asal kiri atas.


2
"Panah merah akan terbalik jika Anda TIDAK menggunakan asal atas-kiri" Ya, jadi? Apakah pengembang game sering menulis grafik melalui array 2d dalam kode?
Vaillancourt

Saya tidak bisa berbicara untuk semua pengembang game. Saya lakukan: newgrounds.com/portal/view/706067 Adam Atomic juga, dari membaca kode sumber flixel. Pustaka OpenGL dan SFML pasti melakukannya. OpenCL memungkinkan Anda untuk mengabstraksi poin data menjadi X / Y, (get_global_id (redup)) tetapi alokasi memori awal adalah 1D.
J MADISON
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.