Coding/Misc

Postscript 좌표계

smores 2023. 11. 18. 15:00

기본적으로 좌하단이 (0,0) 이다. 그리고 포스트스크립트의 거리 단위는 포인트라고 가정하면 72포인트가 1인치에 해당한다. 이러한 상황에서 한국인이 익숙한 mm 단위로 뭔가를 그리기 위해서는 좌표의 scaling 값을 곱하면 되는데, 

 

ps_scale_factor = 72/25.4    

 

를 정해서 곱해주면 편하다. 25.4 로 나누는 이유는 1인치가 25.4mm 이기 때문.

 

만일 A4 사이즈의 종이에 뭔가를 그린다는 (한글폰트를 써서 텍스트를 프린트하는 것처럼 흉내내는 경우) 가정하에 A4 사이즈 종이 크기에 대해 전후 좌우 적당한 여백 안에 글자들을 제한하여 그리고 싶다면 원점을 이동하고 위의 스케일 값을 사용해야 한다. 포스트스크립트에서는 원점 이동은 translate, 스케일은 scale 명령을 사용한다. 그리고 포스트스크립트는 그 이름 대로 명령어보다 인자(값)이 먼저 나온다. 때문에 이런 식의 코드가 된다.

 

56.7751 52.3361 translate 2.834646 2.834646 scale

 

translate 앞의 두 숫자는 x 와 y 축으로 이동할 거리 mm 에 ps_scale_factor 를 곱한 값이고, 뒤의 scale factor 는 x, y 축 모두 동일한 스케일 값을 사용한 경우이다. 원하면 서로 다른 스케일 값을 사용하여 그림이 stretch 되게 할 수도 있다. 

 

이런 상황에서 폰트를 그려나간다면, 비트맵 폰트의 경우는 비트맵 이미지 좌표와 같이 좌상단이 (0,0) 으로 되어 x 축은 증가 방향이 포스트스크립트 좌표축과 일치하지만, y 축은 있는 그대로 프린팅 영역에 그려주면 상하가 거울 대칭으로 아래쪽에서 위로 올라가며 그리게 된다. 따라서 이를 해결하려면 폰트를 그릴때 x 좌표는 그대로 쓰되, y 좌표만 프린트 영역의 높이 - y 값을 하면 된다.

 

위의 translate 는 포스트스크립트 포인트 좌표로 변환한 값이지만, 다음에 스케일 비율이 정해지기 때문에 이후 본문에서 그림을 그릴때의 좌표는 그냥 mm 단위로 생각해서 그리면 스케일 변환이 된다.

'Coding > Misc' 카테고리의 다른 글

랩탑 배터리 수명 체크  (0) 2023.01.05
Lua 기초  (0) 2022.12.12
Poisson Disc Sampling - 2차원 패턴 랜더마이징 알고리즘  (0) 2022.11.10
리사주 스피로그래프  (0) 2022.07.04
matlab, golang, html examples  (0) 2021.07.09