Глава 9
Мультимедиа: геометрия, графика, кино, звук
Вэтой главе...
♦Введение, или основные графические примитивы
♦Аналитическая геометрия на плоскости, или 20-графика
♦Аналитическая геометрия в пространстве, или ЗЭ-графика
♦Другие миры — другие измерения
♦Резюме
♦Задачи
Лучше один раз увидеть, чем сто раз услышать.
Народная поговорка
Графический способ представления функции — самый наглядный.
Энциклопедический словарь юного математика
На многих электронных вычислительных машинах, кроме печа тающего устройства, выдающего результаты расчетов в виде ко лонки цифр, есть и графопостроитель, представляющий те же ре зультаты в форме графиков.
Энциклопедический словарь юного математика
Компьютерная графика в своем историческом развитии повторяет путь аналитиче ской геометрии. Когда-то давно7, когда возникла аналитическая геометрия, т.е. во времена Пьера Ферма и Ренэ Декарта, она мыслилась в основном как аналитическая геометрия на плоскости (а зачастую даже как аналитическая геометрия в первом квад ранте). Это был способ изучения плоских образов (кривых) с помощью метода коор динат на плоскости. Распространение методов аналитической геометрии на простран ственные образы (линии и поверхности) было сделано столетием позже французским математиком Клеро (1713—1765). Облик, близкий традиционному, придал аналитиче ской геометрии Леонард Эйлер в 1748 году, посвятив ей второй том “Введения в ана лиз” Однако еще более столетия курс аналитической геометрии делился на два раздела:
1 Пьер Ферма написал свою статью “Введение в изучение плоских и телесных мест” в 1636 году, а книга “Геометрия” Декарта была издана в 1637 году.
аналитическая геометрия на плоскости и аналитическая геометрия в пространстве. Лишь в 60-е годы XX века в мехматовских учебниках мало-помалу исчезло это де ление, сохранившееся в учебных планах педагогических институтов кое-где и по сей день. Впрочем, более чем за три десятилетия до конца XX века были сделаны (в основном, Анатолием Ивановичем Мальцевым и Алексеем Васильевичем Погореловым) первые попытки преподавания многомерной аналитической геометрии, логи ческим завершением которых стали многочисленные (в 80-х годах XX века) объеди ненные курсы аналитической геометрии и линейной алгебры.
Нечто подобное наблюдается и в компьютерной графике. Поначалу графические редакторы (притом с весьма ограниченными возможностями) были предназначены для вычерчивания весьма ограниченного набора графических примитивов (в основ ном, точек и отрезков) на плоскости. Несколько позже набор графических примити вов был значительно расширен. Затем появились графические операции для изобра жения трехмерных образов, потом было добавлено еще одно измерение — время. Так в графические редакторы вошло движение и появилось компьютерное немое кино, которое почти сразу же обрело звук и тем самым превратилось в полноценное муль тимедиа. Говорят, что пространство запахов оказалось 33-мерным, и вскоре в киноте атрах и в компьютерах появятся устройства для воспроизведения запахов. С другой стороны, многие средства, впервые появившиеся в графических редакторах, впослед ствии были встроены и в программы, первоначально вовсе не предназначавшиеся для художников. В систему Mathematica, например, встроенывсе средства мультимедиа, кроме отображения 33-мерного пространства запахов. Вы можете, например, увидеть и послушать синус, тангенс, ^-функцию Римана... (Трудно передать словами чувства, возникающие при прослушивании некоторых функций. Скажу лишь, что сбегались все домашние, чтобы посмотреть, что за зверь в компьютере издает такие звуки...) Но пока что средства воссоздания пространственных трехмерных образов лишь проек тируются, и потому экраны всех компьютерных мониторов двухмерные (обычно пло ские). И по этой причине наиболее простыми графическими примитивами являются те, которые предназначены для отображения плоских образов. Потому знакомство с графическими возможностями современных программ следует давней традиции, воз никшей в курсах аналитической геометрии: сначала изучается аналитическая геомет рия на плоскости... Ох, простите, я хотел сказать средства 20-графики, т.е. средства изображения плоских образов (точек, кривых и других плоских фигур) с помощью ме тода координат на плоскости. И опять, по той же традиции основательному курсу аналитической геометрии на плоскости предшествует небольшое введение в основы метода.
Введение, или основные графические примитивы
График — это некоторый объект, с которым можно выполнять определенные опе рации, главнейшей из которых является отображение. Фактически двух- и трехмерные ■ рисунки состоят из графических, примитивов, таких как точки, линии, многоугольни- | ки, круги, диски, параллелепипеды и даже текст. Некоторые из этих примитивов яв ляются составными, они сами состоят из других объектов. Например, линия есть на самом деле ломаная линия, состоящая из отрезков прямых, соединяющих последова тельные угловые точки этой линии. Точка двухмерного рисунка как графический примитив есть выражение вида Point [ {х, у) ], где х и у суть декартовы координаты точки на плоскости.
Графические примитивы и их отображение на экране
Графический примитив и его изображение — разные вещи. Как же отобразить графический примитив на экране? Разберемся в этом на примере следующих двух графических примитивов: точки р = Point[{1,1}] и линии 1 = Line[{{0,0},
Ц/2,2}, {3/2,2}, {2,0}}].
Превратить их в рисунок на экране дисплея можно следующим способом. Сначала к ним нужно применить функцию Graphics, которая превратит их в один из шести гра фических объектов (Graphics, DensityGraphics, ContourGraphics, Graphics3D, SurfaceGraphics или GraphicsArray). Полученный результат уже можно отобра зить на экране с помощью функции show.
р = Point[{1,1}] |
{1/2,2}, {3/2,2}, {2,0}}]; |
1 = Line[{{0,0}, |
gr=Graphics[ {р, |
1}]; |
Show [gr] ; |
|
Конечно, я показал все промежуточные шаги. На самом деле все можно было еде лать за один шаг.
Show[gr=Graphics [ {р = |
P o in t [ { 1 , 1 } ] |
, |
1 = |
L i n e [ { { 0 , 0 } , |
{ 1 / 2 , 2 } , { 3 / 2 , 2 } , { 2 , 0 } } ] } ] ] ; |
Присваивания, конечно, тоже не обязательны, но я хотел показать, что с результа тами функций, используемых для задания графических примитивов, можно обращать ся так же, как и с любыми другими.
Мультимедиа: геометрия, графика, кино, звук |
243 |
Точка — графический примитив Point
Поворотным пунктом в изобразительном искусстве была Декартова переменная величина. Благодаря ей в изобрази тельное искусство вошли движение и тем самым эклектика,
иблагодаря этому в изобразительном искусстве революция,
онеобходимости которой так долго не говорили только те, кто ее не хотел, свершилась. Теперь рисовать может каждая кухарка.
Основополож ник искусства
ра с ст а н о вк и т оч ек на экране
Для представления точки служит графический |
примитив Point [coords] , |
где |
coords — координаты точки. Они могут быть представлены либо в виде {х, |
у) |
или] |
Scaled[ {х, у}] в случае плоскости, либо в виде {х, |
y r z } или Scaled[ {х, |
у, |
*)]' |
в случае пространства. На экране точки, конечно, изображаются в виде кружков, ра диус которых задается графическим примитивом PointSize. Для раскраски точек ис пользуются параметры CMYKColor, GrayLevel, Hue И RGBColor.
Ломаная линия — графический примитив Line
Ломаная линия, соединяющая точки ptx, pt2, /?г3, ..., представляется графическим примитивом Line[{ ptx, pt2 , pty, ...}]. Здесь ptt — координаты точки. Представ
ленные ниже два выдающихся произведения изобразительного искусства созданы ис ключительно из двух серий однозвенных ломаных (отрезков прямых). Они оба назы вается скромно — муар.
Show [
Graphics[Table[Line[{{0,0},{i,l}}],{i,-25,25}]],
Graphics[Table[Line[{{0,1},{i,0}}],{i,-25,25}]],
AspectRatio->l];
Block[{k=130/7 6,kl=3/2,n=23, a=n,b=a*(k+kl)},Show[
Graphics[Table[Line[{{0,-b},{i,b}}],{i,-n,n}]],
Graphics[Table[Line[{{.0,b},{i,-b}}],{i,-n,n}]],
PlotRange->{{-a,a},{-k*a,k*a}}, AspectRatio->l]];
Муар — это, можно сказать, важный технический прием. Подбирая параметры, с его помощью можно создать достаточно замысловатый образ.
Module [{г1=20, г2=30,п=600 },
Show [ Graphics[Table[Line[{{rl*Cos[7Pi*i/n],rl*Sin[9Pi*i/n]},
{r2*Cos[llPi*i/n],r2*Sin[5Pi*i/n]}}], {i,0,n}]]fAspectRatio->l/PlotRange->All]];
Мультимедиа: геометрия, графика, кино, звук |
245 |
Графические директивы
Кроме графических примитивов, имеются графические директивы, определяющие опции представления примитивов на экране, такие как размер, цвет и стиль. Если они не указаны явно, то устанавливаются по умолчанию.
Относительная и абсолютная величина диаметра круга, изображающего точку, — директивы PointSize[d] и AbsolutePointSize[d]
Директивы PointSize [d] и AbsolutePointSize [d] определяют относительную и абсолютную величину диаметра круга, изображающего точку. В директиве PointSize [d] аргумент d есть отношение диаметра к ширине графика, и потому он обычно задается как дробь. По умолчанию d = 0.008 для двухмерных графиков и </ = 0.001 для изображений трехмерных объектов. Вот график, в котором этот пара метр задан по умолчанию.
ListPlot [Table [{x,DivisorSigma [0,x] }, {x, 15 }]];
6 ;
5 ;
4 ■
3 ;
2 ;
1 -
А вот тот же график с иным значением этого параметра.
ListPlot[Table[{х,DivisorSigma[0,х]},{х,15}1,
P l o t s t y l e - > P o i n t S i z e [ 0 . 0 4 ] ] ;
Точки теперь такие жирные, что одна даже не влезла в область, отведенную для графика!
В директиве AbsolutePointSize [d] значение параметра d определяет диаметр круга в единицах длины, приблизительно равных одной семьдесят второй дюйма. Вот как может выглядеть парабола.
Show[
Graphics[
{Table[{AbsolutePointSize[d] ,
* » * » * [ { £ . т г } ] } . M . 2 0 ) ] ) ] ] ;
Как видите, директива ставится перед примитивом, и оба эти объекта заключаются в фигурные скобки. Кроме того, директива' может действовать на несколько однород ных примитивов, стоящих за ней. Вся группа также заключается в фигурные скобки. Графических директив может быть несколько, и они должны предшествовать тем примитивам, на отображение которых они должны влиять. Вычисление выражения
Show [Graphics [{PointSize [0.03] ,Hue [0],Table [Point [{0.1j,0.05j}],
I j i l O } ] > ] ] ;
приводит к появлению на экране десяти точек красного цвета относительного диа метра 0.03.
Относительная и абсолютная толщина линии — директивы Thickness и AbsoluteThickness
Как и в случае точек, управлять можно не только цветом, но и толщиной линии. Директива Thickness [г] определяет относительную ширину линии, а директива AbsoluteThickness [г] — абсолютную ширину. Вот пример указания относительной ширины линии.
Мультимедиа: геометрия, графика, кино, звук |
247 |
Show [Graphics [ (Table [ (Thickness [. 01. D ivisorS igm a[0, j] ], C ir c le [ { 0, 0} , 2j ] }, {j , 10} ] }, AspectRatio->Automatic] ]
Ниже приведен пример указания абсолютной ширины линии.
Show[Graphics[(Table[( A b s o lu t e T h ic k n e s s [ d A3 / 2 5 ] ,
Line[{{0,0}, {1,d^3}}] }, (d, 5}],Line [{{0,25}, {1,0} }]}]];
Пунктиры, штрихпунктиры и другие стили линии — директива Dashing
Директива Dashing [(г/, г2, ...} ] позволяет указать, что линия рисуется в виде последовательности отрезков длиной г/, г2 и т.д., которые повторяются циклически. Вот как можно нарисовать окружность.
Show[ G ra p h ic s[ { D a s h in g [ T a b le [ 0 . 0 0 0 4 i A2 , { 1 , 1 0 } ] ] ,
C i r c l e [ { 0 , 0 } , 1 ] } , A s p e c t R a t io - > A u t o m a t ic ] ];
|
|
|
N |
/ |
|
|
\ |
/ |
|
|
/ |
|
|
\ |
|
|
|
I |
|
|
\ |
|
|
» |
|
|
|
I |
\ |
|
|
I |
|
|
|
\ |
|
|
/ |
\ |
|
|
/ |
|
|
|
\ |
|
|
/ |
|
\ |
|
/ |
|
|
f |
|
|
\ |
|
|
|
А вот параллельные прямые, нарисованные черточками разной длины.
Show[Graphics [Table [{Dashing [Table [0.004iA ( j / 5 ) , {i Д0}] ] , Line[{{0/j/10},{1,j/10}}]},{j/10}],AspectRatio->Automatic]];
Мультимедиа: геометрия, графика, кино, звук |
249 |
Аналитическая геометрия на плоскости, или 20-графика
Более чем за 100 лет до н.э. греческий ученый Гиппарх предложил опоясать на карте земной шар параллелями и меридианами и вве сти хорошо теперь известные географические координаты: широту
идолготу — и обозначить их числами.
ВXIV в. французский математик Н. Оресм ввел, по аналогии с географическими, координаты на плоскости. Он предложил пок рыть плоскость прямоугольной сеткой и называть широтой и дол готой то, что мы теперь называем абсциссой и ординатой.
Это нововведение оказалось чрезвычайно продуктивным...
Э н циклопеди чески й словарь ю н ого м ат ем ат ика
Графические примитивы
Графические примитивы в графике играют ту же роль, что и основные фигуры в геометрии. Именно из них составляются все остальные фигуры.
Многоугольник — примитив Polygon
Графический примитив Polygon [{ {xl, yl), {х2, у2), ...}] представляет собой закрашенный многоугольник, ограниченный замкнутой ломаной линий, проходящей
через точки {xl, у]}, {х2, у2), |
Вот как рисуется равносторонний треугольник |
салатного цвета. |
|
Show[Graphics[{Hue[0.25],Polygon[{{0,0},{1,1},{2,0}}]}]];
Прямоугольник — примитив Rectangle
Частный случай многоугольника — прямоугольник — можно получить с помощью примитива Rectangle [ {xmin, ymin), {xmaxr утах) ], в котором {xmin, y m in ) - координаты левого нижнего угла прямоугольника, а {хтах, утах} - координаты правого верхнего угла прямоугольника. Показанная ниже фигура состоит из пяти прямоугольников. Все они имеют разный цвет.
Show [G raphics[Table[ {Hue[ . 2 i ] ,
Rectangle[{-EA (-i),EA (iA2/10)},{EA (-i),EA (-i)/5}]},{i,5}] ]];