Perché l'origine delle coordinate della computer grafica è in alto a sinistra?


37

Da quello che ho visto quasi tutte le cose usano le coordinate in cui (0, 0) è in alto a sinistra e l'asse Y positivo va nella direzione verso il basso dello schermo.

Perché è così? Perché l'asse Y positivo convenzionale non sale come mostrato nei grafici in semplici classi matematiche?


7
Direi che iniziare dall'alto e aumentare man mano che si scende ha più senso della convenzione matematica, poiché si collega più da vicino al modo in cui le lingue indoeuropee vengono lette e scritte.
Panda Pajama,

3
Penso che Y + su abbia senso quando si disegnano oggetti fisici, poiché il terreno è la tua origine e la maggior parte del tuo mondo è al di sopra del suolo. Tuttavia, per quanto riguarda i display, ipotizzo che sia correlato a imitare il modo in cui sono scritte le lingue indoeuropee.
Panda Pajama,


4
Le coordinate del dispositivo normalizzate di OpenGL non hanno un asse Y verso l'alto?
Ray,

1
Quindi stai essenzialmente chiedendo "Qual è l'origine dell'origine?"?
Ken,

Risposte:


43

Questo è causato nella storia. I primi computer avevano i tubi catodici (CRT) che "disegnano" l'immagine con un raggio catodico dall'angolo in alto a sinistra in basso a destra.

