'Sin'에 해당 되는 글 1건
- 2009.08.10 sin 그래프 그리기
sin 그래프 그리기
#include <stdio.h>
#include <math.h>
#define X 50
#define Y 79
void graphSine(void); //sine 함수의 그래프를 그리는 함수
double PI(void); //원주율을 반환하는 함수
void initializing(char graph[][X], double x[], double y[], int index[]); //초기화 함수
void settingStar(char graph[][X], int index[]); //그래프모양을 '*'로 세팅
void plot(char graph[][X]); //그래프를 plot
int main(void)
{
graphSine();
return 0;
}
void graphSine(void) { //sine 함수의 그래프를 그리는 함수
char graph[Y][X] = {' '}; //그래프 모양의 '*'를 저장할 배열
double x[X]; //x축 값을 저장할 배열
double y[X]; //y축 값을 저장할 배열
int index[X]; //graph에서 '*'로 표시될 index를 저장하기 위한 배열
initializing(graph, x, y, index);
settingStar(graph, index);
plot(graph);
}
double PI(void) { //원주율을 반환하는 함수
return acos(-1);
}
void initializing(char graph[][X], double x[], double y[], int index[]) { //초기화 함수
const double T = 2*PI(); //주기 2pi
const double dx = T/(X-1); //x축값들 사이의 간격
int i, j;
for(i=0 ; i<X ; i++) { //x축을 나타내기 위한 세팅
graph[(Y-1)/2][i] = '|';
}
for(i=0 ; i<X ; i++) { //x 값을 0부터 2pi까지 등간격으로 나누어 초기화
x[i] = i*dx;
}
for(i=0 ; i<X ; i++) { //x 값에 대응하는 sin(x)값을 초기화후 0부터 Y-1 사이의 값으로 확대
y[i] = sin(x[i]);
y[i] = (Y-1)/2*(y[i]+1);
}
for(i=0 ; i<X ; i++) { //y값을 0부터 Y-1 사이의 정수 값으로 이산화
for(j=0 ; j<Y ; j++) {
if(j-0.5 <= y[i] && y[i] < j+0.5) {
index[i] = j;
break;
}
}
}
}
void settingStar(char graph[][X], int index[]) { //그래프모양을 '*'로 세팅
int i;
for(i=0 ; i<X ; i++) {
graph[index[i]][i] = '*';
}
}
void plot(char graph[][X]) { //그래프를 plot
int i;
int j;
for(i=0 ; i<Y ; i++) { //y축 그리기
switch(i) {
case 0:
printf("-1");
break;
case (Y-1)/2-1:
printf("0");
break;
case Y-1:
printf("1\n");
break;
default:
printf("-");
}
}
for(j = 0 ; j<X ; j++) { //'*'를 이용해 그래프를 출력
for(i=0 ; i<Y ; i++) {
printf("%c", graph[i][j]);
} puts("\n");
}
}