메뉴 건너뛰기

app

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

박영식2007.04.07 18:29조회 수 2485댓글 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 박영식)

댓글 달기

박영식
2007.07.08 조회 2358
박영식
2007.06.14 조회 2633
박영식
2007.04.04 조회 5643
박영식
2007.02.16 조회 2443
박영식
2007.02.15 조회 2638
박영식
2006.09.19 조회 1927
박영식
2006.09.14 조회 1973
박영식
2006.09.09 조회 1903
박영식
2006.09.05 조회 1963
박영식
2006.09.01 조회 1575
첨부 (1)
smith.JPG
66.4KB / Download 77
위로