Per facilitare l'interfaccia tra la memoria della scheda grafica e il CRT, la memoria è stata letta dall'inizio e l'immagine è stata disegnata dall'angolo superiore sinistro (con l'indirizzo di memoria più basso) all'angolo inferiore destro (con l'indirizzo di memoria più alto).

Estensione (basata sui commenti)

I CRT si basano su televisori analogici disponibili in quel momento.

I televisori creano l'immagine riga per riga prima da sinistra a destra e poi dall'alto verso il basso . La ragione di ciò si può solo supporre essere basata sullo stile di scrittura nei contesti occidentali.


7
Certo, ma perché i CRT attingono dall'angolo in alto a sinistra (visto dallo spettatore)? Perché non in verticale? Perché non da destra a sinistra? Perché non dal basso verso l'alto?
Panda Pajama,

1
Puoi trovare la creazione dell'immagine di un CRT qui . Fondamentalmente questo è per la televisione analogica ma un CRT per un computer ha la stessa tecnologia.
Uwe Plonus,

12
I CRT per computer @PandaPajama lo fanno perché è così che sono gli standard TV analogici, e inizialmente per i computer di casa spesso venivano usati i televisori al posto dei monitor specializzati. Perché i primi televisori hanno trasmesso informazioni dividendole in scanline e disegnando scanline da sinistra a destra: non ne sono sicuro, ma ciò sarebbe coerente con il modo in cui scriviamo, quindi potrebbe essere una ragione sufficiente per scegliere tra opzioni arbitrarie.
Peteris,

2
@Peteris: il modo in cui scrivono gli europei
Mooing Duck,

1
Tecnicamente, il CRT attinge dallo stage in alto a destra allo stage in basso a sinistra.
ps2goat,

3

Questa è un'ottima domanda a cui ho pensato molte volte. La semplice risposta al "perché" è perché anche i formati TV hanno tracciato le loro linee da sinistra a destra, quindi dall'alto verso il basso. I monitor dei computer originali erano schermi CRT (piccoli televisori), quindi il formato era naturalmente lo stesso. Quando i monitor sono diventati schermi piatti (e anche i televisori sono diventati schermi piatti), è stato altrettanto naturale mantenere lo stesso formato per una facile compatibilità.

Naturalmente puoi quindi chiedere: perché i televisori disegnano in questo modo? Sono stati inventati all'inizio del 20 ° secolo in modo da poter immaginare quanta riflessione o mancanza di ciò è andato nel design, se fosse stato messo in discussione. Nota: non significa essere irrispettosi in quanto è incredibilmente più impegnativo ottenere equazioni per i raggi che deviano magneticamente le linee appropriate su uno schermo, al contrario di una semplice matrice di minuscole "lampadine". (Questo tipo di domande solleva la questione di come mai sulla Terra hanno inventato i CRT prima della semplice matrice di punti, all'inizio del XX secolo?)

Tuttavia, la mia ipotesi è che probabilmente non è mai stato messo in discussione (una cosa negativa) poiché le lingue occidentali scrivono parole da sinistra a destra e dall'alto verso il basso. Probabilmente nessuno ha concepito la possibilità di farlo diversamente.

Personalmente, questo formato non mi piace. Ho acquisito questo atteggiamento mentre programmavo giochi e altre simulazioni che coinvolgono orbite ellittiche. Ogni volta che guardi disegnando equazioni che coinvolgono sin, cos o tan, devi invertire con attenzione i segni che trattano i parametri dell'asse y ... o otterrai una cosa sbagliata. Un esempio potrebbe essere rappresentato dalle equazioni parametriche per un'ellisse disegnata in qualsiasi angolo 2D. Può essere un vero incubo sezionare il peccato, il peccato e altre cose simili.

In termini concisi in termini matematici, lo schermo si trova nel quadrante 4 anziché nel quadrante 1. Ciò è inutilmente complicato.

A proposito, quando si arriva a 3 dimensioni, si considera che l'asse z vada "verso l'alto" nella direzione positiva. Un po 'ironico. [EDIT]: Forse no, vedi il mio commento qui sotto.

Altre 2 cose che ho realizzato / trovato:

Le meridiane nell'emisfero settentrionale (che hanno puntatori rivolti a nord e dischi paralleli al suolo) ruotano sempre in senso orario . Quindi, se mettiamo l'ora zero nella parte superiore del "quadrante dell'orologio", il puntatore ombra inizia a spostarsi verso destra. Questa potrebbe essere l'origine della direzione da sinistra a destra nelle lingue occidentali, propagandosi fino alle coordinate cartesiane e agli schermi TV / computer.

I vecchi computer non disegnavano così tanto oggetti grafici. Hanno disegnato il testo in un prompt dei comandi. Quindi è naturale mettere la linea 0 in y = 0. Se avessimo un'origine in basso a sinistra, la matematica del disegno delle linee di testo sarebbe un po 'più coinvolta e avrebbe potuto essere un grosso problema per quei vecchi computer lenti (che hanno anche creato una scorciatoia per incrementare di 1, per l'amor del cielo, chiamato "++"). Inoltre, devi conoscere la risoluzione dello schermo, mentre se fai solo la linea 0 su y = 0, non devi conoscere la risoluzione.


2
Sembra che all'inizio del XX secolo sia stato popolato da Neanderthal;)
bummzack,

1
Aw, stavo solo cercando di enfatizzare il netto contrasto nella complessità tra CRT e una matrice di LED. I CRT hanno una matematica incredibilmente complessa coinvolta nella deflessione magnetica dei raggi di luce. Una matrice di punti è molto più semplice per avvolgere la testa: basta inviare corrente elettrica ai LED giusti al momento giusto. Semmai, questa vastità di maggiore complessità suggerisce che all'inizio del XX secolo erano popolati da geni più o migliori, poiché dovevano fare questa cosa più complessa in un'era molto più limitata.
DrZ214,

Le matrici LED sono state utilizzate per visualizzare informazioni, non sono mai diventate popolari per TV e monitor di computer. I moderni schermi piatti non sono matrici LED, ma LCD retroilluminato. I LED vengono utilizzati solo per la retroilluminazione in alcuni schermi, ma l'immagine non viene creata dai LED. L'LCD è una tecnica semplice, ma migliorare la risoluzione dal vecchio display dell'orologio a centinaia o migliaia di pixel sullo schermo (e quindi alcuni, poiché sono necessari tre subpixel per aggiungere colore!) Non è necessariamente molto più semplice della modulazione di un segnale wave controllare un raggio EM (che è in qualche modo paragonabile alla radiodiffusione)
oerkelens,

L'asse Z su non è ironico, è matematica. Il sistema di coordinate deve essere destrorso, quindi se + X è a destra e + Y è nello schermo, questo fa + Z in su. Proprio come se manteniamo + X a destra, + Y in basso, + Z è nello schermo.
tpg2114,

1
@ tgp2114 Perché il sistema di coordinate deve essere destrorso?
Taemyr,

3

Addendum: I primi grafici sono stati eseguiti su monitor vettoriali , a un solo passo dagli oscilloscopi visti in laboratorio dove (0,0) si trovava esattamente al centro dello schermo, soggetto a una manopola che gira per impostare la scala X / Y, X / Y offset, e possibilmente inversione X / Y.

L'hardware dedicato di Atari "Asteroids" (1979) ad esempio utilizzava uno schermo vettoriale; sarebbe interessante sapere cosa pensava fosse il suo sistema di coordinate del programma.

Il sistema "Sketchpad" di Ivan Sutherland (1963) era basato su un display vettoriale TX-2 , e in "Sketchpad: un sistema di comunicazione grafica uomo-macchina" (tesi di dottorato, gennaio 1963), scrive a pagina 70 e seguenti:

Il sistema di coordinate del sistema di visualizzazione TX-2 ha origine al centro dell'oscilloscopio e richiede dieci bit di informazioni sulla deflessione situate a sinistra delle parole chiave del computer a 18 bit per ciascun asse.

...

Per comodità nel rappresentare molte variabili componenti e per una precisione superiore a 18 bit, Sketchpad utilizza un sistema di coordinate interno per disegnare la rappresentazione divisa dalla rappresentazione richiesta dal sistema di visualizzazione. Questo sistema interno è chiamato il sistema di coordinate "pagina". Nel pensare ai disegni in Sketchpad, le coordinate della pagina sono considerate fisse. Una trasformazione da pagina a ambito consente di visualizzare sull'ambito qualsiasi porzione della pagina desiderata, a qualsiasi livello di ingrandimento, come se attraverso una lente di ingrandimento (...) Un fattore di scala per il display controlla la dimensione del quadrato che apparirà sul campo di applicazione. Il numero effettivo salvato è la mezza lunghezza del lato del quadrato, chiamato SCSZ per SCope SiZe) come mostrato nella Figura 5.2. Inoltre vengono salvate le coordinate della pagina del centro del quadrato dell'oscilloscopio. Modificando questi numeri, la parte della pagina mostrata sull'ambito può essere modificata in dimensioni e spostata, ma non ruotata.

Il diagramma 5.2 a pagina 73 mostra che il "sistema di coordinate di pagina" utilizza la convenzione matematica del sistema di coordinate cartesiane X / Y. (Ci si potrebbe chiedere perché quella convenzione sia così ...)


ma: gli schermi vettoriali sono stati usati solo perché la memoria era troppo rara per rappresentare un'intera immagine visualizzabile e gli elenchi vettoriali + la durata della presentazione + le connessioni richiedono molta meno memoria (come poligoni vs. voxel)
Micka,

2

Non tutto è in alto a sinistra.

OpenGL, ad esempio, specifica che l'origine è in basso a sinistra, e questo è pervasivo in tutta l'API: coordinate di trama, finestre, rettangoli texel, orto proiezione standard: è completamente in basso a sinistra.

C'è una differenza nel pensare qui.

Sugli schermi dei computer, come nei libri, quando le persone leggono (e presumo che qui sia una lingua come l'inglese) leggono da sinistra a destra e dall'alto verso il basso. L'hai fatto tu stesso quando hai scritto questa domanda e lo stai facendo quando leggi le risposte.

In matematica e progettazione quando traccia un grafico, hai un asse X e un asse Y con X positiva che va a sinistra e Y positiva che sale.

Se stai costruendo qualcosa come una GUI 2D in un gioco, può essere più facile e più intuitivo per molte persone disporlo in modo "l'origine in alto a sinistra".

Se stai costruendo qualcosa per imitare un disegno o un layout su carta millimetrata, può essere più facile e più intuitivo per molte persone disporlo in un modo "l'origine in basso a sinistra".

In realtà entrambe queste sono convenzioni abbastanza informali e se stai impostando una orto proiezione puoi effettivamente scegliere di avere la tua origine in qualsiasi punto arbitrario sullo schermo (o spento), con la X positiva che va a sinistra o a destra e positiva Vado su o giù. È solo una questione di regolazione della matrice di proiezione di conseguenza.

L'unica cosa importante è quindi scegliere quale convenzione userete e usarla in modo coerente.


Bella risposta. Sto creando un algoritmo con tonnellate di trigonometria che alla fine porterà a disegnare le cose sullo schermo, ed ero davvero incerto sul fatto che stavo rompendo un tabù o una convenzione facendo salire l'asse y positivo.
Alexander Høst,

-1

Perché le schermate iniziano a visualizzare l'immagine dall'angolo in alto a sinistra. Sarebbe più semplice correlare il rendering o il disegno dell'asse di coordinate quando (0,0,0) si trova nell'angolo in alto a sinistra con + asse Y che va sullo schermo.


-2

Un argomento FOR: (Per esempio)

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, }

Il codice corrisponde ai risultati sullo schermo :

inserisci qui la descrizione dell'immagine

La freccia rossa sarebbe capovolta se NON si utilizzava l'origine in alto a sinistra.

Non posso dire se questo è "perché". Solo questo, è una buona ragione per l'origine in alto a sinistra.


2
"La freccia rossa sarebbe capovolta se NON si usasse l'origine in alto a sinistra" Sì, quindi? Gli sviluppatori di giochi scrivono grafica tramite array 2D in gran parte del tempo?
Vaillancourt

Non posso parlare per tutti gli sviluppatori di giochi. Lo faccio: newgrounds.com/portal/view/706067 anche Adam Atomic, leggendo il codice sorgente di flixel. Le librerie OpenGL e SFML lo fanno sicuramente. OpenCL consente di astrarre i punti dati in X / Y, (get_global_id (dim)) ma l'allocazione di memoria iniziale è 1D.
J MADISON,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.