수알못 게임 개발자를 위한 기초 삼각 함수 스터디

안녕하세요. 연두아빠에요.


저와 같은 수알못 (수학을 알지 못하는) 게임 개발자들을 위해서...


오늘부터 게임 개발에 필요한 기초 삼각함수 스터디를 진행해보려고 합니다.

 

 

삼각함수(Trigonometric function)...

 

일단 있어보이기 위해 영어 깔고 갑니다.

 

수알못 개발자들이 영어까지 모르면 더 힘듭니다...

 

 

수학, 영어 둘 중에 하나라도 할 줄 알면 무시는 안당하는 것 같습니다.

 

그렇다고 둘 다 모른다고 아는 척하기 보다는 둘 중 하나라도 얼른 배우는게 낫겠죠?

 

 

일단 오늘부터 저와 함께 기초 삼각 함수부터 파보도록 합시다.

 

게임 개발자를 위한 기초 삼각 함수 스터디이니 코드 부터 던져놓고 시작해보겠습니다.

 

using System;
using System.Drawing;
using System.Windows.Forms;

 

namespace DrawCircle
{
    public partial class Form1 : Form
    {
        Bitmap BitmapBuffer = null;

 

        public Form1()
        {
            InitializeComponent();

            BitmapBuffer = new Bitmap(1, 1);
            BitmapBuffer.SetPixel(0, 0, Color.Red);
        }

 

        void PutPixel(Graphics g, int x, int y, Color c)
        {
            g.DrawImageUnscaled(BitmapBuffer, x, y);
        }

 

        void Form1_Paint(object sender, PaintEventArgs e)
        {
            double radius = 30.0;

 

            using (Graphics g = e.Graphics)
            {
                g.Clear(Color.White);

 

                for (int i = 0; i < 360; ++i)
                {
                    double angle = i * Math.PI / 180;
                    int x = 100 + (int)(radius * Math.Cos(angle));
                    int y = 100 + (int)(radius * Math.Sin(angle));

 

                    PutPixel(g, x, y, Color.Red);
                }

                g.Dispose();
            }
        }
    }
}


간단히 C#으로 원을 그려주는 코드를 하나 만들어 보았습니다.

 

다들 소싯적에 원 한 두개씩 그려보셨죠?

 

뭐 이런 저런 코드가 있지만, 제일 중요한 부분은 Form1_Paint() 함수 입니다.

 

0도 부터 360도까지 룹을 돌면서 각도 값을 라디안 값으로 변환해 angle에 저장하고,

 

Cos(), Sin() 함수에 해당 값을 넣어 주어 원을 그려주는게 다입니다.

 

다만 이것은 원의 반지름이 1에 해당하는 원을 그려주게 되므로...

 

radius 값을 곱해주는 것으로 우리가 원하는 반지름을 갖는 원을 그려줄 수 있게 됩니다.

 

 

일반적으로 각도를 표현하는 단위는 호도각(Degree)라디안(Radian)이 있습니다.

 

호도각 각도를 0도에서 360도까지로 표현하는 방법으로 우리가 일상적으로 사용하는 각도를 의미합니다.

 

라디안 반지름이 1인 원에서 호의 길이가 1인 부채꼴의 각을 기본 단위로 삼아서...

 

원의 한 바퀴를 2π로 표현하는 방식의 각도 표현법입니다. 즉, π는 180도를 의미하게 되구요.


호도각(Degree)을 라디안(Radian)으로 변환하고자 하는 경우, 

radian = degree * Math.PI / 180


위와 같이 변환해 줄 수 있습니다.


반대로 라디안(Radian)을 호도각(Degree)로 변환하고자 하는 경우,


degree = radian * 180 / Math.PI


위와 같은 공식으로 변환이 가능하구요.

 

 

무슨 말인지 잘 모르시겠다구요?

 

수알못 개발자들에게 기초 삼각함수를 가르쳐준다더니...

 

기초는 커녕 아무런 설명도 없이 왜 원그리는 코드를 보여주는건가 하실 수도 있겠지만...

 

