- 0
✩
0
Помогите. необходим код для построения параболы на C++
Необходимо построить координатную плоскость и на ней параболу.имеется квадратное уравнение. пользователь вводит в формы для ввода коэффициенты (a, b и c) при квадратном уравнении(a * x * x + b * x + c).
CClientDC MyDC(GetDlgItem (IDC_STATIC1));
CRect Rect; // объявление объекта класса CRect
CWnd *pWnd = MyDC.GetWindow();
//определение указателя на окно, занимаемое элементом "Static text"
pWnd->GetClientRect( &Rect );
// передаем размеры окна, занимаемое элементом "Static text" в
// объект Rect
MyDC.FillSolidRect( &Rect, RGB(255,255,255) );
// Рисуем закрашенный прямоугольник в элементе "Static text"
int w,h,w1,h1,m_x,h2,wp,wl,hp,hl,width,step,width1,height,height1;
w=Rect.Width()/2;
w1=Rect.Width();
h=Rect.Height();
h1=Rect.Height()/2;
MyDC.MoveTo(w,0);
MyDC.LineTo(w,h);
MyDC.MoveTo(0,h1);
MyDC.LineTo(w1,h1);
for (step=0;width<w1-30;step+=10)
{width=w+step;
MyDC.MoveTo(width,h1-2);
MyDC.LineTo(width,h1+3);
height=h1+step;
MyDC.MoveTo(w-2,height);
MyDC.LineTo(w+3,height);
width1=w-step;
MyDC.MoveTo(width1,h1-2);
MyDC.LineTo(width1,h1+3);
height1=h1-step;
MyDC.MoveTo(w-2,height1);
MyDC.LineTo(w+3,height1);
}
MyDC.MoveTo(w,0);
MyDC.LineTo(w+3,15);
MyDC.MoveTo(w,0);
MyDC.LineTo(w-3,15);
MyDC.MoveTo(w1,h1);
MyDC.LineTo(w1-15,h1+3);
MyDC.MoveTo(w1,h1);
MyDC.LineTo(w1-15,h1-3);
MyDC.TextOut( w-15, h1+10,"0");
MyDC.TextOut( w1-15, h1+5,"x");
MyDC.TextOut( w-15, 1,"y");
m_a=IDC_EDIT1/1000;
m_b=IDC_EDIT2/1000;
m_c=IDC_EDIT3/1000;
UpdateData(1);
wp=w;
hp=h1,
wl=w;
hl=h1;
for (m_x=0;hp>=0 && wp<=w1 && hp<=h && wp>=0;m_x++)
{h2=m_a*m_x*m_x+m_b*m_x+10*m_c;
MyDC.MoveTo(wp,hp);
MyDC.LineTo(wp+m_x,hp-h2);
wp=wp+m_x;
hp=hp-h2;
}
m_x=0;
for (m_x=0;hl>=0 && wl>=0 && hl<=h && wl<=w1;m_x--)
{h2=0.5*m_a*m_x*m_x+m_b*m_x+10*m_c;
MyDC.MoveTo(wl,hl);
MyDC.LineTo(wl+m_x,hl-h2);
wl=wl+m_x;
hl=hl-h2;
}
только вот рисует не всегда параболу почему-то.. не совсем то, что требуется... программа пишется на visual c++ 6.0. тип проекта MFC..
300
1 ответ:
-
- 1
Вики-ответСам нашёл ошибку)))
for (m_x=0;hp>=0 && wp<=w1 && hp<=h && wp>=0;m_x++) { h2=0; h2=0.1*m_a*m_x*m_x+m_b*m_x+10*m_c; MyDC.MoveTo(wp,hp); MyDC.LineTo(w+m_x,h1-h2); wp=w+m_x; hp=h1-h2; } for (m_x=0;hl>=0 && wl>=0 && hl<=h && wl<=w1;m_x--) { h2=0; h2=0.1*m_a*m_x*m_x+m_b*m_x+10*m_c; MyDC.MoveTo(wl,hl); MyDC.LineTo(w+m_x,h1-h2); wl=w+m_x; hl=h1-h2; }и всё получается очень даже хорошо)))
Чтобы написать ответ, вы должны авторизироваться.