?

Log in

No account? Create an account

Старинные картинки - Общество дровосеков Бердичева по изучению Мишны

Nov. 15th, 2016

11:38 am - Старинные картинки

Previous Entry Share Next Entry

Внезапно, в файле-образе диска, который у меня был на протяжении лет 20, нашлась программа на Паскале, датированная 23.05.85 в комментарии, рисующая на графическом дисплее разные картинки (хозяйке на заметку: дампы надо смотреть в виде потока символов во всех теоретически возможных кодировках, а не только в паре самых распространенных).
Ничего похожего на дисплей "Электроника МС 7401" винницкого производства у меня нет, поэтому птичий язык я выкинул, а команды Постскрипта вставил. Некоторые из выдаваемых картинок таким образом удалось воскресить.

Естественно, уже в то время не обошлось без котов.

Длина процедуры - 42 строки.

Также имеются случайным образом генерируемые "цветочки", символически называемые розами; видимо, за розоцветную пятилепестность.


Длина процедуры - 27 строк.

Есть и абстрактный узор (увы, только один).

Длина процедуры - 44 строки.

Название процедуры, генерирующей следующую картинку, (из 4 букв) предлагаю угадать. Не стесняйтесь, угадывайте, слово приличное, из 4 букв как по-русски, так и по-английски.

Длина процедуры - 39 строк.

Приведу в качестве примера самую короткую из процедур, выдранную из исходного текста, с правками для выдачи Постскрипта:

В этом диалекте Паскаля позволялось для краткости записывать begin как _( и end как _).

program rose(output); const tr=true; fl=false;
type int=integer;
procedure РОЗА;(*РОЗЕТКА*)label 12;
var I,(*!*)К,NТ:INТ;
А,В,С,D,DL,F,Н,J,L,М,N,SN,Р,Q,R,S,Т,У,SМ,Z1,Z2:RЕАL;
function ХХ(F:RЕАL):RЕАL;
_(ХХ:=(SIN(N*F)*Р+Н)*СОS(F)+СОS((J*N+А)*F)*М+СОS((Т*N+А)*F)*S+280_);
function УУ(F:RЕАL):RЕАL;
_(УУ:=(SIN(N*F)*Р+Н)*SIN(F)+SIN((J*N+А)*F)*М+SIN((Т*N+А)*F)*S+200_);
_(Q:=АRСSIN(1.0)*4.0;I:=0;
N:=RАNDОМ;
12:А:=1.0;N:=ТRUNС(7.0*RАNDОМ+4.0);
J:=ТRUNС(6.5*RАNDОМ+2.0)*2.0;
Т:=ТRUNС(8.5*RАNDОМ+2.0)*2.0;
SМ:=J+Т;if RАNDОМ>0.5 then J:=-J else Т:=-Т;
Р:=RАNDОМ*40.0;М:=RАNDОМ*32.0-16.0;S:=RАNDОМ*32.0-16.0;
if (АВS(М)+АВS(S))<10 then goto 12;
Н:=50.0-Р-АВS(М)-АВS(S);if Н<0 then _GОТО 12;
D:=Q/(40.0*N*SМ);С:=0.0;L:=0.0;I:=ТRUNС(SМ*40.0);
for К:=0 to I do _(У:=К;F:=У*D;
Z1:=ХХ(F)-280;Z2:=УУ(F)-200;R:=SQRТ(Z1*Z1+Z2*Z2);
if R>С then _(L:=F;С:=R_)_);
for К to 2 do _(В:=L;D:=D*0.1;for I:=-9 to 9 do _(
У:=I;F:=У*D+В;Z1:=ХХ(F)-280;Z2:=УУ(F)-200;R:=SQRТ(Z1*Z1+Z2*Z2);
if R>С then _(L:=F;С:=R_)_)_);
С:=170.0/С;Н:=Н*С;Р:=Р*С;М:=М*С;S:=S*С;
writeln(RОUND(ХХ(0.0)),RОUND(УУ(0.0)), ' moveto');NТ:=ТRUNС(N*250.0);
DL:=Q/NТ;for К:=0 to NТ do _(У:=DL*К;
writeln(RОUND(ХХ(У)),RОUND(УУ(У)), ' lineto');_);
_);(*ЕND РОЗА*)
_(РОЗА; writeln(' stroke showpage') _).

