Как упростить жизнь программисту при отрисовке графиков в прямоугольной система координат

в 6:35, , рубрики: Delphi, новичкам, Песочница, Программирование, метки: , ,

Хабрет, читателям!

Как упростить жизнь программисту при отрисовке графиков в прямоугольной система координатНе долго думая решил поделиться очень простым способом облегчить себе программерскую жизнь.
Иногда математические знания заложенные в школе запутывают начинающего программиста, что открыв исходник написанный несколько недель назад с трудом вспоминаешь что к чему.
Например, нам нужно нарисовать график какой нибудь функции на элементе Image1 с помощью Canvas. Для определения координат пикселя в современных языках программирования отсчет начинается из верхнего левого угла холста. А что, если нужно отрисовать точку на плоскости используя прямоугольную систему координат (далее ПСК). Система координат имеет горизонтальную ось абсцисс, вектор луча которой направлен слева направо и вертикальную ось ординат — снизу вверх. Это очень усложняет определение привычных для нас координат точек на графике, особенно при кодинге с большим количеством взаимозависимых переменных.
Дабы не запутаться в коде я решил написать функцию…

Т.к. увеличение значения ширины холста совпадает с вектором направленности оси X, пишем функцию только для оси Y.
Пусть высота холста 76 пикселей и максимальное значение оси 76 пунктов, тогда точка 0,0 в ПСК имеет координаты 0px, 75px. Получается координаты точки в ПСК X, Y = Xpx, Height-Ypx-1. Отнимаем единицу, потому что первый пиксель нулевой.

Ну и наконец функция на Delphi:

function f(Y: integer): integer;
begin
  Result := Form1.Image1.Height - Y - 1;
end;

Использование:
Допустим нам нужно нарисовать линию из точки с координатами ind1, ind2 в точку ind1, ind2+10. Исходник без функции будет выглядеть так:

Form1.Image1.Canvas.MoveTo(ind1, (Height-ind2-1));
Form1.Image1.Canvas.LineTo(ind1, (Height-ind2+9));

а с функцией:

Form1.Image1.Canvas.MoveTo(ind1, f(ind2));
Form1.Image1.Canvas.LineTo(ind1, f(ind2+10));

Я понимаю что в таком коде разобраться рас плюнуть, но вы же все знаете что переменных может быть больше и конструкции сложнее, тут и поможет эта функция не запутаться.

Автор: F1oyd

Источник

Поделиться

* - обязательные к заполнению поля