glBegin(GL_POINTS):

forCGLdouble х = 0: х < 4.0 : х += 0.005) glVertex2d(x. f(x)):

glEnd(): glFlushO:

Имеется, однако, одна проблема. Получившийся график будет недопустимо маленьким, так как значения л: от 0 до 4 преобразуются в четыре первых пиксела в левом нижнем углу экрана. Более того, отрицательные значения f(.) будут размещаться ниже окна и будут невидимы. Поэтому нам необходимо масштабировать и позиционировать величины, подлежащие рисованию, таким образом, чтобы они правильно располагались в экранном окне. Здесь мы делаем это волевым усилием, в сущности, выбирая несколько значений так, чтобы график адекватно вырисовывался на экране. Позже мы создадим общую процедуру, которая будет сама осуществлять эту подгонку; она называется процедурой преобразования координат из мировых (world coordinates) к оконным (window coordinates).

Масштабирование х. Допустим, мы хотим, чтобы диапазон от 0 до 4 был преобразован так, чтобы он размещался по всей ширине экранного окна, заданного в пикселах величиной screenWidth. В таком случае нам нужно всего лишь перемасштабировать все значения х в screenWidth/4 раза, используя:

sx - х * screenWidth /4.0: Величина sx равна 0 при х = 0 и screenWidth при х = 4.0, к чему мы и стремились.

Масштабирование и смещение у. Значения функции f{x) лежат между -1,0 и 1,0, следовательно, мы должны их тоже перемасштабировать и сдвинуть. Пусть мы задали экранное окно высотой в screenHeight пикселов. Тогда, чтобы поместить график в центре окна, умножим все значения у на screenHeight/2 и сместим их вверх на screenHeight/2:

sy - (у + 1.0) * screenHeight / 2.0; Как нам и нужно, это преобразование выдает 0 при у = -1,0 и screenHeight при у = 1,0. Отметим, что преобразования от х к sx и от у к sy имеют следующий вид:

sx = Ах + В;

sy = Cy + D (2.1)

для должным образом выбранных значений констант А, В, ChD.Ah С выполняют масштабирование, а В и D - смещение. Операции масштабирования и смещения являются, в сущности, вариантом «аффинного преобразования» («affine transformation*). Мы будем подробно изучать аффинные преобразования в главе 5; они предоставляют более состоятельный метод отображения любого заданного диапазона величин .г и у в экранное окно.


⇐ Предыдущая| |Следующая ⇒