![]() |
Á¦ ¸ñ: ÀÔ·Â⸸µé±â |
![]() |
ÀÌ ¸§: ÀÌ¿¬ÁÖ |
ÀÛ¼ºÀÏÀÚ: 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); } |