Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Исходники Форум Информер Страны мира
   Статьи о Паскале    >>    Прогулки со шляпой
   
 
 Прогулки со шляпой    Евгений Скляревский 30.01.2001


Простейшая программа для изображения трехмерной поверхности, внешне напоминающей шляпу... BGI graphics.


26k 
 
Домашний Компьютер

Прогулки со шляпой

Евгений Скляревский
30.01.2001

Прежде чем пояснить, при чём тут шляпа, определимся - кому это интересно. А интересно это многим счастливчикам, познавшим кайф нажимания клавиш на ПК, полётов на Turbo Pascal’е в мир узоров, поверхностей и всякой волшебной математической чепухи. Тут уж точно мир раскололся на две половины и вторая, большая, глядя на экран, спрашивает: “Ну и что? Какая от этого польза?”

- “Ну и ничего, пользы действительно никакой ...” Но и прекратить невозможно, всё время толкает: “А что если удвоить, зациклить, округлить, отразить ...”.

Так вот, всё вышесказанное имеет весьма приблизительное отношение к основной теме (и к другим тоже ) Давным-давно попалась мне на глаза красивая функция:

		       Sin(X2+Y2)
		Z = ----------------
		         X2+Y2

Полюбуемся ею вместе:

  • трёхмерная поверхность
  • синус должен дать “волны”
  • должна быть некоторая “горбушка”
  • убывает при удалении от начала координат каким-то образом
  • симметрия относительно осей

Так и просится пощупать её на экране. А вот и вариант исполнения задумки:

PROGRAM SHLAPA;
USES GRAPH,DOS,CRT;
VAR
  GraphDriver, GraphMode, ErrorCode,X,X1,Y,Y1 : INTEGER;
  Q,W: REAL;
  U,Z:REAL;
  C: CHAR;
BEGIN
  GraphDriver:= Detect;
  InitGraph(GraphDriver,GraphMode,'');
  X1:=0 ; Y1:=0 ; Q:=-15;
  REPEAT
    W:=-10;
    REPEAT
      U:=0.29*Q*Q+0.29*W*W; {1}
      Z:=(5*SIN(U))/ U+5.3; {2}
      X:=TRUNC(300+27*(Q-W*COS(PI/4))); {3}
      Y:=TRUNC(350+27*(W*SIN(PI/4)-Z)); {4}
      IF W > -10 THEN LINE(X,Y,X1,Y1); {5}
      X1:=X ; Y1:=Y;
      W:=W+0.05 ;
      SETCOLOR(TRUNC(Z*7+7)); {6}
    UNTIL W>13 ;
    Q:=Q+0.05 ;
  UNTIL Q>18;
  C:=READKEY;
END.

Так вот: это и есть та самая шляпа с полями, вынесенная в заголовок.

Вы просили шляпу?

Причём на экран она выходит в аксонометрии, а угол наклона локальных осей шляпы относительно экранных можно попробовать поменять в строках {3} и {4} . Самые отчаянные могут попробовать разные значения углов для проекций на X и на Y, но от такой наглости трудно ожидать прогнозируемый результат. Гораздо интереснее поиграть коэффициентами:

     A * Sin( U )
Z = --------------      где U = C * X2 + D * Y2 + E * X * Y
        U + B

A - делает шляпу острее или положе

B - ещё и сдвигает её вдоль оси Z

C и D - сжимают шляпу вдоль осей X, Y

E - сжимает шляпу вдоль оси, проходящей под углом 45 градусов к осям XY

Для тех у кого две макушки, интересна замена: U = ( X - F ) * (X + F ) + Y2 . В результате шляпа раздваивается, разъезжается по оси X на величину 2*F. Аналогично можно раздвинуть шляпу и по Y:

U = ( X - F ) * ( X + F ) + ( Y - G ) * ( Y + G ), получив четырёх холмистую шляпу для рогатых мутантов.

Можно ещё поменять знак: U = X2 - Y2, превратив шляпу в нечто гиперболическое, на шляпу не похожее, в обиходе не встречающееся.

Шляпа рисуется ломаными линиями, с параметрами Q и W (локальными осями X и Y шляпы). Плавность линий зависит от величины приращений W, а частота линий от величины приращений Q. Чем меньше эти величины приращений, тем ярче шляпа, но дольше рисуется. Так что на Pentium’e можно получить шляпу поярче, а на 286-м - пореже.

А вы оценили раскраску шляпы? Цвет зависит от величины Z, меняя параметры можно получать пояски на тулье и на полях и даже волнистую шахматную доску.

Для самых занудных и въедливых читателей, ещё продолжающих читать этот бред, предлагаю попробовать поменять Sin(U) на Sin2(U), на Cos(U), на Sin(2*U) и вы будете вознаграждены открывшимися пейзажами - вокруг островка шляпы вдруг появляются лунные кратеры от гармоник высших порядков, объяснить которые с точки зрения тригонометрии и материализма невозможно.

А ещё можно попробовать поменять… но не буду лишать вас удовольствия самим поиграть и насладиться своим результатом. Шляпа хранит много приятных мгновений общения с ПК, достаньте их из неё.

P.S. И всё-таки невозможно удержаться: нарисуйте шляпу в полярных координатах - не пожалеете. А если центр этих координат не совпадает с центром шляпы . . .
Всё - ухожу, ухожу.


Домашний Компьютер