Как нетрудно видеть из кода функций ХХ и УУ и других мест кода, где встречаются константы 280 и 200, размер экрана был 560х400 пикселей.

Comments:

[User Picture]
From:yatur
Date:November 15th, 2016 07:58 pm (UTC)
(Link)
You can write Fortran in any language :)

Странный какой-то Паскаль. Это какой-то хитрый диалект? Что такое "_"? И где BEGIN/END?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:November 15th, 2016 08:01 pm (UTC)
(Link)
Можно попробовать поискать слова begin и end в тексте поста.
(Reply) (Parent) (Thread)
[User Picture]
From:yatur
Date:November 15th, 2016 08:17 pm (UTC)
(Link)
Вот вам бы все издеваться. To err is human. To forgive - divine.
А что за диалект, если не секрет? Я никогда такого не видел. И дядя Вирт, я думаю, был бы очень недоволен этими _( _). Птичесть (птичность?) действительно резко увеличивается.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:bangor_flying
Date:November 15th, 2016 08:04 pm (UTC)
(Link)
Отличные картины. Такое впечатление, что изначально программа была на Бейсике.

Вспомнил еще книгу по программированию графики на си 1985 года издания, в которой в первых главах для рисования вообще использовался такой мощный инструмент, как отладчик DEBUG.

Edited at 2016-11-15 08:08 pm (UTC)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:November 15th, 2016 08:11 pm (UTC)
(Link)
Или на Фортране. Или на Алголе. Если весь алгоритм - это знай себе в циклах что-то там вычисляй и давай команды рисовать, то разница будет невелика.
Впрочем, желающие могут попробовать переписать это на что-нибудь функциональное и посмотреть, получится ли сильно короче.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:ygam
Date:November 15th, 2016 09:11 pm (UTC)
(Link)
Интересно, на HTML5 такое можно засандалить?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:November 15th, 2016 09:36 pm (UTC)
(Link)
В Canvas рисовать, наверное. И без Canvas можно: создать SVG-тег и приписывать к содержимому из джаваскрипта.
(Reply) (Parent) (Thread)
[User Picture]
From:kcmamu
Date:November 16th, 2016 01:02 am (UTC)
(Link)
> Также имеются случайным образом генерируемые "цветочки", символически называемые розами; видимо, за розоцветную пятилепестность.

Нет, "розы" -- это официальное название некоторого класса кривых, не обязательно пятилепестковых. Еще бывают розетки. Деталей уже не помню, но мы и те, и другие в ФМШ вручную рисовали на матпрактикуме.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:November 16th, 2016 02:53 am (UTC)
(Link)
Ой. Тут в каждой розе по 1251 отрезку.
(Reply) (Parent) (Thread)
[User Picture]
From:kcmamu
Date:November 16th, 2016 03:00 am (UTC)
(Link)
Тайный привет от arno1251!

Странно, что на 5 не делится. Или там начальное невидимое перемещение учтено?

(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:fatoff
Date:November 16th, 2016 04:42 am (UTC)
(Link)
Ворча: ну хоть бы отступов в код наставил...
(Reply) (Thread)
[User Picture]
From:spamsink
Date:November 16th, 2016 04:58 am (UTC)
(Link)
Надо же дать хоть один пример в аутентичном виде!
(Reply) (Parent) (Thread)
[User Picture]
From:kohomologie
Date:November 16th, 2016 02:14 pm (UTC)
(Link)
Картинка «тело/body»?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:November 16th, 2016 03:19 pm (UTC)
(Link)
Идея правильная, но нужно уточнить.
(Reply) (Parent) (Thread)
[User Picture]
From:kohomologie
Date:November 16th, 2016 03:34 pm (UTC)
(Link)
Дама?
(Reply) (Parent) (Thread) (Expand)