![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |