시각화/프로세싱

▶함께공부하는 프로세싱 기초 - PVector Ⅰ

비주얼라이즈 2014. 8. 23. 17:04














PVector


여러가지 기능 중, PVector에 대해 살펴보려고합니다.

PVector는 벡터(x, y for 2D, and x, ,y, z for 3D)의 구성요소를 저장합니다.

크기와 방향은 mag()heading()을 통해 액세스할 수 있습니다.







프로세싱 예제 속 PVector


많은 경우에,PVector는 위치 또는 속도, 가속도등을 표현하는데 사용되고 있습니다.

예를 들어, 스크린을 가로질러가는 사각형을 구현해야하는 경우


위치, 속도, 가속도등은 전체 영역에 적용되고 있기때문에

단순히 전체영역의 속도를 조절하는 것 만으로는 어려움이 있습니다.

이런 방법 대신, PVector class내부에서 적용해볼 수 있습니다.









PVector - set()



v.set(vvv)

float[] vvv 배열에서 3개의 변수를 받아 v의 x,y,z성분으로 활용하는 모습입니다.











add() : 말 그대로 더합니다.




첫 번째 텍스트는 setup()에서 지정한 PVecter의 v의 값으로

위치를 지정한 것입니다.


두 번째는 v에 add()를 이용하여 새로운 값을 더해주었습니다.

즉 v.x와 v.y에 +100씩 해준 셈 입니다.









결과를 살펴보면,

.add()로 인해 두 text()함수의 위치가 달라졌다는 것을 알 수 있습니다.
(firstV와 secondV는 임의로 집어넣은 문자입니다)










sub() : 말 그대로 빼줍니다.


add()로 더한 것 처럼, sub로 빼줄 수 있습니다.

위에서처럼 .sub(100, 100, 0)의 형태로 사용할 수 도 있고,

아래와같은 형태로도 사용할 수 있습니다.






add()예제와 달리, v1, v2의 형태로 설정했습니다.

v1.sub(100, 100, 0)의 형태도 가능하지만

PVector - PVector의 형태로도 사용이 가능합니다.






결과를 보면,각 텍스트들의 위치를 통해 

v1- v2 = v3의 결과를 확인할  수 있습니다.





이와같은 방법으로 

mult() : 곱하기

div() : 나누기


의 함수들도 활용할 수 있습니다.







dist() : 유클리드함수 거리구하기


두 PVector의 거리를 dist()로 구할 수 있습니다.




편의상 위의 부분은 생략하였습니다.

결과는 아래와 같습니다.






dist()기능의 덕분으로 어렵지않게 두 점 사이의 거리를

구할 수 있습니다.








normalize() : 노멀라이즈


PVector의 정규화.

아래는 nomarlize()의 결과입니다.











leap() : 중간지점을 알아내는 선형보간법


선형..보간..법?

이름부터 뭔가 부담이되기쉬운데요

make processing에 leap()과 관련해서 좋은 설명이 있어 참고했습니다.




lerp()는 선형보간법(Linear Interpolation) 함수 이다.

선형 보간법이라는 용어 자체로는 이해하기 힘드니 간단히 말로 풀어보면 

하나의 점에서 다른 점까지 이동할 때 그 중간 지점을 알아내는 방법이다.


[출처 : make processing ]




예제를 함께 살펴보겠습니다.


PVector는 start, middle, end 이렇게 3개가 있으며,

이해돕기위해 x값만 가지고 leap()을 적용해보았습니다.



표시된 부분에서leap()을 활용하여 

 middle()에 start와 end의 중간 값(0.5)을 저장했습니다.




.leap()의 결과를 보면, 크기를 작게 해둔 것이 'middle'입니다.

start와 end사이 중간지점(0.5설정했기때문에)에

중간지점에 위치한 것을 볼 수 있습니다.





그밖의 기능들


PVector random2D : 임의의 방향으로 새로운 차원의 단위 벡터를 돌려줍니다.

fromAngle() : 지정한 각도 값에서 계산하고(라디안으로) 새 2D단위 벡터를 돌려줍니다.

mag() : 이것은 벡터의 크기(길이)를 계산하고, 그 결과를 float형태로 돌려줍니다.

(방정식 SQRT(X * X + Y * Y + Z 의 * Z)