Что нам стоит мост построить…
(English version)

(Рисунок моста в галерее фирмы Mathsoft. Inc, - разработчик пакета Mathcad)

В. Очков http://twt.mpei.ac.ru/ochkov

В среде Mathcad 2000[1] появилось около тридцати новых функций (см. статью «Mathcad 2000: первые впечатления» на CD-ROM № 12’ 1999). Среди этих функций особо выделяется функция odesolve. Ее уникальность в том, что она возвращает не скаляр, вектор или матрицу, как все остальные «нормальные» встроенные функции Mathcad, а функцию одного аргумента, являющуюся решением (to solve – решать) обыкновенного дифференциального уравнения (odeordinary differential equation).

До 2000 версии в среде Mathcad эта задача решалась довольно неуклюже. Одиннадцать встроенных функций (Bulstoer, bulstoer, bvalfit, Rkadapt, rkadapt, rkfixed, sbval, Stiffb, stiffb, Stiffr и stiffr) возвращали не решение обыкновенного дифференциального уравнения (функцию, подстановка которой и ее производных в исходное дифференциальное уравнение, превращает его в тождество), а вектор значений искомой функции. Чтобы все-таки получить искомую функцию приходилось проводить, например, сплайн-интерполяцию. Функция odesolve –это «шампунь и кондиционер в одном флаконе»: она объединяет процесс численного решения обыкновенного дифференциального уравнения (генерация вектора) и интерполяции полученных точек (формирование функции).

Функция odesolve вернула процессу решения задачи, если так можно выразиться, ее красоту и естественность.

В среде Mathcad 2000 обыкновенное дифференциальное уравнение внешне решается также как и алгебраическое уравнение – условия задачи «зажимаются» между ключевым словом Given (дано) и встроенной функцией odesolve (или Find – найти, если говорить об алгебраическом уравнении). В условия задачи входит само дифференциальное уравнение и ограничения, сводящие задачу либо к задаче Коши, либо к краевой задаче.

Проиллюстрируем «красоту» функции odesolve красивой графической интерпретацией ее решения, рассмотрев «заглавную» задачу: через реку необходимо перекинуть висячий мост, цепи которого закреплены на краях и в промежутке на двух пилонах. Искомая функция, описывающая провисание цепи (цепная функция) имеет одну особенность – ее вторая производная равна (точнее - пропорциональна) самой функции[2]. Решение в среде Mathcad 2000 Pro этой краевой задачи по обыкновенному дифференциальному уравнению второго порядка показано на рис. 1.

Рисунок 1

В результате мы сформировали кусочно-непрерывную функцию Z(x), по которой можно построить плоский декартов график – вид висячего моста в профиль[3], если так можно выразиться.

Но мост это сугубо объемная конструкция и отображать ее нужно объемной (трехмерной) графикой. В среде Mathcad есть трехмерный аналог декартового графика Scatter Plot – «график россыпи, рассеяния» (to scatter, по-английски рассыпать, расшвыривать, разбрасывать). Если декартов график «работает» с двумя векторами, «рассеивая» их значения[4] на плоскости, то Scatter Plot требует наличие уже трех векторов (у нас это будут Х, Y и Z), рассеивая точки с данными координатами в объеме [5].

Эти точки можно соединить линиями, ведя их, руководствуясь номером точки (от нулевой точки к первой, от первой – ко второй и т.д. до последней) либо значениями элементов векторов Х, Y или Z. Кроме того, точки и линии может раскрасить так, чтобы оттенки цвета[6] менялись опять же в зависимости от номера точки либо от значений элементов векторов Х, Y или Z.

Рисунок 2

На рис. 2 наша мостовая цепь, оставаясь плоской (Yi := 0), приобрела объемность в смысле ориентации к зрителю.

Рисунок 3

И, наконец, на рис. 3 мы получили изображение висящего моста в «пол-оборота». Для этого:

·        векторы Х,Y или Z мы удлинили ровно вдвое: c одного берега реки тянется цепь (X), затем она поворачивает назад (reverse(X)[7]); ширина моста равна двум (Yi := 0, Y1i := 2)

·        звенья цепи, опирающиеся на пилоны, опускаются на землю (Z20 := 0, Z90 := 0);

·        трехмерный график форматируется особым образом: оси и сетки убираются, цепь раскрашивается по оси Z, проезжая часть это закрашенная плоскость X-Y, по оси Y проводятся три белые линии сетки (разметка проезжает части); у самой же конструкции повышена объемность за счет использования перспективы и тумана.

Сейчас компьютер широко используется как рабочий инструмент художника (интеллектуальная кисть или что-то в этом роде). Распечатки цветных принтеров оправляются в рамки и выставляются в, так сказать, реальных и виртуальных компьтерно-художественных салонах (см., например, журнал «КомпьюАрт»).

Но автору хотелось бы обратить внимание уважаемых читателей на другое – на проблему эстетического вида не просто компьютерных рисунков, а листингов программ и, в частности, на проблему соответствия (или противопоставления) формы листинга содержанию программы.

