Á¦      ¸ñ: ÀÔ·Â⸸µé±â
ÀÌ      ¸§: ÀÌ¿¬ÁÖ
ÀÛ¼ºÀÏÀÚ: 2008.11.21 - 11:45
CDC* CDropView::SetMapMode(CDC *pDC)
{
//pDC = GetDC();
    pDC ->SetMapMode(MM_LOMETRIC);
    
    CRect rect;

    GetClientRect(&rect);
    
    pDC ->SetViewportOrg(200, rect.bottom/100 *95);
//±×¸²±×¸± ¿µ¿ªÈ®º¸
    m_BaseRect.left=-150;
    m_BaseRect.right=3000;
    m_BaseRect.top=rect.bottom/5*64;
    m_BaseRect.bottom=-rect.bottom/5*20;
    
    return pDC;
}

void CDropView::DrawDispWindow(CDC *pDC)
{
//¿øÁ¡º¯È­¸¦  Àû¿ë
pDC =SetMapMode(pDC);

//Ææ°ú ºê·¯½¬ »ý¼º
CPen BorderPen(PS_INSIDEFRAME, 1, RGB(0,255,255));
CPen *pOldPen;

CBrush WhiteBrush(RGB(255,255,255));
CBrush *pOldBrush;


//Èò»öÀ¸·ÎÄ¥ÇÔ
pOldBrush= pDC->SelectObject(&WhiteBrush);
pOldPen= pDC->SelectObject(&BorderPen);
pDC ->Rectangle(m_BaseRect);

pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);

}

void CDropView::DrawCoordinate(CDC *pDC)
{
int i,j;

char buffer [100];

//¿øÁ¡º¯È­¸¦ Àû¿ë
pDC=SetMapMode(pDC);

//Ææ»ý¼º
CPen FramePen(PS_SOLID, 1, RGB(0,0,0));
CPen CordPen(PS_SOLID, 1, RGB(0,255,255));
CPen *pOldPen;

//Ææ¼±ÅÃ
pOldPen=pDC->SelectObject(&FramePen);

//ÁÂÇ¥Ãà±×¸²
pDC -> MoveTo(0,m_BaseRect.top);
pDC -> LineTo(0, 0);
//pDC -> MoveTo(0, m_BaseRect.bottom);
pDC -> LineTo(m_BaseRect.right,0);

//xÃàÁÂÇ¥´«±Ý
pDC -> SelectObject(&CordPen);
double coordinate=0.0;
pDC ->SetTextAlign(TA_CENTER+ TA_TOP);

for(i=0; i<15 ; i++)
{
pDC ->MoveTo(i, -5);
pDC ->LineTo(i,5);

sprintf(buffer, "%3.1f", coordinate);
    pDC->TextOut(200*i, -5, buffer);
    coordinate+=1.0;}

//yÃàÁÂÇ¥´«±Ý
coordinate=0.0;
    pDC ->SetTextAlign(TA_RIGHT+ TA_BASELINE);

for(j=0; j<18; j++)
{pDC ->MoveTo(-5,j);
pDC ->LineTo(5,j);
sprintf(buffer, "%3.1f", coordinate);
    pDC->TextOut(-5, 100*j, buffer);
    coordinate+=2.0;
    
}
pDC->SelectObject(pOldPen);

}

void CDropView::OnDraw(CDC* pDC)
{
CDropDoc* pDoc=GetDocument();
    //ASSERT_VALID(pDoc);

    DrawDispWindow(pDC);
    DrawCoordinate(pDC);    

pDC =SetMapMode(pDC);//¿øÁ¡º¯È­¸¦ ±×¸²¿¡ Àû¿ë
    
    double time, h=1.0/180.0;
    double velocity=0.0;
    double k1, k2, k3, k4;
for (time=m_initialTime; time< m_maxTime; time=time+h)
    {
        k1 = h * function(time, velocity );
        k2 = h * function(time+h/2.0, velocity+k1/2.0 );
        k3 = h * function(time+h/2.0, velocity+k2/2.0 );
        k4 = h * function(time+h, velocity+k3 );
        velocity = velocity + (1.0/6.0)*(k1+2.0*k2 + 2.0*k3 +k4);
        pDC->SetPixel(int(180.0*(time+h)), int(50.0*velocity), RGB(255,0,0));
    
    //    for (i=0; i<310000; i++);
    }
}

double function(double t, double v)
{
    double k=0.000103, mass= 0.00903;
    return 9.8 - (k/mass) * pow(v, 2.0);
}

void CDropView::OnButtonStart()
{
Invalidate(TRUE);
UpdateData(TRUE);    
}