반응형

Coding/Misc 24

Postscript 좌표계

기본적으로 좌하단이 (0,0) 이다. 그리고 포스트스크립트의 거리 단위는 포인트라고 가정하면 72포인트가 1인치에 해당한다. 이러한 상황에서 한국인이 익숙한 mm 단위로 뭔가를 그리기 위해서는 좌표의 scaling 값을 곱하면 되는데, ps_scale_factor = 72/25.4 를 정해서 곱해주면 편하다. 25.4 로 나누는 이유는 1인치가 25.4mm 이기 때문. 만일 A4 사이즈의 종이에 뭔가를 그린다는 (한글폰트를 써서 텍스트를 프린트하는 것처럼 흉내내는 경우) 가정하에 A4 사이즈 종이 크기에 대해 전후 좌우 적당한 여백 안에 글자들을 제한하여 그리고 싶다면 원점을 이동하고 위의 스케일 값을 사용해야 한다. 포스트스크립트에서는 원점 이동은 translate, 스케일은 scale 명령을 사용한다..

Coding/Misc 2023.11.18

Poisson Disc Sampling - 2차원 패턴 랜더마이징 알고리즘

업무상 자주 2차원 랜덤패턴, 또는 2차원 공간에서의 파라메터 랜더마이징이 필요할때가 있습니다. 1차원이라면 그냥 python 의 shuffle 또는 랜덤 함수만으로도 그럭저럭 써먹곤 하는데 2차원에선 기껏 랜덤함수를 사용해도 비슷한 놈들끼리 몰리거나 위치가 뭉치는 (aggregation?) 현상이 일어나곤 합니다. 이걸 해결하기 위해서 입자들의 인력 (또는 척력) 에 의한 시스템의 최소 에너지 상태로 최적화하는 molecular dynamics 알고리즘을 사용하여 오래전에 C++ 로 콘솔 실행용 프로그램을 만들어서 아직도 잘 써먹고 있습니다만, 많은 횟수의 iteration (최소 30회) 을 사용하고 모든 입자들의 위치를 재배치하는 과정이라 시간이 많이 걸립니다. 게다가 실행파일로 된 것을 써먹기에 ..

Coding/Misc 2022.11.10
728x90