읽기 전에 추천 한 번!

블로거에겐 큰 힘입니다



사진은 세상에서 가장 높은 빌딩인 아랍에미레이트 두바이의 부르즈 할리파의 모습입니다. 그 높이가 829.8미터에 이릅니다. 높이가 829.8미터라는 것을 어떻게 측정 할 수 있을까요? 꼭대기에 올라가서 아주 긴 자를 가지고 땅으로 떨어뜨려 보는 방법도 있겠지요. 하지만 너무 위험합니다. 그럼 다른 방법은 없을까요?


고대 그리스의 천문학자들 역시 비슷한 고민을 했습니다. 지구에서 별까지의 거리를 측정하는 것입니다. 이런 문제들을 삼각함수를 활용하면 풀 수 있습니다. 건물의 높이 계산, 별까지의 거리계산 외에도 벡터계산, 진동, 음향, 파동 등의 그래프 표현, 항공기의 항법장치 등 수많은 분야에 활용되고 있습니다.


여기서는 삼각함수의 기본적인 개념을 살펴보고 파이썬을 활용해서 삼각함수표를 만들어 보도록 하겠습니다.

사인(sin), 코사인(cos), 탄젠트(tan)의 정의와 성질


이등변 삼각형에서 밑변을 x, 높이를 y, 빗변을 h, 각도를 A라고 하면,

sin A : 빗변에 대한 높이의 비

cos A : 빗변에 에대한 밑변의 비

tan A : 밑변에 대한 높이의 비


여기서 tan A는 cos A에 대한 sin A의 비율과 같고, 직각삼각형의 성질상 sin A와 cos A는 언제나 1보다 작다는 것을 알 수 있습니다.

호도법(라디안 각도), 음의 각을 측정하다

한 가지 더 알아야 할 것이 있습니다. 라디안(radian)이라는 개념입니다. 반지름이 r인 원을 그렸을 때, 반지름의 길이와 같은 길이를 갖는 호에 대응하는 중심각의 크기로 정의합니다. 일반적으로 rad로 줄여씁니다. 


우리는 반지름이 r인 원의 둘레가 2πr이라는 사실을 알고 있습니다. 만약 원을 한 바퀴돌았다면 그 각도는 2π 라디안이 됩니다. 반 바퀴라면 π 라디안이죠. 즉, π 라디안은 180도입니다. 회전방향에 따라 음의 각도에 대한 삼각함수 값도 측정할 수 있게 되었습니다.

파이썬으로 만든 삼각함수표

In [1]:
import math
 
print(" X     sinX      cosX      tanX")
print("=================================")
 
for i in range(0,91,5):
    sinx = math.sin(math.pi * (i/180))
    cosx = math.cos(math.pi * (i/180))
    tanx = math.tan(math.pi * (i/180))
    
    print("{0:3d}   {1:0.4f}    {2:0.4f}    {3:0.4f}".format(i, sinx, cosx,
                                                             tanx))
       
print("=================================")
 
 X     sinX      cosX      tanX
=================================
  0   0.0000    1.0000    0.0000
  5   0.0872    0.9962    0.0875
 10   0.1736    0.9848    0.1763
 15   0.2588    0.9659    0.2679
 20   0.3420    0.9397    0.3640
 25   0.4226    0.9063    0.4663
 30   0.5000    0.8660    0.5774
 35   0.5736    0.8192    0.7002
 40   0.6428    0.7660    0.8391
 45   0.7071    0.7071    1.0000
 50   0.7660    0.6428    1.1918
 55   0.8192    0.5736    1.4281
 60   0.8660    0.5000    1.7321
 65   0.9063    0.4226    2.1445
 70   0.9397    0.3420    2.7475
 75   0.9659    0.2588    3.7321
 80   0.9848    0.1736    5.6713
 85   0.9962    0.0872    11.4301
 90   1.0000    0.0000    16331239353195370.0000
=================================

여기에서 사용된 주요한 파이썬 문법들을 간략히 설명합니다. 자세한 내용은 Python Documentation이나 Think Python을 참조하시기 바랍니다.

라이브러리 임포트(import) 하기

