Хабрет, читателям!
Не долго думая решил поделиться очень простым способом облегчить себе программерскую жизнь.
Иногда математические знания заложенные в школе запутывают начинающего программиста, что открыв исходник написанный несколько недель назад с трудом вспоминаешь что к чему.
Например, нам нужно нарисовать график какой нибудь функции на элементе 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