<이동: 방향키 돋보기:+/- 축 표시:0 점 조절: ,/.>

 

 

#define half(n) floor(n+0.5) #define pi 3.14159 #define fig '.' 

void gotoxy(int, int); void axis(); void line_x(int y, int L); void line_y(int x, int L); void control(); void draw();

int axis_whether = 1; int axis_x = 20; int axis_y = 12; double size = 4; double point = 40; double x; double y;

void fun(double x){  y = 1/(exp(-x/2)+0.1); }

void main(){ while(true)draw(); control(); system("cls");} }

void control(){ char key = getch(); switch(key){case 77: axis_x -= 2; break; case 75: axis_x += 2; break; case 80: axis_y -= 1; break;case 72: axis_y += 1; break;case 43: size /= 2; break; case 45: size *= 2; break; case 48: if(axis_whether) axis_whether=0; else  axis_whether=1; break; case 46: point *= 2; break;  case 44: point /= 2; break; default: break;} }

void draw(){ for (double x=-((20.0+axis_x)/12.0)*size; x<=((40.0-axis_x)/12.0)*size; x+=(40.0/12.0)*size / point){ fun(x); int xp, yp; xp = half(2*(x/(size/12.0) + axis_x)) ;

yp = half(axis_y - y/(size/12.0)) ; if(xp<0 || xp>79 || yp<0 || yp>24) continue; gotoxy(xp, yp); printf("%c", fig);}  if(axis_whether) axis(); }

void axis(){ if(axis_y>0 && axis_y<24) line_x(axis_y, 79); if(axis_x>0 && axis_x<40) line_y(2*axis_x, 24); if(axis_y>0 && axis_y<24) { gotoxy(74, axis_y+1); printf("%.2lf", ((40.0-axis_x)/12.0)*size); }  if(axis_x>0 && axis_x<38) { gotoxy(2*(axis_x+1), 0); printf("%.2lf", (axis_y/12.0)*size); } }

void line_x (int y, int L){ for(int i=0; i<L; i++) { gotoxy(i, y); printf("-"); }}

void line_y (int x, int L){ for(int i=0; i<L; i++) { gotoxy(x,i); printf("|"); }}

void gotoxy(int x, int y){ COORD cur; cur.X = x; cur.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cur);}