오늘은 파이썬을 활용하여 각도를 clock 값으로 변환하는 예제에 대해 알아보려 합니다.

 

MATLAB Stateflow 에서 junction 을 연결 할 때 junction 의 연결 지점을 clock 값으로 설정 합니다.

 

이러한 경우 각도에 대한 clock 값을 알 필요가 있습니다.

 

아래는 각도를 clock 값으로 변환해 주는 코드입니다.

 

Anaconda 를 설치해서 사용 중이라 numpy 나 matplotlib 은 설치가 되어 있는 상태입니다.

 

import matplotlib.pyplot as plt

import numpy as np

 

def degreeToClock(degV):

    return str((-(degV / 360.0 * 12.0) + 3) % 12)

 

 

if __name__ == '__main__':

    x = np.linspace(-180, 180, 360)

    y = map(degreeToClock, x)

    line, = plt.plot(x, y, '--', linewidth=2)

      

    plt.grid(True)

    plt.xlabel('Degree')

    plt.ylabel('Clock')

    plt.title('Degree to Clock')

      

    plt.savefig('C:\Degree_to_Clock.png')

    plt.show()

 

다운로드 링크 : Gist


 

위 코드를 실행해 보면 -180~ 180 도 에 대해 아래 그래프와 같이 변환 됩니다.

 


중학교 정도의 수학 교육을 받으신 분들이라면 atan 함수는 다들 아실거라 생각합니다.

 

atan() 함수는 inverse tangent radian 값을 구해 줍니다. 만약 degree 값으로 구하고 싶다면 atand() 함수를 사용하시면 됩니다.

 

atan() 함수는 –π/2 ~ π/2 사이의 값을 구하기 때문에 보통 복소 평면상의 값에 대한 각도를 구하고 싶을 때는 atan2() 함수를 사용합니다.

 

atan2() 함수를 사용하면 –π ~ π 사이의 radian 값을 구할 수 있습니다. atan2() 함수의 원형은 아래와 같은데~ 아래 수식에서 Y 값은 imaginary 값을 X 는 real 값을 의미합니다.


P = atan2(Y,X)

 

atan() 함수와 마찬가지로 degree 값을 구하고 싶을 때는 atan2d() 함수를 사용하면 됩니다.

 

참고로 atans2() 함수의 사용 결과는 angle() 함수의 결과와 같습니다. 즉 아래와 같은 수식이 성립 한다는 것입니다.

Z=X+Yi

angle(Z) = atan2(Y, X)

 

간단하게 실험을 해 보죠~

 

z = 3 + 4i;

atan2V = atan2(imag(z),real(z))

angleV = angle(z)

thetaD = atan2d(imag(z),real(z))

[Th,R]=cart2pol(real(z), imag(z))

 

아래 결과를 보시면 atan2() 와 angle() 함수의 결과가 같은 것을 확인 할 수 있습니다.


+ Recent posts