void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect framesize; // 창크기 저장 객체 생성
GetClientRect(&framesize); // 창의 사이즈를 구한다.
int fsvm_h, fsvm_v; // 창의 중심값을 저장할 변수
fsvm_h=(framesize.right/2)/10*10;
fsvm_v=(framesize.bottom/2)/10*10;
CString str;
float radv=0.00; //반지름
int leftup, value_r=0, xvalue=0; // 정수화 된 반지름
int x, y; // PEN으로 원을 그리기 위한 변수
//식 (9-188)에서의 r값이 0.5인 원 시작//
radv = 1.0/(1+0.5);
leftup=radv*100;
radv = 1.0/0.5;
xvalue=radv*100;
CPen pen10(PS_ENDCAP_ROUND,1,RGB(255,0,0)); //브러쉬생성
for (x=0; x<512; x++)
for(y=0; y<512; y++){
if(pow(x-127,2)+pow(y-127,2)>pow(leftup,2)&&pow(x-127,2)+pow(y-127,2)<pow(leftup+2,2))
dc.SetPixel(x+fsvm_h-127-leftup+100, y+fsvm_v-127, RGB(x, tan(x*y), y));
//식 (9-189)에서의 x값이 ±0.5인 원 시작//
if(pow(x-256,2)+pow(y-256,2)>pow(xvalue,2)&&pow(x-256,2)+pow(y-256,2)<pow(xvalue+2,2)){ // 원의 방정식
if(y+fsvm_v-256+xvalue<fsvm_v+100&&x+fsvm_h-256+xvalue/2<fsvm_h+100) //+0.5의 한계값
dc.SetPixel(x+fsvm_h-256+xvalue/2, y+fsvm_v-256+xvalue, RGB(255, 0, 0));
if(y+fsvm_v-256-xvalue>fsvm_v-100&&x+fsvm_h-256+xvalue/2<fsvm_h+100) //-0.5의 한계값
dc.SetPixel(x+fsvm_h-256+xvalue/2, y+fsvm_v-256-xvalue, RGB(255, 0, 0));
if(pow(x-127,2)+pow(y-127,2)>pow(leftup,2)&&pow(x-127,2)+pow(y-127,2)<pow(leftup+1,2)&&y==168){
CWindowDC wdc(this); //windowDC를 이용한 Γ값과 r, x값의 표현
str.Format("Γ_r = %f, Γ_i = %f => r≒0.5, x≒0.5", (x-127-leftup+100)/100.0, (y-127)/100.0);
wdc.TextOut(100, 10, (LPCTSTR)str);
}
}
//식 (9-189)에서의 x값이 ±0.5인 원 끝//
}
//식 (9-188)에서의 r값이 0.5인 원 끝/
while(value_r<3){
radv = 1.0/(1+value_r);
leftup=radv*100;
//pen을 이용한 원 그리기 시작//
CPen pen10(PS_ENDCAP_ROUND,1,RGB(255,0,0)); //브러쉬생성
for (x=0; x<255; x++)
for(y=0; y<256; y++)
if(pow(x-127,2)+pow(y-127,2)>pow(leftup,2)&&pow(x-127,2)+pow(y-127,2)<pow(leftup+2,2))
dc.SetPixel(x+fsvm_h-127-leftup+100, y+fsvm_v-127, RGB(x, tan(x*y), y));
//pen을 이용한 원 그리기 시작//
value_r++;
}
//////////////////////////////////////////////////////////원 그리는 부분 끝////////////////////
int Vgrid_v=40;
int Vgrid=10;
//////////////////////////////////////////가로줄 그리기//////////////////////////////////////
while(Vgrid_v<framesize.bottom)
{
CPen pen2(PS_SOLID, 1, RGB(192, 192, 192));
dc.SelectObject(&pen2);
dc.MoveTo(0, Vgrid_v);
dc.LineTo(framesize.right, Vgrid_v);
Vgrid_v=Vgrid_v+10;
}
//////////////////////////////////////////세로줄 그리기//////////////////////////////////////
while(Vgrid<framesize.right)
{
CPen pen(PS_SOLID, 1, RGB(192, 192, 192));
dc.SelectObject(&pen);
dc.MoveTo(Vgrid, 30);
dc.LineTo(Vgrid, framesize.bottom);
Vgrid=Vgrid+10;
// str.Format("framesize.right = %d, Vgrid = %d", framesize.right, Vgrid);
// MessageBox((LPCTSTR)str, NULL, MB_OK);
}
//////////////////////////////////////////수직선 그리기//////////////////////////////////////
CPen pen_v(PS_SOLID, 1, RGB(0, 0, 0));
dc.SelectObject(&pen_v);
dc.MoveTo(fsvm_h, 0);
dc.LineTo(fsvm_h, framesize.bottom);
CPen pen_h(PS_SOLID, 1, RGB(0, 0, 0));
dc.SelectObject(&pen_h);
dc.MoveTo(0, fsvm_v);
dc.LineTo(framesize.right, fsvm_v);
}
{
CPaintDC dc(this); // device context for painting
CRect framesize; // 창크기 저장 객체 생성
GetClientRect(&framesize); // 창의 사이즈를 구한다.
int fsvm_h, fsvm_v; // 창의 중심값을 저장할 변수
fsvm_h=(framesize.right/2)/10*10;
fsvm_v=(framesize.bottom/2)/10*10;
CString str;
float radv=0.00; //반지름
int leftup, value_r=0, xvalue=0; // 정수화 된 반지름
int x, y; // PEN으로 원을 그리기 위한 변수
//식 (9-188)에서의 r값이 0.5인 원 시작//
radv = 1.0/(1+0.5);
leftup=radv*100;
radv = 1.0/0.5;
xvalue=radv*100;
CPen pen10(PS_ENDCAP_ROUND,1,RGB(255,0,0)); //브러쉬생성
for (x=0; x<512; x++)
for(y=0; y<512; y++){
if(pow(x-127,2)+pow(y-127,2)>pow(leftup,2)&&pow(x-127,2)+pow(y-127,2)<pow(leftup+2,2))
dc.SetPixel(x+fsvm_h-127-leftup+100, y+fsvm_v-127, RGB(x, tan(x*y), y));
//식 (9-189)에서의 x값이 ±0.5인 원 시작//
if(pow(x-256,2)+pow(y-256,2)>pow(xvalue,2)&&pow(x-256,2)+pow(y-256,2)<pow(xvalue+2,2)){ // 원의 방정식
if(y+fsvm_v-256+xvalue<fsvm_v+100&&x+fsvm_h-256+xvalue/2<fsvm_h+100) //+0.5의 한계값
dc.SetPixel(x+fsvm_h-256+xvalue/2, y+fsvm_v-256+xvalue, RGB(255, 0, 0));
if(y+fsvm_v-256-xvalue>fsvm_v-100&&x+fsvm_h-256+xvalue/2<fsvm_h+100) //-0.5의 한계값
dc.SetPixel(x+fsvm_h-256+xvalue/2, y+fsvm_v-256-xvalue, RGB(255, 0, 0));
if(pow(x-127,2)+pow(y-127,2)>pow(leftup,2)&&pow(x-127,2)+pow(y-127,2)<pow(leftup+1,2)&&y==168){
CWindowDC wdc(this); //windowDC를 이용한 Γ값과 r, x값의 표현
str.Format("Γ_r = %f, Γ_i = %f => r≒0.5, x≒0.5", (x-127-leftup+100)/100.0, (y-127)/100.0);
wdc.TextOut(100, 10, (LPCTSTR)str);
}
}
//식 (9-189)에서의 x값이 ±0.5인 원 끝//
}
//식 (9-188)에서의 r값이 0.5인 원 끝/
while(value_r<3){
radv = 1.0/(1+value_r);
leftup=radv*100;
//pen을 이용한 원 그리기 시작//
CPen pen10(PS_ENDCAP_ROUND,1,RGB(255,0,0)); //브러쉬생성
for (x=0; x<255; x++)
for(y=0; y<256; y++)
if(pow(x-127,2)+pow(y-127,2)>pow(leftup,2)&&pow(x-127,2)+pow(y-127,2)<pow(leftup+2,2))
dc.SetPixel(x+fsvm_h-127-leftup+100, y+fsvm_v-127, RGB(x, tan(x*y), y));
//pen을 이용한 원 그리기 시작//
value_r++;
}
//////////////////////////////////////////////////////////원 그리는 부분 끝////////////////////
int Vgrid_v=40;
int Vgrid=10;
//////////////////////////////////////////가로줄 그리기//////////////////////////////////////
while(Vgrid_v<framesize.bottom)
{
CPen pen2(PS_SOLID, 1, RGB(192, 192, 192));
dc.SelectObject(&pen2);
dc.MoveTo(0, Vgrid_v);
dc.LineTo(framesize.right, Vgrid_v);
Vgrid_v=Vgrid_v+10;
}
//////////////////////////////////////////세로줄 그리기//////////////////////////////////////
while(Vgrid<framesize.right)
{
CPen pen(PS_SOLID, 1, RGB(192, 192, 192));
dc.SelectObject(&pen);
dc.MoveTo(Vgrid, 30);
dc.LineTo(Vgrid, framesize.bottom);
Vgrid=Vgrid+10;
// str.Format("framesize.right = %d, Vgrid = %d", framesize.right, Vgrid);
// MessageBox((LPCTSTR)str, NULL, MB_OK);
}
//////////////////////////////////////////수직선 그리기//////////////////////////////////////
CPen pen_v(PS_SOLID, 1, RGB(0, 0, 0));
dc.SelectObject(&pen_v);
dc.MoveTo(fsvm_h, 0);
dc.LineTo(fsvm_h, framesize.bottom);
CPen pen_h(PS_SOLID, 1, RGB(0, 0, 0));
dc.SelectObject(&pen_h);
dc.MoveTo(0, fsvm_v);
dc.LineTo(framesize.right, fsvm_v);
}
댓글 달기