Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

13. Графика в Паскале

Предыдущий раздел:

Следующий раздел:

13.6. Мировые координаты

В задаче, решаемой программистом, может присутствовать своя собственная система координат. Например, если нужно построить график функции y=\sin(x) на отрезке [0,2\pi], то координаты на плоскости, где мыслится этот график, очевидно, не совпадают с экранными. Требуется преобразовать координаты точек на графике в координаты изображаемых точек на экране. Такая система координат, присущая решаемой задаче называется мировой.

Преобразование из мировых координат (x_m,y_m) в экранные (x_s,y_s) заключается в перемасштабировании (например, отрезок длиной 2\pi должен быть преобразован в отрезок длиной 600 пикселов) и сдвиге (например, точек с отрицательными координатами на экране нет и требуется сдвинуть перемасштабированный отрезок в положительную область). Это достигается путем линейного преобразования:

  x_s=ax_m+b\\  y_s=cy_m+d

Здесь коэффициенты a и c отвечают за перемасштабирование (растягивание по горизонтали и вертикали), а b и d за сдвиг вдоль этих направлений. Чтобы определить конкретные значения этих коэффициентов надо решить, какую область (какой прямоугольник) в мировых координатах в какой области экрана мы собираемся отобразить.

Пусть мировые координаты меняются в диапазоне

  x_{min}\le x_m\le x_{max}\\  y_{min}\le y_m\le y_{max}

Область на экране, где требуется поместить изображение, зададим, указав координаты верхней левой точки (Left, Top), а также ширину и высоту этой области (Width и Height). Нетрудно убедится, что в таком случае преобразование мировых координат в экранные будет выглядеть как

  x_s=Left+\frac{\displaystyle Width}{\displaystyle x_{max}-x_{min}}\cdot (x_m-x_{min}),\\  y_s=Top+Height-\frac{\displaystyle Height}{\displaystyle y_{max}-y_{min}}\cdot (y_m-y_{min}).

Данные преобразования дают в общем случае вещественный результат. Поскольку графические процедуры требуют целых значений аргумента, полученные по этим формулам координаты следует округлить.

Обратные преобразования, позволяющие по координатам точки на экране найти соответствующие мировые координаты, получите самостоятельно.

Следующий раздел:

Предыдущий раздел:

3 комментария

  1. Евгений

    Иметь дело с экранными и мировыми координатами не очень удобно. Привычная нам система координат (правая система координат — ось OY направлена вверх, ось OX — вправо) устанавливается с помощью Coordinate.SetMathematic. Но при этом TextOut выводит текст в перевёрнутом виде. Видимо, недоработка, поэтому не удалось найти примера с выводом текста в SetMathematic.
    Вопрос: это действительно так (TextOut работает некорректно в режиме SetMathematic) или это я не до конца разобрался?

  2. Сергей

    Что делать, если мировые находятся в диапазоне -1; +1, делить на ноль?

  3. Taras

    Зачем же, x_max — x_min = 2

Добавить комментарий