매개변수 방정식(Parametric Equations)

음함수 방정식 vs 매개변수 방정식(Implicit Equations vs Parametric Equations)

음함수 방정식

제가 생각하는 음함수 방정식이란

특정한 값에 대해서 참 또는 거짓을 평가하는 규칙

입니다.

예)

Y=XY = X

또는

2y+3x=42y + 3x = 4

또는

5x+2y+3z>125x + 2y + 3z > 12

일반적으로 x & y 그리고 z좌표를 사용하는 음함수 방정식은 무엇이 맞고 틀린지를 정의합니다.

만약 어떤 x와 y값에 대한 방정식이 참이라면 점(x,y)는 직선 위에 있다고 할 수 있습니다.

만약 어떤 x와 y값에 대한 방정식이 거짓이라면, 점(x,y)는 직선 위에 있지 않다고 말할 수 있습니다.

X2+Y2=25X^2 + Y^2 = 25

위 방정식은 원점으로부터 5만큼 떨어져 있는 모든 점들의 "궤적"을 정의하는 방정식 입니다.

만약 어떤 x와 y값에 대한 방정식이 참이라면, 점(x,y)는 원 위에 있다고 할 수 있습니다.

만약 어떤 x와 y값에 대한 방정식이 거짓이라면, 점(x,y)는 원 위에 있지 않다고 말할 수 있습니다.

매개변수 방정식

매개변수 방정식은 입력값이 존재하는 방정식이라고 보면 됩니다. 특정 값을 입력 매개변수로 넣으면 특정 값을 리턴하는 것이죠.

DiagonalLine2D(t)=(t,t) DiagonalLine2D( t ) = (t, t)

or

Helix3D(t)=(cost,sint,t) Helix3D(t) = ( cos t, sin t, t )

다시 말해, 매개변수 방정식은 보간할때 사용하는 조절기와 같은 장치에 연결할 수있는 것이라고 생각하면 됩니다. 단일 숫자(보통 0에서 1 사이의 값)를 입력 하면 방정식의 계산 공식에 따라 t의 값에 해당하는 결과를 리턴하게 되죠.

프로그래밍에서 흔히 사용하는 함수 형태라고 이해하면 됩니다.

someComplexData ParametricEquation(float t);

보다 근본적인 개념을 설명 드리겠습니다.

P(t) = t라는 식을 갖고 있는 함수가 있습니다. t가 바뀌면 그 결과인 P 도 바뀌죠. 즉, P는 t에 의존하는 것이고 t에 따라 그 값이 바뀝니다. t에 따라서 계산되어 나오는 값은 무엇이든 될 수 있습니다. 예를 들면 : Position (2D, 3D, etc.) Orientation Scale Alpha 기타 등등. 보간할 수 있는 값이라면 무엇이든 상관없죠.

P(t) 는 직선 위의 2D 좌표를 의미합니다. t에 임의의 값을 넣으면 결과값인 P도 달라지는것을 알 수 있습니다.

P(t) 는 원 위의 2D 좌표를 의미합니다. t에 임의의 값을 넣으면 결과값인 P도 달라지는것을 알 수 있습니다.

정리

음함수 방정식

Y=XY = X

만약 위 식이 참이라면 점 x,y는 직선 위에 있습니다.

X2+Y2=1X^2 + Y^2 = 1

만약 위 식이 참이라면, 점 x,y는 반지름이 1인 원 위에 있습니다.

매개변수 방정식

P(t)=(t,t)P(t) = (t, t)

모든 t값에 대한 (x, y)좌표를 구합니다. P는 직선을 따라 움직이는 모양이 됩니다.

P(t)=(cos(t),sin(t))P(t) = (cos(t), sin(t))

모든 t값에 대한 (x, y)좌표를 구합니다. P는 원을 따라 움직이는 모양이 됩니다.

역주 : 음함수 방정식, 매개변수 방정식 모두 게임 프로그래밍에서 자주 쓰는 용어는 아닙니다. 프로그래밍 보다는 수학적인 느낌이 많이 묻어나는 단어인데 알고보면 두 방식 모두 코딩하면서 늘 사용하는 방법입니다. 게임 프로그래밍에서는 주로 매개변수 방정식을 많이 사용하죠. 예를들면 키보드 입력에 따라 캐릭터의를 움직이는 코드의 구현을 보면 입력값으로 현재 키보드 상태를 넣고, 출력값으로 캐릭터의 위치를 얻습니다. 코드로 표현하면 이렇게 되죠.

void Update()
{
    Vector3 position = GetPosition(keyInput);
    character.position = position;
}

이런 방식이 매개변수 방정식 인것 같습니다. 코딩하면서 아주 흔히 사용하는 방식입니다. 어떤 값을 입력으로 넣고 리턴되는 값을 받아서 오브젝트에 적용하는 것이죠.

반면에 음함수 방정식은 어떠한 값을 넣었을 때 참인지 거짓인지를 체크해준다고 생각하면 됩니다. 예를들어 캐릭터의 현재 위치가 일정한 크기의 원 안에 존재하는지를 알려고 한다면 음함수 방정식을 사용할 수 있습니다.

bool IsInCircle(Vector3 position)
{
    float radius = 5 * 5;
    float x2 = Mathf.Pow(position.x, 2);
    // 보통 3D게임에서는 평면을 xz로 사용하는 경우가 많기 때문에 y좌표 대신 z좌표를 사용하여 계산한 것입니다.
    float z2 = Mathf.Pow(position.z, 2);
    return x2 + z2 <= radius;
}

원점에서 5만큼의 거리에 가상의 원이 있다고 가정하겠습니다. 이 때 원의 방정식을 사용하여 캐릭터가 원 안에 있는지를 알아낼 수 있습니다. 원의 방정식은

(xa)2+(yb)2=r2(x-a)^2 + (y-b)^2 = r^2

이죠. 원점이 0이라고 한다면 이렇게 바꿀 수 있습니다.

x2+y2=r2x^2 + y^2 = r^2

위 식을 만족한다면 원 안에 있다고 볼 수 있는 것이죠. 이것이 저자가 말하는 '참 또는 거짓을 평가하는 규칙'이라는 음함수 방정식의 의미인것 같습니다.

두 단어는 저에게도 생소한 단어라 100퍼센트 이것이다 라고 말할수는 없지만 저자의 의도를 파악해보니 이런 차이점을 말하려고 하는것 같아서 추가 설명하였습니다.

Last updated