c언어 sin 값
c언어 콘솔을 이용하여, sin값이 어떻게 변화하는지 알아보자.
먼저 콘솔응용 프로그램에서는 마우스 커서의 위치를 이동시켜주지 않으면 자신이 원하는 방향으로 출력하기 힘들기 때문에 마우스 커서의 위치를 이동시켜주는 함수가 필요하다.
gotoxy(10, 20);
그 이후에 10, 20 방향부터 글자가 출력된다.
이 함수를 이용하여 sin 값이 어떤 모양으로 출력되는지 알고 싶어졌다. sin은 높이/빗변 이다. 그렇게 되면 루트가 필요하게 될 수 있으니 0부터 1까지를 각도로 나타내어 적어보려 한다.
넣은 헤더파일은
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
먼저 콘솔응용 프로그램에서는 마우스 커서의 위치를 이동시켜주지 않으면 자신이 원하는 방향으로 출력하기 힘들기 때문에 마우스 커서의 위치를 이동시켜주는 함수가 필요하다.
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도 가능할 것이다.
댓글
댓글 쓰기