Отправляет email-рассылки с помощью сервиса Sendsay

Все о Паскале

  Все выпуски  

Шляпа


Информационный Канал Subscribe.Ru


Лучшие статьи о паскале!
Подисчиков:  807
Выпуск номер: 10
Сегодня в выпуске:
1. )Шляпа

1. )Шляпа


Прежде чем пояснить, при чём тут шляпа, определимся - кому это интересно. А интересно это многим счастливчикам, познавшим кайф нажимания клавиш на ПК, полётов на 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. И всё-таки невозможно удержаться: нарисуйте шляпу в полярных координатах - не пожалеете. А если центр этих координат не совпадает с центром шляпы . . .
Всё - ухожу, ухожу.


Все о 
паскале, множество доков, исходники, 15(!) компиляторов и многое другое

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное