рисование графика на форме.
Добавлено: 22 дек 2009, 23:07
собственно, задание. построить спираль.
с центром в координатах 0.0
задающуюся параметрическими уравнениями.
х = х(0) + R*(1-t*t)/(1+t*t)
y = y(0) + R*2*t/(1+t*t)
t = [0,1]
x(0),y(0). начало координат.
не рисует график. не разбирусь в чем ошибка. подсобите пожалуйста.
с центром в координатах 0.0
задающуюся параметрическими уравнениями.
х = х(0) + R*(1-t*t)/(1+t*t)
y = y(0) + R*2*t/(1+t*t)
t = [0,1]
x(0),y(0). начало координат.
не рисует график. не разбирусь в чем ошибка. подсобите пожалуйста.
Код: Выделить всё
void CSANIAView::OnDraw(CDC* pDC)
{
CSANIADoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CRect rect;
GetWindowRect(&rect);
CFont font;
font.CreateFont(16,0,0,0,FW_NORMAL,0,0,0,
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("Comic Sans MS"));
CFont *pOldFon = pDC->SelectObject(&font);
CBrush MyBrush(RGB(100,150,100));
pDC->SelectObject(&MyBrush);
//Определение Толщины заданных линий
CPen MyPen(PS_DASHDOT,3,COLORREF(0));
CPen *pOldPen = pDC->SelectObject(&MyPen);
int mx=rect.Width()/2;
int my=rect.Height()/2;
int x(0),y(0);
double t(0);
double rad=3.14/180;
x=x+(rad*((1-t*t)/(1+t*t)));
y=y+(rad*2*t/(1+t*t));
pDC->MoveTo(mx+x*mx/320,my+y*my/240);
for(t=0;t<=1;t+=0.01)
{
x=x+(rad*((1-t*t)/(1+t*t)));
y=y+(rad*2*t/(1+t*t));
pDC->LineTo(mx+x*mx/320,my+y*my/240);
}
//pDC->FloodFill(mx+2,my+2,0);
//Координатная сетка
pDC->MoveTo(80*mx/320,my);
pDC->LineTo(2*mx-80*mx/320,my);//Ось абсцисс
pDC->MoveTo(mx,15*my/240);
pDC->LineTo(mx,2*my-15*my/240);//Ось ординат
//Стрелка абсцисс
pDC->MoveTo(2*mx-80*mx/320,my);
pDC->LineTo(2*mx-105*mx/320,my+15*my/240);
pDC->MoveTo(2*mx-80*mx/320,my);
pDC->LineTo(2*mx-105*mx/320,my-15*my/240);
//Стрелка Ординат
pDC->MoveTo(mx,15*my/240);
pDC->LineTo(mx+15*mx/320,50*my/240);
pDC->MoveTo(mx,15*my/240);
pDC->LineTo(mx-15*mx/320,50*my/240);
pDC->SelectObject(pOldPen);//Жирность линий
//Сетка
int in;
for(in=0;in<=10;in++)
{
//Ординаты
pDC->MoveTo(80*mx/320,(15+in*45)*my/240);
pDC->LineTo(2*mx-80*mx/320,(15+in*45)*my/240);
CString str;
const CSize cszStr(pDC->GetTextExtent(str));
pDC->TextOut(mx,(15+in*45)*my/240,str);
//Абсциссы
pDC->MoveTo((80+in*48)*mx/320,15*my/240);
pDC->LineTo((80+in*48)*mx/320,2*my-15*my/240);
//pDC->TextOut(mx,(15+in*45)*my/240);
}
}