Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Смещение при прорисовке


Автор: Marchena 12.10.2012, 00:13
MFC.
Необходимо построить фигуру как на картинке, использовал черепашью графику. Но когда прорисовывается каждый 6угольник он смещается по оси у. Не могу понять почему так.
http://s2.ipicture.ru/
Код

#include <afxwin.h>
#include <locale.h>
#include <math.h>


class CMyMainWnd : public CFrameWnd
{
public:
CMyMainWnd()
{ 
setlocale(LC_ALL,"rus");
Create(NULL,(CString)"Картинка");
}
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
class CMyApp : public CWinApp{
public:
CMyApp(){};

virtual BOOL InitInstance() 
{
m_pMainWnd=new CMyMainWnd();
m_pMainWnd->ShowWindow(SW_SHOW);
return TRUE;
}
};

BEGIN_MESSAGE_MAP(CMyMainWnd, CFrameWnd)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()

CMyApp theApp;

int x=150,y=200;
float a;
const float L=50;


void forward(){
const double RadPerDeg=0.017453292519943;
x=x+L*cos(RadPerDeg*a);
y=y+L*sin(RadPerDeg*a);
}

void turn(float angle) 
{a+=angle;
}




void CMyMainWnd::OnPaint()
{    CPaintDC* pDC=new CPaintDC(this); 
        
pDC->MoveTo(x,y);
            for(int j=0;j<18;j++){
            for(int k=0;k<6;k++){
                turn(60);        
                forward();
                pDC->LineTo(x,y);
                Sleep(10);
            }
            turn(0);
        }
            
              
   UpdateWindow();

     }

void CMyMainWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
     POINT pt;
    GetCursorPos(&pt);
     ScreenToClient(&pt);
     int x1Pos = pt.x; 
     int y1Pos = pt.y;
     Invalidate (0);
}

Автор: Earnest 12.10.2012, 15:19
Это у тебя x, y - глобальные переменные, а ф-и turn и forward их изменяют? Круто!

Особо в таком коде разбираться не хочется, но, логично предположить, что раз 6-угольник рисуется не там, то x-y к началу рисования равны не тому, что задумывалось. Или просто MoveTo нужно делать для каждого 6-угольника, а не один раз. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)