언어라고 해야할지 그냥 자바를 이용한 좀 편리한 도구라고 해야할지 요즘 들어서 오히려 약간 혼돈을 느끼지만 여전히 취미생활처럼 Processing을 아~~주 쪼금씩 데리고 놀고 있습니다. 약간 뭔가 의도한데로 되는지 조차 혼란이 오는 요즘... 내가 현재 괜찮은 방향으로 잘 가고 있는지.. 뭐 이딴 이상한 생각 따위를 살짝 접고 평온한 마음으로 지내는 것으로는 확실히 요런 언어(혹은 도구)로 뭔가 새로운 것을 조금씩 공부해보는 것이 참 좋은것 같습니다. 뭐 아무튼 그렇게 처음 Processing이라는 아이를 제 블로그에서 소개[바로가기]한 이 후 (근데 그것도 2013년 9월이니 아무리 취미처럼하는 공부라도 참 진도가 느립니다.ㅠㅠ) 그래프를 그리는 이야기만 했었는데요. 이번에는 라이브러리 하나 소개할려고 합니다.
이름은 좀 귀엽지만 여하튼 Papaya라는 라이브러리입니다.[바로가기] 설치는 원체 Processing이 잘 설명되어 있으니 패스하구요. 요 아이로 사실 뭐 많은 것을 할 수 있겠지만... 제가 주목했던건 행렬 연산 때문입니다.
위에 보이는 것처럼 Papaya의 많은 기능 중에 행렬 연산만 놓고 보면, 행렬 덧셈, 곱셈 등등
또 콘술창에 행렬을 바로 프린트하는 것, 행렬 요소끼리 곱하는 것, 디터미넌트, 역행렬 등등 필요한 행렬 연산기능을 다가지고 있네요. 딱 원하던 것입니다.^^
import papaya.*; float[][] y0 = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}}; float theta = 30*3.14/180; float a = 100; void setup() { size(60,60); noLoop(); } void draw() { float[][] T = Mat.multiply(RotZ(theta), TransX(a)); float[][] yT = Mat.multiply(T, y0); println("Original Matrix == >"); Mat.print(y0, 2); println("--------------------"); println("transform Matrix == >"); Mat.print(yT, 2); } float[][] RotZ(float theta) { return new float[][]{{cos(theta), -sin(theta), 0,0},{sin(theta), cos(theta), 0,0},{0,0,1,0},{0,0,0,1}}; } float[][] TransX(float a) { return new float[][]{{1,0,0,a},{0,1,0,0},{0,0,1,0},{0,0,0,1}}; }
아주아주 간단한 예제 하나 보죠. 좀 더 좋은 예제는 어차피 기본으로 제공되니까요^^. 위에서 쓰인 RotZ는 흔히 기구학에서 많이 쓰는 Z축 중심의 회전행렬이구요. TransX는 x축 방향으로 병진 이동하는 행렬을 정의한 것입니다. 초기 y0라는 행렬을 정의하고, z축으로 30도만큼 회전한 후 x축 방향으로 100만큼 이동한 결과를 확인하는 것이지요. Papaya 라이브러리의 행렬 클래스에서 행렬 곱셈과 행렬 프린터 기능을 사용했습니다.
위 화면이 콘술에 나타난 결과입니다. 4열에 나온 결과가 보이네요. (0,0,0)이라는 점이 최종적으로는 (86.62, 49.98, 0)으로 이동했음을 알 수 있네요. 뭐 여하튼 오늘은 Papaya라는 귀여운 이름의 라이브러리 하나를 소개했습니다.^^ 아 그리고 GitHub에 위 에제를 올려 두었으니 뭐 허접하지만 예제의 다운로드를 문의하시는 분들을 위해 올린거니까 [바로가기]에서 받으시면 됩니다.^^
'Software > Processing' 카테고리의 다른 글
프로세싱 Processing에서 modelX 명령으로 pushMatrix의 개념을 이해하기... (2) | 2016.07.08 |
---|---|
Processing에서 구현해 보는 Robot Arm 소개 (6) | 2016.07.01 |
Processing으로 구현한 Two Link Planar 로봇의 정구학과 역기구학 시뮬레이션 (32) | 2015.01.13 |
Processing에서 Two Link Planar를 정방향 기구학으로 해석한 시뮬레이션 (12) | 2014.11.21 |
Processing에서 진자 운동을 애니메이션으로 시뮬레이션하기 (17) | 2014.10.24 |
Processing에서 시리얼통신으로 받은 데이터를 그래프로 표현하기 (32) | 2013.10.23 |
Processing 프로세싱 언어를 소개합니다. (14) | 2013.09.30 |