c언어 sin 값

c언어 콘솔을 이용하여, sin값이 어떻게 변화하는지 알아보자.

먼저 콘솔응용 프로그램에서는 마우스 커서의 위치를 이동시켜주지 않으면 자신이 원하는 방향으로 출력하기 힘들기 때문에 마우스 커서의 위치를 이동시켜주는 함수가 필요하다.
void gotoxy(int x, int y)
{
	COORD CursorPosition = { x, y };
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPosition);
}
내가 출력하고 싶은 방향이 x = 10, y = 20이라고 치면
gotoxy(10, 20);
그 이후에 10, 20 방향부터 글자가 출력된다.
이 함수를 이용하여 sin 값이 어떤 모양으로 출력되는지 알고 싶어졌다. sin은 높이/빗변 이다. 그렇게 되면 루트가 필요하게 될 수 있으니 0부터 1까지를 각도로 나타내어 적어보려 한다.
float sin[90] = 
	{
		0.0175, 0.0349, 0.0523, 0.0698, 0.0872,
		0.1045, 0.1219, 0.1392, 0.1564, 0.1736, 0.1908,
		0.2079, 0.2250, 0.2419, 0.2588, 0.2756, 0.2924,
		0.3090, 0.3256, 0.3420, 0.3584, 0.3746, 0.3907,
		0.4067, 0.4226, 0.4384, 0.4540, 0.4695, 0.4848,
		0.5000, 0.5150, 0.5299, 0.5446, 0.5592, 0.5736, 0.5878,
		0.6018, 0.6157,	0.6293,	0.6428,	0.6561,	0.6691,	0.6820,	0.6947,
		0.7071,	0.7193,	0.7314,	0.7431,	0.7547,	0.7660,	0.7771,	0.7880,	0.7986,
		0.8090,	0.8192,	0.8290,	0.8387,	0.8480,	0.8572,	0.8660,	0.8746,	0.8829,	0.8910,	0.8988,
		0.9063,	0.9135,	0.9205,	0.9272,	0.9336,	0.9397,	0.9455,	0.9511,	0.9563,	0.9613,	0.9659,
	        0.9703,	0.9744, 0.9781,	0.9816, 0.9848, 0.9877, 0.9903, 0.9925, 0.9945, 0.9962, 0.9976,
                0.9986, 0.9994, 0.9998, 1.0000
	};
sin을 소숫점 자리로 나타내면 이렇게 나온다. 이제 이것을 gotoxy에 대입해 보자.

#include "stdafx.h"

int main()
{
	float sin[90] = 
	{
		0.0175, 0.0349, 0.0523, 0.0698, 0.0872,
		0.1045, 0.1219, 0.1392, 0.1564, 0.1736, 0.1908,
		0.2079, 0.2250, 0.2419, 0.2588, 0.2756, 0.2924,
		0.3090, 0.3256, 0.3420, 0.3584, 0.3746, 0.3907,
		0.4067, 0.4226, 0.4384, 0.4540, 0.4695, 0.4848,
		0.5000, 0.5150, 0.5299, 0.5446, 0.5592, 0.5736, 0.5878,
		0.6018, 0.6157,	0.6293,	0.6428,	0.6561,	0.6691,	0.6820,	0.6947,
		0.7071,	0.7193,	0.7314,	0.7431,	0.7547,	0.7660,	0.7771,	0.7880,	0.7986,
		0.8090,	0.8192,	0.8290,	0.8387,	0.8480,	0.8572,	0.8660,	0.8746,	0.8829,	0.8910,	0.8988,
		0.9063,	0.9135,	0.9205,	0.9272,	0.9336,	0.9397,	0.9455,	0.9511,	0.9563,	0.9613,	0.9659,
		0.9703,	0.9744, 0.9781,	0.9816, 0.9848, 0.9877, 0.9903, 0.9925, 0.9945, 0.9962, 0.9976,
		0.9986, 0.9994, 0.9998, 1.0000
	};
	for (int t = 0, y = 90; y > 0; t++, y -= 5)
	{
		gotoxy(10 + t, 10 + sin[y] * 10);
		putchar('X');
	}
	for (int t = 18, y = 0; y < 90; t++, y += 5)
	{
		gotoxy(10 + t, 10 + sin[y] * 10);
		putchar('X');
	}
	for (int t = 35, y = 90; y > 0; t++, y -= 5)
	{
		gotoxy(10 + t, 10 + sin[y] * 10);
		putchar('X');
	}
	for (int t = 53, y = 0; y < 90; t++, y += 5)
	{
		gotoxy(10 + t, 10 + sin[y] * 10);
		putchar('X');
	}
	
	

	gotoxy(0, 24);
	system("pause");
    return 0;
}
위에 있는 "stdafx.h"헤더파일은 미리컴파일된 헤더이다. 처음에 파일을 만들 때 빈프로젝트 말고 만드는데 여기 헤더파일에 쓸 헤더파일을 몇개 집어서 넣을 수 있다. 내가 "stdafx.h"에
넣은 헤더파일은
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
이렇게 세개이다. 이것을 활용하면 파일을 깔끔하게 관리 할 수 있다.
for문을 4개 만들어서 sin의 이동경로를 출력해 보았다. 상수가 많고 보기가 힘들 수도 있겠다. 결과는 이렇다.







처음 시작이 0점이라고 하면 위로 올라갔다가 내려가는 것을 볼 수 있다. 이것을 활용해서 cos, tan도 가능할 것이다.


댓글