사실 삼각함수의 정의 자체가 바로 원을 그리는 것과 밀접한 관계가 있습니다.

 

 

위와 같이 반지름의 길이가 1인 원 단위 원이라고 합니다.

 

이렇게 반지름의 길이가 1인 원이 있을때, 원을 구성하는 각각의 점들의 위치 값을...

 

우리가 오늘 공부하고자 하는 삼각함수를 이용하여 표현할 수 있습니다.

 

 

원을 구성하는 점들 중 각도 세타(θ)에 해당하는 점의 위치를 cosθsinθ로 표현합니다.

 

즉, 바꾸어 말하면 이렇게 표현할 수도 있겠네요.

 

cosθ = x , sinθ = y

 

그림에는 탄젠트(tan)도 나오지만 일단 무시하고, 사인(sin), 코사인(cos)만 생각합시다.

 

원을 그릴때 x는 cosθ, y는 sinθ로 θ에 0부터 360까지의 각도를 대입하면 단위 원이 그려진다.

 

이게 오늘의 키포인트입니다. 이것으로 오늘 스터디를 마쳐도 충분할 것 같지만...

 

알쏭달쏭... 뭔가 아직도 좀처럼 감이 안오시는 분들을 위해 보충 설명 들어가봅니다.

 

 

고등학교 수학시간에 정말 중요하다며 가르쳐주는데...

 

정작 어디에 써먹는지는 도무지 모르겠던... 문제의 그 삼각함수...

 

그래도 삼각함수 그래프에 대한 기억은 다들 어렴풋이라도 떠오르지 않으시나요?

 

Sin은 x=0 일때, y=0 이고, x=90 일때, y=1 입니다.

Cos은 x=0 일때, y=1 그리고 x=90 일때 y=0 입니다.

 

위의 그래프를 통해 유추해 볼 수 있는 어떤 의미로는 당연한 얘기입니다.

 

Sin은 x가 0도일때 y값이 0이고, Cos은 x가 0도일때 y값이 1이다라고 했죠?

 

그것에 대한 내용은 원을 통해서도 동일하게 표현할 수 있습니다.

 

 

다들 기억하시죠? cosθ는 x고 sinθ는 y라고 위에서 정의를 내렸습니다.

 

θ가 각각 0도일 때, cos... 즉 x 값이 1이고, sin... 즉, y 값이 0이 나오네요.

 

 

다음으로 θ가 90도 일때... cos... 즉 x 값은 0이고, sin... 즉 y 값은 1이 나오네요.

 

결국 위의 물결 같은 모양의 복잡한 그래프도 결국엔 이 원을 그려보는 것으로 다 설명이 됩니다.

 

오늘은 단위 원이 존재할 때, x = cosθ, y = sinθ가 된다. 이것만 기억하시면 됩니다.

 

이게 삼각함수의 정의나 마찬가지이고, 오늘의 스터디의 핵심입니다.

 

 

게임 개발자에게 있어 삼각함수를 활용할 수 있는 분야는 무궁 무진 합니다.

 

그러나 그러한 응용을 하기 위해 삼각함수에 대해 완벽한 이해를 요구하는 것은 아닙니다.

 

무엇을 배우던 가장 중요한 것은 정확한 개념과 원리의 이해인 것 같습니다.


오늘은 공부한 거라곤 그냥 화면에 원 그려본게 다이지만... 이게 가장 핵심적인 내용입니다.

 

 

다음 시간에 좀 더 상세한 삼각함수 스터디 2탄을 진행해보겠습니다.

 

오늘은 여기까지 할께요!


공감() 및 댓글은 글쓴이에게 커다란 힘이 됩니다.


길지 않은 이 글을 쓰는데 나름 몇 시간이 걸렸어요^^;


저에게 1초만 시간을 내주셔서 공감 버튼 꾸욱 눌러주세요^^


제 블로그를 방문해 주신 모든 분들 사랑합니다^^


이상입니다. 감사합니다!


이 글을 공유하기

댓글

Designed by CMSFactory.NET