파이썬은 수학, 시간, 파일시스템, 데이터베이스, 운영체제, XML, 네트워크 등을 다루기위해 기본적으로 제공하는 막강한 표준 라이브러리들이 있습니다. 하지만, 파이썬의 강력함은 전세계의 수많은 개발자들이 무료로 배포하는 멋진 라이브러리들에 있습니다. 제가 사용하는 라이브러리에 대해서는 별도로 소개하겠습니다.


파이썬에서 라이브러리를 사용하기 위해서는 처음 사용되기전에 임포트 되어 있어야 합니다. 파이썬에서 라이브러리를 임포트 하기위해서는 크게 두 가지 방법이 사용됩니다.

from pandas import Series, DataFrame 
import pandas as pd

데이터분석을 위해 웨스 맥키니가 개발한 pandas 라이브러리를 임포트한 모습입니다. 첫번째 라인은 라이브러리내의 특정 모듈을 임포트하는 방법입니다. 라이브러리에서 정의한 변수나 함수를 사용하기 위해서는 앞에 모듈명을 명시적으로 사용해야 합니다. 하지만 모듈네임이 길면 매번 명시적으로 사용하기가 여간 불편한 것이 아닙니다. 그래서 두번째 라인의 Alias를 통해 라이브러리를 사용하기도 합니다. 이렇게 하면 변수나 함수 앞에 Alias된 모듈명만 명시하면 됩니다.

math 라이브러리로 각도를 라디안으로 변환하기

    sinx = math.sin(math.pi * (i/180))
    cosx = math.cos(math.pi * (i/180))
    tanx = math.tan(math.pi * (i/180))

파이썬에서 삼각함수표를 만들기 위해서는 기본적으로 제공하는 math 라이브러리를 사용합니다. 정확한 삼각함수 값을 계산하기 위해서는 각도를 라디안으로 변경해 주어야 합니다.

반복문에서 범위 지정하기

for i in range(0,91,5):

파이썬에서도 다른 프로그래밍 언어와 마찬가지로 for와 while과 같은 반복문을 제공합니다. 반복문에 사용될 수 있는 객체는 숫자, 리스트, 튜플, 스트링 등 시퀀스형 데이터는 어떤 것이라도 사용할 수 있습니다. 숫자를 순차적으로 반복하는 경우에는 range() 함수를 사용합니다. 각 인수는 시작 값, 끝 값, 증가 값을 나타냅니다. 시작 값과 증가 값은 생략될 수 있습니다. 시작 값을 생략하면 0에서 부터, 증가 값을 생략하면 1씩 반복해서 순환합니다.

출력 값의 포맷 지정하기

print() 함수를 사용하면 출력 값의 포맷을 자유롭게 지정할 수 있습니다. 파이썬 2 이전에는 서식문자를 통해 포맷을 지정하고 튜플로 데이터를 전송하는 방식을 주로 사용했으나 파이썬 3에서는 권장하지 않는 방법입니다.

print("%3d   %0.4f    %0.4f    %0.4f" % (i, sinx, cosx, tanx))
대신 파이썬 3에서는 format() 함수와 format() 메서드를 이용해 서식을 지정할 수 있도록 하고 있습니다. 여기서는 format() 메서드를 사용하였습니다.
print("{0:3d}   {1:0.4f}    {2:0.4f}    {3:0.4f}".format(i, sinx, cosx, tanx))


댓글을 달아 주세요

  1. HLIFEINFO

    파이썬은 도입부만 보다가 잠시 쉬고 있는데 유용한거 같네요

    2014.01.04 23:48 신고 Address Modify/Delete Reply
    • ZEN

      네! 저는 데이터 분석을 위해 파이썬을 사용하고 있습니다.
      정말이지 스크립트 언어로써는 최강인 것 같습니다.
      블로그 방문해보니 관심 분야가 다양하고 내공이 상당하신 것 같은데요?
      가끔 놀러오세요 ^^

      2014.01.05 00:03 신고 Address Modify/Delete
  2. 눈야옹

    와 감사합니다. 라디안에 대해서 정리가 잘되어 있어서 이해가 됬어요. ^^ 캡쳐 해서 보관 해도 될까요? 안되면 삭제 하겠습니다.

    2014.11.20 05:47 신고 Address Modify/Delete Reply