메뉴 건너뛰기

app

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

박영식2007.04.07 18:29조회 수 2565댓글 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 조회 2435
박영식
2007.06.14 조회 2710
박영식
2007.04.04 조회 5731
박영식
2007.02.16 조회 2513
박영식
2007.02.15 조회 2713
박영식
2006.09.19 조회 1996
박영식
2006.09.14 조회 2064
박영식
2006.09.09 조회 1986
박영식
2006.09.05 조회 2038
박영식
2006.09.01 조회 1654
첨부 (1)
smith.JPG
66.4KB / Download 81
위로