Кто делал: Очевидно Илюшечкин (Чуденков получил по башке за это, поэтому спасибо Барышникову)
Препод: Илюшечкин
Листинг:
// ====== Функция F(X)=========
double F(double x)
{
return(Math::Pow(x,3)+ 2*Math::Pow(x,2)- 0.2);
//(Math::Sin(x));
}
//=============================
public ref class DrawFunction : public System::Windows::Forms::Form
{ . . .
private: System::Void DrawFunction_Click(System::Object^ sender, System::EventArgs^ e) {
Color color;
Graphics^ g = this->CreateGraphics();
Pen^ drawPen = gcnew Pen(color.Black);
g->Clear(this->BackColor);
int k,i,l,j,c,
XL,YL,X,Y,DX;
float x1,x2,Fmin,Fmax,
a,b,
x, dx;
k = 0;
i = 0;
l = ClientSize.Width;
j = ClientSize.Height;
x1 = -2.5;//-(float)Math::PI;
x2 = 1; // (float)Math::PI;
Fmin= F(x1);
Fmax= F(x2);
a = (i - j)/(Fmax - Fmin);
b = j - Fmin*(i - j)/(Fmax - Fmin);
g->DrawLine(drawPen,k,(int)b,l,(int)b); // ось ох
c = (int)Math::Round(k-x1*(l-k)/(x2-x1));
g->DrawLine(drawPen,c,i,c,j); // ось oy
XL = k; // Абсцисса совпадает с абсциссой левой границы области графика
YL = (int)Math::Round(a*F(x1) + b); // Ордината вычисляется по формуле (2)
DX = 10;
dx = DX*(x2-x1)/(l-k);//Приращение аргумента, соответствующее DX пикселям
x = x1;
for(X=(k+DX);X<=l;X+=DX) { x = x + dx; Y = (int)Math::Round(a*F(x) + b); g->DrawLine(drawPen,XL,YL,X,Y);
XL = X; YL = Y;
}
SolidBrush^ drawBrush = gcnew SolidBrush(color.Blue); // Кисть синего цвета
System::Drawing::Font^ drawFont = gcnew System::Drawing::Font("Arial", 8.0F, FontStyle::Bold);
PointF pntF = PointF((float)c, b);
g->DrawString("0", drawFont, drawBrush, pntF);
}
};
Комментариев нет:
Отправить комментарий