내가 본 것에서 거의 모든 것은 (0, 0)이 왼쪽 상단에 있고 양의 Y 축이 화면의 아래쪽 방향으로 이동하는 좌표를 사용합니다.
왜 이런가요? 간단한 수학 수업에서 그래프에 표시된 것처럼 기존의 양의 Y 축이 위로 올라가지 않는 이유는 무엇입니까?
내가 본 것에서 거의 모든 것은 (0, 0)이 왼쪽 상단에 있고 양의 Y 축이 화면의 아래쪽 방향으로 이동하는 좌표를 사용합니다.
왜 이런가요? 간단한 수학 수업에서 그래프에 표시된 것처럼 기존의 양의 Y 축이 위로 올라가지 않는 이유는 무엇입니까?
답변:
이것은 역사에서 발생합니다. 초기 컴퓨터에는 음극선이있는 이미지를 왼쪽 상단에서 오른쪽 하단으로 "그리기"하는 음극선 관 (CRT)이있었습니다.
그래픽 카드 메모리와 CRT 간의 인터페이스를 쉽게하기 위해 메모리를 처음부터 읽었으며 이미지는 왼쪽 상단 (가장 낮은 메모리 주소)에서 오른쪽 하단 (가장 높은 메모리 주소)으로 그려졌습니다.
확장 (댓글을 기반으로 함)
CRT는 당시에 사용 가능한 아날로그 TV 세트를 기반으로합니다.
TV 세트는 먼저 왼쪽에서 오른쪽으로, 위에서 아래로 이미지를 한 줄씩 만듭니다 . 이것의 이유는 서양식 콘 트리의 작문 스타일에 근거한 것으로 만 가정 될 수있다.
이것은 여러 번 생각한 훌륭한 질문입니다. "왜"에 대한 간단한 대답은 TV 형식도 왼쪽에서 오른쪽으로, 위에서 아래로 선을 그렸기 때문입니다. 오리지널 컴퓨터 모니터는 CRT 스크린 (소형 TV) 이었으므로 형식은 자연스럽게 동일하게 유지되었습니다. 모니터가 평면 화면이되었을 때 (TV도 평면 화면이되었을 때) 쉽게 호환되도록 동일한 형식을 유지하는 것이 당연했습니다.
물론 다음과 같은 질문을 할 수 있습니다. 왜 TV가 이런 식으로 그려 집니까? 그것들은 20 세기 초에 발명되었으므로 디자인에 대한 생각이나 부족이 의문이 든다면 상상할 수 있습니다. 참고 : 작은 "전구"의 간단한 매트릭스와는 달리, 화면의 적절한 선으로 광선을 자기 적으로 편향시키는 방정식을 얻는 것이 엄청나게 어려운 일이므로 무례하지 않습니다. (이 종류는 지구상에서 20 세기 초반에 간단한 점 행렬보다 CRT를 어떻게 발명했는지에 대한 의문을 제기합니다.)
그럼에도 불구하고 서구 언어는 왼쪽에서 오른쪽으로, 위에서 아래로 단어를 쓰므로 아마도 의심의 여지가 없었을 것입니다. 아마도 아무도 다르게 할 가능성을 생각하지 못했습니다.
개인적으로 나는이 형식을 싫어한다. 타원형 궤도와 관련된 게임 및 기타 시뮬레이션을 프로그래밍하면서 이러한 태도를 얻었습니다. sin, cos 또는 tan과 관련된 방정식을 그릴 때마다 y 축 매개 변수를 다루는 부호를주의해서 뒤집어 야합니다. 그렇지 않으면 잘못된 것이 그려집니다. 예를 들어 2D 각도로 그려진 타원에 대한 파라 메트릭 방정식이 있습니다. 그것은 죄악, 죄악 및 이와 유사한 것들을 해부하는 악몽 일 수 있습니다 .
수학적으로 간단하게 말하면, 화면은 4 분면 1 대신 4 분면입니다. 이것은 불필요하게 복잡합니다.
BTW 3 차원에 도달하면 z 축은 양의 방향으로 "상향"으로 간주됩니다. 아이러니. [편집] : 아마 아닐 수도 있습니다, 아래 내 의견을보십시오.
내가 깨달았거나 얻은 2 가지 더 :
북반구의 해시계 (북쪽을 향한 포인터와 디스크가지면과 평행)는 항상 시계 방향으로 회전 합니다. 따라서 "시계 앞면"의 상단에 0 시간을 놓으면 그림자 포인터가 오른쪽으로 이동하기 시작합니다. 이것은 서구 언어에서 왼쪽에서 오른쪽 방향의 원점이 될 수 있으며 데카르트 좌표 및 TV / 컴퓨터 화면으로 전파됩니다.
오래된 컴퓨터는 그래픽 객체를 그리 많이 그리지 않았습니다. 그들은 명령 프롬프트에서 텍스트를 그렸습니다. 따라서 y = 0에 라인 0을 넣는 것이 당연합니다. 왼쪽 아래 원점을 가졌다면, 텍스트 라인을 그리는 수학이 조금 더 복잡 할 것입니다. 그리고 오래된 느린 컴퓨터 (1을 늘리기위한 지름길을 만든 사람도 많았지 만, "++"라고 함). 또한 화면의 해상도를 알아야하는 반면 y = 0에서 라인 0 만 수행하면 해상도를 알 필요가 없습니다.
부록 : 초기 그래픽은 벡터 모니터 에서 이루어졌으며 , 실험실에서 볼 수있는 오실로스코프에서 한 단계 만 올라 갔으며, 여기서 (0,0)은 화면의 정확한 중앙에 있으며, 노브를 돌리면 X / Y 스케일, X를 설정합니다. / Y 오프셋 및 가능하면 X / Y 반전
예를 들어 Atari "Asteroids" (1979) 의 전용 하드웨어 는 벡터 스크린을 사용했다; 프로그램 좌표계가 무엇이라고 생각하는지 아는 것은 흥미로울 것입니다.
Ivan Sutherland의 "Sketchpad" 시스템 (1963)은 TX-2 벡터 디스플레이를 기반으로하며 "Sketchpad : Man-Machine Graphical Communication System" (PhD 논문, 1963 년 1 월)에서 70ff 페이지에 씁니다.
TX-2 디스플레이 시스템의 좌표계는 스코프 중심에 원점을 가지며 각 축에 대해 18 비트 컴퓨터 서브 워드 왼쪽에 10 비트의 처짐 정보가 필요합니다.
...
많은 구성 요소 변수를 표현하는 데 편리하고 18 비트 이상의 정밀도를 위해 Sketchpad는 내부 좌표계를 사용하여 표시 시스템에 필요한 표현과 분리 된 표현을 그립니다. 이 내부 시스템을 "페이지"좌표 시스템이라고합니다. Sketchpad의 도면을 고려할 때 페이지 좌표는 고정 된 것으로 간주됩니다. 페이지에서 범위로 변환은 돋보기를 통해 것처럼 원하는 정도의 페이지에서 원하는 범위의 페이지를 범위에서 볼 수있는 기능을 제공합니다 (...). 범위에 나타납니다. 저장된 실제 숫자는 그림 5.2와 같이 정사각형 측면의 절반 길이 (SCope SiZe의 경우 SCSZ라고 함)입니다. 또한 스코프 광장 중심의 페이지 좌표가 저장됩니다. 이 숫자를 변경하면 범위에 표시된 페이지 부분의 크기가 변경되고 이동 될 수 있지만 회전되지는 않습니다.
73 페이지의 그림 5.2는 "페이지 좌표계"가 X / Y 직교 좌표계의 수학적 규칙을 사용함을 보여줍니다. (그 협약이 왜 그런지 묻습니다.)
모든 것이 왼쪽 상단에있는 것은 아닙니다.
예를 들어 OpenGL은 원점이 왼쪽 아래에 있음을 지정 하며 API 전체에서 텍스처 좌표, 뷰포트, 텍셀 사각형, 표준 직교 투영법 등이 널리 퍼져 있습니다.
여기서 생각하는 데 차이가 있습니다.
책과 마찬가지로 컴퓨터 화면에서 사람들이 읽을 때 (여기서는 영어와 같은 언어를 가정하고 있음) 왼쪽에서 오른쪽으로, 위에서 아래로 읽습니다. 이 질문을 썼을 때 스스로 해냈으며 답을 읽을 때하고 있습니다.
수학과 설계에서 그래프를 그릴 때 양의 X가 왼쪽으로, 양의 Y가 올라가는 X 및 Y 축이 있습니다.
게임에서 2D GUI와 같은 것을 구축하는 경우 많은 사람들이 "왼쪽 상단은 원점"방식으로 배치하는 것이 더 쉽고 직관적 일 수 있습니다.
그래프 용지에서 디자인 또는 레이아웃을 모방 할 무언가를 구축하는 경우 많은 사람들이 "왼쪽 하단이 원점"방식으로 배치하는 것이 더 쉽고 직관적 일 수 있습니다.
실제로이 두 가지는 매우 비공식적 인 규칙이며, 직교 투영법을 설정하는 경우 화면에서 임의의 지점에서 원점을 갖도록 선택할 수 있습니다. Y가 올라가거나 내려갑니다. 투영 행렬을 적절히 조정하면됩니다.
따라서 중요한 것은 사용할 규칙을 선택하고 일관되게 사용하는 것입니다.
FOR 인수 : (예제 별)
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, }
코드는 화면의 결과와 일치합니다 .
왼쪽 상단 원점을 사용하지 않으면 빨간색 화살표가 거꾸로 나타납니다 .
이것이 "왜"인지 말할 수 없습니다. 바로 왼쪽 상단 원점에 대한 좋은 이유입니다.