메뉴 건너뛰기

app

[MFC] SMITH CHART에서 r=0.5, x=0.5의 Γ_i, Γ_r의 값, CWindowDC

박영식2007.04.07 18:29조회 수 2339댓글 0

  • 1
    • 글자 크기
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);
        
}

박영식 (비회원)
  • 1
    • 글자 크기
[MFC] Cptrarray 클래스를 이용한 정렬 프로그램 (by 박영식) [MFC] 수직선 그리기와 SMITH CHART 연습 (by 박영식)

댓글 달기

이전 1 ... 6 7 8 9 10 11 12 13 14 15다음
첨부 (1)
smith.JPG
66.4KB / Download 62
위로