메뉴 건너뛰기

app

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

박영식2007.04.07 18:29조회 수 2487댓글 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 조회 2359
박영식
2007.06.14 조회 2634
박영식
2007.04.04 조회 5649
박영식
2007.02.16 조회 2447
박영식
2007.02.15 조회 2639
박영식
2006.09.19 조회 1928
박영식
2006.09.14 조회 1978
박영식
2006.09.09 조회 1906
박영식
2006.09.05 조회 1966
박영식
2006.09.01 조회 1580
첨부 (1)
smith.JPG
66.4KB / Download 78
위로