|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
квадратное уравнение и его график
помогите подправить код, нашел то что нужно, но не совсем. на TImage рисуется график квадратного уравнения A*x^2 + B*x + C только с целыми числами, при подстановке десятичных чисел в A,B,C ошибка несовместимости типов переменных. И можно как нибудь нарисовать деления осей? т.е. разметить их
Код:
Procedure TForm1.Button1Click(Sender: TObject); var i : Integer; // Переменая счётчика y, x : Real; // Координаты x и y xc, yc : Integer; // Координаты центра О A, B, C, D : Real; // Коэффициенты квадратного трёхчлена begin // Укажем некоторые значения xc := Round(Img.Width * 0.5); yc := Round(Img.Height * 0.5); x := - Img.Width; A := strTOint(edit1.Text); B := strTOint(edit2.Text); C := strTOint(edit3.Text); With Img.Canvas Do Begin // Отрисовка координатных осей. FillRect(ClientRect); MoveTo(10, yc); LineTo(Round(Img.Width - 10), yc); MoveTo(xc, 10); LineTo(xc, Round(Img.Height - 10)); // Построение графика. For i := 1 To 500000 Do Begin x := x + 0.01; y := A * x * x + B * x + C; If (y < 200) And (y > -200 ) Then Img.Canvas.Pixels[Round(x * 10) + xc, yc - Round(y)] := ClBlue; End; End; end; |
#2
|
|||
|
|||
Код:
A := strTOint(edit1.Text); B := strTOint(edit2.Text); C := strTOint(edit3.Text); не смущает? StrToFloat нужно. Дальше даже не смотрел. |
#3
|
||||
|
||||
Примерно так:
Код:
procedure TForm1.Button1Click(Sender: TObject); var I, // Переменая счётчика xc, yc : Integer; // Координаты центра О y, x, // Координаты x и y A, B, C : Real; // Коэффициенты квадратного трёхчлена begin // Укажем некоторые значения xc := Img.Width div 2; yc := Img.Height div 2; x := - Img.Width; A := StrToFloat(edit1.Text); B := StrToFloat(edit2.Text); C := StrToFloat(edit3.Text); with Img.Canvas do begin // Отрисовка координатных осей. FillRect(ClientRect); MoveTo(10, yc); LineTo(Img.Width - 10, yc); MoveTo(xc, 10); LineTo(xc, Img.Height - 10); Pen.Color := clRed; I := 10; repeat if I <> xc then begin MoveTo(I, yc + 3); LineTo(I, yc - 3); end; inc(I, 10); until I > Img.Width - 10; I := 10; repeat if I <> yc then begin MoveTo(xc + 3, I); LineTo(xc - 3, I); end; inc(I, 10); until I > Img.Height - 10; // Построение графика. for I := 1 to 500000 do begin x := x + 0.01; y := A * sqr(x) + B * x + C; if (y < 200) and (y > -200 ) then Pixels[Round(x * 10) + xc, yc - Round(y)] := ClBlue; end; end; end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |