procedure TForm1.Button3Click(Sender: TObject);
var
x, y: array[1..50] of double;
i: integer;
scalex, scaley, ymin, ymax, xmin, xmax: double;
beginfor i := 1 to 50 dobegin
y[i] := sin(i * 0.5);
x[i] := i;
end;
xmin := x[1];
xmax := x[1];
ymin := y[1];
ymax := y[1];
for i := 2 to 50 dobegin// или используйте ymin:=MinValue(y); и т.д.if y[i] < ymin then
ymin := y[i];
if y[i] > ymax then
ymax := y[i];
if x[i] < xmin then
xmin := x[i];
if x[i] > xmax then
xmax := x[i];
end;
scalex := paintbox1.Width / (xmax - xmin);
scaley := paintbox1.Height / (ymax - ymin);
with paintbox1.canvas dobegin
moveto(trunc(scalex * (x[1] - xmin)), paintbox1.height - trunc(scaley * (y[1]
- ymin)));
for i := 2 to 50 do
Lineto(trunc(scalex * (x[i] - xmin)), paintbox1.height - trunc(scaley *
(y[i] - ymin)));
end;
end;
Перевод текста на русский язык:
Это код программирования Delphi, который создает простой график функции синуса с помощью компонента paintbox. Вот разбивка того, что код делает:
Он определяет два массива, x и y, для хранения координат x и соответствующих координат y точек на графике.
Код рассчитывает значения sin(i * 0,5) для каждого i от 1 до 50 и хранит их в массиве y. Он также рассчитывает соответствующие координаты x как просто i.
Он инициализирует четыре переменные, xmin, xmax, ymin и ymax, для хранения минимальных и максимальных значений координат x и y.
Код затем проходит через массивы снова, чтобы найти минимальные и максимальные значения координат x и y, обновляя соответствующие переменные в случае необходимости.
Он рассчитывает масштабы для осей x и y, делая ширину и высоту компонента paintbox на диапазоне координат x и y соответственно.
Код затем использует свойство Canvas компонента paintbox для рисования линейного графика. Он начинает от точки, соответствующей первому элементу в массивах (x[1] и y[1]) с помощью метода Moveto, а затем проходит через массивы снова, чтобы нарисовать линии, соединяющие каждую пару последовательных точек.
Некоторые предложения по улучшению:
Вместо использования жестко закодированных размеров массивов (50), рассмотрите более динамический подход для определения количества точек, необходимых в зависимости от диапазона значений координат x и y.
Рассмотрите использование более эффективных алгоритмов для расчета масштабов и рисования графика, таких как использование компонента TChart или библиотеки GraphLib.
Код может выиграть от добавления ошибок обработки, например, проверки на null перед попыткой нарисовать на нем.
Рассмотрите добавление дополнительных функций к графику, таких как метки для осей, сеточные линии и возможные интерактивные элементы.
Альтернативное решение с более современным подходом с Delphi XE8 или позднее:
В этом примере мы используем тип TArray для создания динамических массивов координат x и y. Затем мы настроим компонент TLineSeries на контролле TChart и заполним его данными с помощью свойств XValues и YValues. Этот подход более компактен и легче поддерживать, чем оригинальный код.
В статье описывается алгоритм создания графика функции с использованием языка программирования Delphi и компонента PaintBox.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.