Для начала тебе нужно реализовать парсер для вычисления твоей формулы, далее тебе необходимо построить декартову систему координат.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 | procedure LineToXY(x,y: single ;_color:TColor);
var Temp:TColor;
begin
Temp:=Form1 . imgGraph . Canvas . Pen . Color;
Form1 . imgGraph . Canvas . Pen . Color:=_color;
Form1 . imgGraph . Canvas . LineTo(Trunc(ImageCenter . X+(x*Zoom)),Trunc(ImageCenter . y-(y*Zoom)));
Form1 . imgGraph . Canvas . Pen . Color:=Temp;
end ;
procedure MoveToXY(x,y: single );
begin
Form1 . imgGraph . Canvas . MoveTo(Trunc(ImageCenter . X+(x*Zoom)),Trunc(ImageCenter . Y-(y*Zoom)));
end ;
|
это для построения вектора в двухмерном пространстве.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | if Form1 . cbDrawGrid . Checked Then
begin
For X:=- 10 to 10 Do
begin
MoveToXY(X,- 10 );
LineToXY(x, 10 ,clSilver);
end ;
For Y:=- 10 to 10 Do
begin
MoveToXY(- 10 ,Y);
LineToXY( 10 ,Y,clSilver);
end ;
end ;
MoveToXY(- 10 , 0 );
LineToXY( 10 , 0 ,clRed);
MoveToXY( 0 ,- 10 );
LineToXY( 0 , 10 ,clLime);
DrawPointer( 10 , 0 , True ,clRed);
DrawPointer( 0 , 10 , False ,clLime);
for X := - 10 to 10 do
Begin
MoveToXY(X,- 0.05 );
LineToXY(X, 0.05 ,clRed);
TextToXY(X,- 0.1 ,IntToStr(X));
End ;
for Y := - 10 to 10 do
Begin
If Y= 0 Then
Continue;
MoveToXY(- 0.05 ,Y);
LineToXY( 0.05 ,Y,clLime);
TextToXY( 0.1 ,Y,IntToStr(Y));
End ;
|
это отрисовка координатной сетки и отрисовки осей координат.
Вот в принципе и все, сам же парсер можеш найти на этом сайте в исходниках.