Программисты, которым не чуждо образное мышление, давно уже подметили, что процедуры и функции имеют свое собственное «лицо», по которому она безошибочно узнается на экране дисплея или на бумаге принтера. Одна процедура как ухоженная крестьянская лошадка круглая и гладкая – работает себе спокойно, перекачивая, например, данные из одного формата в другой. И внешне она неприметна –  взгляд на ней не останавливается. Другая процедура все время норовит выкинуть какой-нибудь фортель, настолько она неотлаженна (необъезженна). И своими очертаниями она походит на скакуна, в седле которого сидит герой многочисленных живописных полотен и скульптур. Третья процедура так и просится, чтобы ее оправили в раму и повесили на стену, настолько она хороша и закончена, а главное, ее форма полностью отвечает ее содержанию. Она передает не только мысли, но даже и настроение художника, пардон, программиста, ее создавшего.

Автор далеко не искусствовед и не смеет особо распространяться на эту тему.

В комментариях к публикуемым компьютерным рисункам, как правило, подчеркивается, что их авторы – компьютерные художники. В прилагательных к существительным очень часто таится некая ущербность или по, крайней мере, двусмысленность: не просто математика, а «Прикладная математика». Термин компьютерный художник содержит в себе некую двойственность. С одной стороны, прилагательным «компьютерный» как бы извиняются перед потенциальным зрителем за эстетику рисунков (см. наш «рисунок» моста). А с другой стороны – предупреждают о том, что при создании рисунков использовались специфические инструменты и методы (авангардистские изыски).

Настоящий художник готов работать на чём угодно и чем угодно. Рисунки Анатолия Зверева (художника с трагической судьбой, какая, увы, часто постигает гениев; недавно в Москве прошла его выставка), выполненные чуть ли не окурком на обрывке листа бумаги, продаются на аукционах за большие деньги. Давайте дождемся времен, когда распечатки принтеров будут выставляться в Лувре, в Эрмитаже или на худой конец продаваться на художественных аукционах. Последнее вряд ли случится. На аукционах могут продать дискету, принадлежавшую компьютерному художнику (фетиш – сейчас так продаются гитары великих музыкантов). Дело в том, что у computer art нет понятия оригинала и копии[8]. А это может убить даже настоящие шедевры, которые иногда публикуются на обложках и внутри глянцевых изданий. Пушкин говорил: «Пóшло то, что пошлó в народ». Только самые гениальные произведения искусства способны выдержать такое испытание хождением в народ. Они-то и формируют пласт культуры, на котором базируется современная цивилизация.

Лучший способ охарактеризовать какое-либо явление – тем более в статье с претензией на искусствоведение –  это привести классическую цитату. Вот она:

Они сначала нравилися мне

Глазами синими, да белизною,

Да скромностью – а пуще новизною;

Да, слава богу, скоро догадался –

Увидел я, что с ними грех и знаться –

В них жизни нет, все куклы восковые;

А наши!...

Угадайте, о чем говорил пушкинский Дон Гуан! Да-да – и о компьютерной анимации, о рисунках, созданных с помощью компьютерной графики... Скажем мягче (и с надеждой) – о современных образцах этого симбиоза науки, технологии и искусства. Ведь, в компьютерных рисунках больше чувствуется несовершенный инструмент (новизна – парадокс high technology), чем художник.



[1] В конце 1999 года была выпущена расширенная версия Mathcad 2000 Pro – Mathcad 2000 Premiun. На рисунке можно видеть, какие новые компоненты есть у этой версии Mathcad:

[2] Эту задачу можно решить и аналитически, вспомнив, что вторая производная гиперболического косинуса равна самому гиперболическому косинусу. Аналитическое решение задачи такое: y(x) := a*cosh(x / a). Правда, цепь моста после подвески к ней полотна моста будет иметь форму не цепной функции, а параболы, но...

[3] Или в «фас» – поди разберись, где у моста профиль, а где фас.

[4] Эти векторы не всегда явно присутствуют. На рис.1 у нас есть аргумент х и функция Z(x), но среда Mathcad, строя декартов график, создает два вектора – координаты точек на графике, которые сливаются в линию.

[5] В псевдообъеме, естественно – экран дисплея по-прежнему остается плоским. В среде Mathcad есть инструменты повышения иллюзии объемности изображения, и мы ими воспользуемся.

[6] В среде есть разные системы окраски: rainbow (радуга), topographic – топографический и т.д.

[7] Если вектор X1  не перевернуть «вверх тормашками» (X1 := reverse(X)), то две цепи моста будут соединены линией, пересекающей проезжую часть по диагонали. А так у нас эта линия пересекает мост на въезде, изображая ленточку, которую перережут при открывании моста.

[8] Горе от ума, точнее, от высоких технологий – от цифрового, а не аналогового способа отображения реальности.