메뉴 건너뛰기

app

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

박영식2007.04.07 18:29조회 수 2542댓글 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 조회 2416
박영식
2007.06.14 조회 2695
박영식
2007.04.04 조회 5712
박영식
2007.02.16 조회 2496
박영식
2007.02.15 조회 2697
박영식
2006.09.19 조회 1978
박영식
2006.09.14 조회 2044
박영식
2006.09.09 조회 1968
박영식
2006.09.05 조회 2024
박영식
2006.09.01 조회 1636
첨부 (1)
smith.JPG
66.4KB / Download 80
위로