{"id":471031,"date":"2025-08-17T15:00:50","date_gmt":"2025-08-17T15:00:50","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=471031"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=471031","title":{"rendered":"<span>GIMP Script-Fu \u041e\u041e\u041f. \u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0424\u0438\u0433\u0443\u0440 \u0438 \u0432\u0441\u0435 \u0424\u0438\u0433\u0443\u0440\u044b \u0432 \u044f\u0437\u044b\u043a \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><a href=\"https:\/\/gitflic.ru\/project\/nuinu\/gimp-script-fu-ext\" rel=\"noopener noreferrer nofollow\">\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a Script-fu<\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432 GIMP \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u044d\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 &#8212; \u0424\u0438\u0433\u0443\u0440. \u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0444\u0438\u0433\u0443\u0440 \u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432: \u0424\u0438\u0433\u0443\u0440\u044b \u0440\u0438\u0441\u0443\u0435\u043c\u044b\u0445 \u043f\u043e \u043a\u043e\u043d\u0442\u0443\u0440\u0443 \u041a\u0438\u0441\u0442\u044c\u044e \u0438 \u041a\u0430\u0440\u0430\u043d\u0434\u0430\u0448\u043e\u043c, \u0424\u0438\u0433\u0443\u0440 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0424\u0438\u0433\u0443\u0440, \u0424\u0438\u0433\u0443\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0424\u0438\u0433\u0443\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0422\u0435\u043a\u0441\u0442. \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u043a\u0430\u043a \u043b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0451\u043d\u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0438\u0435\u0440\u0430\u0440\u0430\u0445\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u0441\u044f \u044d\u0442\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u044f\u0437\u044b\u043a\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u0442\u0430\u0442\u0435\u0439.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430.<\/h2>\n<p>\u0412 \u0446\u0435\u043b\u044f\u0445 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a (stroke), \u0442.\u043a. \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0446\u0432\u0435\u0442\u043e\u043c \u0438\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u043e\u0440\u043e\u0439 \u043e\u0431\u0440\u0430\u0437\u0443\u044f \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c &#8230; \u0421\u041c\u0410\u0419\u041b\u0418\u041a! \u0421\u043c\u0430\u0439\u043b\u0438\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0433\u043e\u043b\u043e\u0432\u044b, \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0437 \u0438 \u0443\u043b\u044b\u0431\u043a\u0438. \u041a\u0430\u043a \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0443\u0440 \u0438\u0437 \u043b\u0438\u043d\u0438\u0439 \u0431\u0435\u0437\u044c\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0449\u0438\u0439 \u043a\u0440\u0443\u0433?<\/p>\n<details class=\"spoiler\">\n<summary>\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0445\u043e\u043b\u0441\u0442 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(define path-home (getenv \"HOME\")) (define path-lib (string-append path-home \"\/work\/gimp\/lib\/\")) (define path-work (string-append path-home \"\/work\/gimp\/\")) (load (string-append path-lib \"util.scm\")) (load (string-append path-lib \"defun.scm\")) (load (string-append path-lib \"struct2.scm\")) (load (string-append path-lib \"storage.scm\")) (load (string-append path-lib \"cyclic.scm\")) (load (string-append path-lib \"hashtable3.scm\")) ;;\u0445\u0435\u0448 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0439! (load (string-append path-lib \"sort2.scm\")) (load (string-append path-lib \"tsort.scm\")) ;;(load (string-append path-lib \"cpl-sbcl.scm\")) (load (string-append path-lib \"cpl-mro.scm\")) ;;(load (string-append path-lib \"cpl-topext.scm\")) (load (string-append path-lib \"struct2ext.scm\")) (load (string-append path-lib \"queue.scm\")) (load (string-append path-lib \"obj5.scm\")) (load (string-append path-lib \"obj\/object.scm\"))  (load (string-append path-lib \"point.scm\")) (load (string-append path-lib \"tr2d.scm\")) (load (string-append path-lib \"contour.scm\")) (load (string-append path-lib \"img.scm\")) (load (string-append path-lib \"rect.scm\")) (load (string-append path-lib \"vect.scm\")) (load (string-append path-lib \"brush.scm\")) (load (string-append path-lib \"bezier.scm\"))  (load (string-append path-lib \"fig-obj4.scm\")) (load (string-append path-lib \"fig-obj4bz.scm\"))  (define i1 (create-1-layer-img 640 480)) ;; \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0445\u043e\u043b\u0441\u0442 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f. <\/code><\/pre>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0440\u0443\u0433 \u0432 \u0440\u0443\u0447\u043d\u0443\u044e:<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a8f\/83b\/57e\/a8f83b57eba54a264b978820e40d9b6f.png\" alt=\"\u041a\u043e\u043d\u0442\u0443\u0440 \u043a\u0440\u0443\u0433\u0430 \u0438\u0437 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u0431\u0435\u0437\u044c\u0435\" width=\"837\" height=\"471\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a8f\/83b\/57e\/a8f83b57eba54a264b978820e40d9b6f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a8f\/83b\/57e\/a8f83b57eba54a264b978820e40d9b6f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u043d\u0442\u0443\u0440 \u043a\u0440\u0443\u0433\u0430 \u0438\u0437 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u0431\u0435\u0437\u044c\u0435<\/figcaption><\/div>\n<\/figure>\n<ul>\n<li>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0443\u0433\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0446\u0432\u0435\u0442\u0443 \u0438 \u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c, \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e &#171;\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435&#187; &#171;\u0412 \u043a\u043e\u043d\u0442\u0443\u0440&#187;.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"lisp\">(define c1 (make-circle-n 50 50 40 30)) (define fg-color (car (gimp-context-get-foreground))) (define fig1 (shape-fig! :contour c1 :color fg-color)) (draw fig1 i1 #f) ;;\u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0444\u0438\u0433\u0443\u0440\u0443 \u043f\u043e \u043a\u043e\u043d\u0442\u0443\u0440\u0443 \u0431\u0435\u0437 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. (gimp-image-select-color i1 CHANNEL-OP-ADD (car (gimp-image-get-active-drawable i1)) fg-color) ;#t <\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/779\/f72\/db1\/779f72db15b78d48efe24d97bd2e51ec.png\" alt=\"\u041a\u043e\u043d\u0442\u0443\u0440 \u043a\u0440\u0443\u0433\u0430 \u0438\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f\" width=\"1054\" height=\"486\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/779\/f72\/db1\/779f72db15b78d48efe24d97bd2e51ec.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/779\/f72\/db1\/779f72db15b78d48efe24d97bd2e51ec.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u043d\u0442\u0443\u0440 \u043a\u0440\u0443\u0433\u0430 \u0438\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<ul>\n<li>\n<p>\u0422\u0440\u0435\u0442\u044c\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e GIMP \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u044d\u043b\u0438\u043f\u0441\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u0445.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(gimp-vectors-bezier-stroke-new-ellipse vectors x0 y0 radius-x radius-y angle) (gimp-vectors-stroke-scale vectors stroke-id scale-x scale-y) (gimp-vectors-stroke-translate vectors stroke-id off-x off-y)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u0432\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0438\u0433\u0443\u0440 \u0432 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 GIMP\u043e\u043c <code>gimp-vectors-bezier-stroke-new-ellipse<\/code>.<\/p>\n<pre><code class=\"lisp\">(gimp-image-get-vectors i1)    ;;(3 #(153 152 3)) (gimp-vectors-bezier-stroke-new-ellipse 153 50 50 40 40 0) (gimp-vectors-bezier-stroke-new-ellipse 153 41 40 4 10 0) (gimp-vectors-bezier-stroke-new-ellipse 153 61 40 4 10 0) <\/code><\/pre>\n<p>\u0443\u043b\u044b\u0431\u043a\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/11e\/ada\/fb8\/11eadafb80e836c774f0cf1556ac5959.png\" alt=\"\u041a\u043e\u043d\u0442\u0443\u0440 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 GIMP\" width=\"1059\" height=\"501\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/11e\/ada\/fb8\/11eadafb80e836c774f0cf1556ac5959.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/11e\/ada\/fb8\/11eadafb80e836c774f0cf1556ac5959.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u043d\u0442\u0443\u0440 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 GIMP<\/figcaption><\/div>\n<\/figure>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u0430\u043c\u0439\u043b\u0438\u043a \u0438\u0437 GIMP\u0430 \u0432 Script-fu<\/p>\n<pre><code class=\"lisp\">(define bzs1 (make-beziers-from-img-by-vector i1 153)) (define bzs1o (beziers-to-origin bzs1)) (define min-bzs1 (min-beziers bzs1o)) ;;#(p 0.0 0.0) (define max-bzs1 (max-beziers bzs1o)) ;;#(p 80.0 80.0) (define bzs1t (translate-beziers bzs1o ;;\u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441\u043c\u0430\u0439\u043b\u0438\u043a \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0441\u044f \u0432 \u0444\u0438\u0433\u0443\u0440\u0430\u0445 (comb-tr2d  (make-tr2d-reflect-x)  (make-tr2d-move 0 (+ (p-y min-bzs1) (p-y max-bzs1)))))) <\/code><\/pre>\n<p>\u0432\u044b\u0432\u0435\u0434\u0435\u043c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c Script-fu:<\/p>\n<details class=\"spoiler\">\n<summary>\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0435 \u0432 \u043a\u0440\u0438\u0432\u044b\u0445 \u0431\u0435\u0437\u044c\u0435 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">;;\u0443\u043b\u044b\u0431\u043a\u0430 (car bzs1t) ;; #(bezier (#(bezier-p #(p 17,125.0 32,625.0) #(p 16,18532994.0 31,34665689.0) #(p 17,57473711.0 30,4158742.0)) #(bezier-p #(p 42,375.0 19,625.0) #(p 31.0 19,375.0) #(p 54,75.0 19,625.0)) #(bezier-p #(p 64,375.0 33,75.0) #(p 65,5817278.0 33,19513436.0) #(p 65,19396945.0 33,35153491.0)) #(bezier-p #(p 50,75.0 16,75.0) #(p 58,375.0 21.0) #(p 48,125.0 14,625.0)) #(bezier-p #(p 35,125.0 16.0) #(p 40,625.0 14,375.0) #(p 25,375.0 19,125.0))) 1) ;;\u0433\u043e\u043b\u043e\u0432\u0430 (cadr bzs1t) ;; #(bezier (#(bezier-p #(p 80.0 40.0) #(p 80.0 62,09138999.0) #(p 80.0 17,90861001.0)) #(bezier-p #(p 40.0 0.0) #(p 62,09138999.0 0.0) #(p 17,90861001.0 0.0)) #(bezier-p #(p 0.0 40.0) #(p 0.0 17,90861001.0) #(p 0.0 62,09138999.0)) #(bezier-p #(p 40.0 80.0) #(p 17,90861001.0 80.0) #(p 62,09138999.0 80.0))) 1) ;;\u0433\u043b\u0430\u0437\u0430 (caddr bzs1t) ;; #(bezier (#(bezier-p #(p 35.0 50.0) #(p 35.0 55,5228475.0) #(p 35.0 44,4771525.0)) #(bezier-p #(p 31.0 40.0) #(p 33,209139.0 40.0) #(p 28,790861.0 40.0)) #(bezier-p #(p 27.0 50.0) #(p 27.0 44,4771525.0) #(p 27.0 55,5228475.0)) #(bezier-p #(p 31.0 60.0) #(p 28,790861.0 60.0) #(p 33,209139.0 60.0))) 1) (cadddr bzs1t) ;; #(bezier (#(bezier-p #(p 55.0 50.0) #(p 55.0 55,5228475.0) #(p 55.0 44,4771525.0)) #(bezier-p #(p 51.0 40.0) #(p 53,209139.0 40.0) #(p 48,790861.0 40.0)) #(bezier-p #(p 47.0 50.0) #(p 47.0 44,4771525.0) #(p 47.0 55,5228475.0)) #(bezier-p #(p 51.0 60.0) #(p 48,790861.0 60.0) #(p 53,209139.0 60.0))) 1)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, tinyschema \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u044f\u043f\u044f\u0442\u043e\u0439 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0441 \u043d\u0443\u043b\u0451\u043c. \u041d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0430\u043c\u0430\u0439\u043b\u0438\u043a\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u0435 \u043a \u0432\u0432\u043e\u0434\u0443 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 Script-fu<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0435, \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(define head-bc   #(bezier (#(bezier-p #(p 80.0 40.0) #(p 80.0 62.09138999) #(p 80.0 17.90861001))     #(bezier-p #(p 40.0 0.0) #(p 62.09138999 0.0) #(p 17.90861001 0.0))     #(bezier-p #(p 0.0 40.0) #(p 0.0 17.90861001) #(p 0.0 62.09138999))     #(bezier-p #(p 40.0 80.0) #(p 17.90861001 80.0) #(p 62.09138999 80.0))) 1))  (define smile-bc   #(bezier     (#(bezier-p #(p 17.125 32.625) #(p 16.18532994 31.34665689) #(p 17.57473711 30.4158742))      #(bezier-p #(p 42.375 19.625) #(p 31.0 19.375) #(p 54.75 19.625))      #(bezier-p #(p 64.375 33.75) #(p 65.5817278 33.19513436) #(p 65.19396945 33.35153491))      #(bezier-p #(p 50.75 16.75) #(p 58.375 21.0) #(p 48.125 14.625))      #(bezier-p #(p 35.125 16.0) #(p 40.625 14.375) #(p 25.375 19.125))) 1))  (define eye1-bc   #(bezier     (#(bezier-p #(p 35.0 50.0) #(p 35.0 55.5228475) #(p 35.0 44.4771525))      #(bezier-p #(p 31.0 40.0) #(p 33.209139 40.0) #(p 28.790861 40.0))      #(bezier-p #(p 27.0 50.0) #(p 27.0 44.4771525) #(p 27.0 55.5228475))      #(bezier-p #(p 31.0 60.0) #(p 28.790861 60.0) #(p 33.209139 60.0))) 1))  (define eye2-bc   #(bezier (#(bezier-p #(p 55.0 50.0) #(p 55.0 55.5228475) #(p 55.0 44.4771525))         #(bezier-p #(p 51.0 40.0) #(p 53.209139 40.0) #(p 48.790861 40.0))         #(bezier-p #(p 47.0 50.0) #(p 47.0 44.4771525) #(p 47.0 55.5228475))         #(bezier-p #(p 51.0 60.0) #(p 48.790861 60.0) #(p 53.209139 60.0))) 1)) <\/code><\/pre>\n<\/div>\n<\/details>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043b\u0430\u0441\u0441\u044b \u0444\u0438\u0433\u0443\u0440 \u0411\u0435\u0437\u044c\u0435.<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0438\u0433\u0443\u0440 \u0431\u0435\u0437\u044c\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0444\u0438\u0433\u0443\u0440: \u0444\u0438\u0433\u0443\u0440\u044b \u043a\u043e\u043d\u0442\u0443\u0440\u043d\u044b\u0435 \u0438 \u0444\u0438\u0433\u0443\u0440\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0438\u0433\u0443\u0440\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0439 \u0441\u0442\u0440\u043e\u043a, \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c(\u0441\u043f\u0438\u0441\u043a\u043e\u043c) \u0441\u0442\u0440\u043e\u043a, \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a \u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0411\u0435\u0437\u044c\u0435.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">;;\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0440\u043e\u043a(\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440) (define (translate-beziers bclist tr)   (map    (lambda (bc)      (translate-bezier bc tr))    bclist))  ;;\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0421\u041f\u0418\u0421\u041a\u0410 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435, \u0442.\u0435 \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430. (defun (min-beziers bzlist &amp;key (min-p min-bezier-p))   (let* ((tmp-p  (min-bezier (car bzlist) :min-p min-p))          (min-x  (p-x tmp-p))          (min-y  (p-y tmp-p)))     (do ((cur (cdr bzlist) (cdr cur)))         ((null? cur) (p! min-x min-y))       (let ((cur-p (min-bezier (car cur) :min-p min-p)))         (if (&lt; (p-x cur-p) min-x)             (set! min-x (p-x cur-p)))         (if (&lt; (p-y cur-p) min-y)             (set! min-y (p-y cur-p)))         )       )))  ;;\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0421\u041f\u0418\u0421\u041a\u0410 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435 \u0442.\u0435 \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 (defun (max-beziers bzlist &amp;key (max-p max-bezier-p))   (let* ((tmp-p   (max-bezier (car bzlist) :max-p max-p))  (max-x   (p-x tmp-p))          (max-y   (p-y tmp-p)))     (do ((cur (cdr bzlist) (cdr cur)))         ((null? cur) (p! max-x max-y))       (let ((cur-p (max-bezier (car cur) :max-p max-p)))         (if (&gt; (p-x cur-p) max-x)             (set! max-x (p-x cur-p))             ())         (if (&gt; (p-y cur-p) max-y)             (set! max-y (p-y cur-p))             ())         )       )))  ;;\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.\u0443\u0441\u043b\u043e\u0432\u043d\u0430\u044f, \u0442.\u043a \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b (define (beziers-to-origin bclist)    (let ((p-min (min-beziers bclist)))       (translate-beziers bclist                          (make-tr2d-move (- (p-x p-min)) (- (p-y p-min))))))  ;;\u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440, \u0442.\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043d\u043e\u0432\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440. (defun (beziers-to-img img beziers &amp;key (name \"work vector\"))   (let ((v          (car (gimp-vectors-new img name))))     (for-list (bezier beziers)        (let ((num-points (length (bezier-points bezier)))          (points     (make-stroke-points (bezier-points bezier))))      (gimp-vectors-stroke-new-from-points           v 0                           ;;\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430.           (vector-length points) points           (bezier-closed bezier))))     (gimp-image-add-vectors img v 0)     v))  ;;\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0440\u0438\u0432\u044b\u0445 \u0431\u0435\u0437\u044c\u0435 \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 (define (make-beziers-from-img-by-vector img vec)   (let ((strokes-id (cadr (gimp-vectors-get-strokes vec))) (rez '()))     (for-vect (i strokes-id)       (push rez (make-bezier-from-img-by-id img vec (vector-ref strokes-id i))))     (reverse rez))) <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0444\u0438\u0433\u0443\u0440 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044b \u0440\u0438\u0441\u0443\u0435\u043c\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0411\u0435\u0437\u044c\u0435.<\/p>\n<pre><code class=\"lisp\">(defclass beziered ()   (beziers)) ;;\u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435, \u0442.\u0435 stroke   (defclass bezier-fig (fig beziered)   ())   ;;\u043e\u0434\u043d\u043e\u043a\u043e\u043d\u0442\u0443\u0440\u043d\u0430\u044f \u0444\u0438\u0433\u0443\u0440\u0430 \u0440\u0438\u0441\u0443\u0435\u043c\u0430\u044f \u043a\u0438\u0441\u0442\u044c\u044e (defclass brush-bz-fig (bezier-fig colored brushed)   ())  ;;\u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0444\u0438\u0433\u0443\u0440\u0430, \u043a\u0441\u0442\u044c \u0435\u0439 \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c. (defclass shape-bz-fig (bezier-fig colored brushed)   ()) <\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0442.\u043a. \u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0430 \u043a\u043e\u043d\u0442\u0443\u0440\u044b, \u0446\u0432\u0435\u0442 \u0438 \u043a\u0438\u0441\u0442\u044c, \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u0438\u043a\u0441\u0438\u043d\u043e\u0432. \u0422\u0430\u043a \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <code>bezier-fig<\/code> ,\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0434\u043b\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u043e\u0432 \u0438 \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0444\u0438\u0433\u0443\u0440 \u0438 \u0437\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0444\u0438\u0433\u0443\u0440 \u0411\u0435\u0437\u044c\u0435.<\/p>\n<pre><code class=\"lisp\">(defmethods beziered   (parsed-change (parsed)      (if (next-method-p) (call-next-method))      (awhen (assq :beziers parsed)  (set! self.beziers  (cdr it)))      self)   )   (def-key :overall-size) (defmethods bezier-fig   (parsed-change (parsed)      (if (next-method-p) (call-next-method))      (let* ((has-overall-size (assq :overall-size parsed))         (overall-size (if has-overall-size (cdr has-overall-size) #f))         (min-bezier-p-func (if overall-size min-bezier-all-p min-bezier-p))         (max-bezier-p-func (if overall-size max-bezier-all-p max-bezier-p)))        (let ((min-p (min-beziers self.beziers :min-p min-bezier-p-func))              (max-p (max-beziers self.beziers :max-p max-bezier-p-func)))      (assign-undefined self (p-x min-p) (p-y min-p) (p-x max-p) (p-y max-p)))        self)      )   ) <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0438\u0433\u0443\u0440 \u0411\u0435\u0437\u044c\u0435.<\/p>\n<pre><code class=\"lisp\">(defmethods brush-bz-fig   (draw (img tr)      (let* ((beziers    (if tr                            (translate-beziers self.beziers tr)                self.beziers))        (dw         (car (gimp-image-get-active-drawable img)))        (v          (beziers-to-img img beziers)))        (gimp-edit-stroke-vectors  dw  v)        (gimp-image-remove-vectors img v))      )   )   (defmethods shape-bz-fig   (draw (img tr)      (let* ((beziers    (if tr                            (translate-beziers self.beziers tr)                            self.beziers))         (dw         (car (gimp-image-get-active-drawable img)))         (v          (beziers-to-img img beziers)))        (gimp-vectors-to-selection v  CHANNEL-OP-REPLACE FALSE                   FALSE 0 0)        (gimp-edit-fill dw  FOREGROUND-FILL)        (gimp-selection-none img)        (gimp-image-remove-vectors img v))      )   ) <\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u044d\u0442\u043e \u0412\u0415\u0421\u042c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0438\u0433\u0443\u0440\u0430\u043c\u0438 \u0411\u0435\u0437\u044c\u0435.<\/p>\n<h2>\u0420\u0438\u0441\u0443\u0435\u043c \u0441\u043c\u0430\u0439\u043b\u0438\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 \u0444\u0438\u0433\u0443\u0440.<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u043f\u0430\u0440\u0443 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0424\u0438\u0433\u0443\u0440.<\/p>\n<pre><code class=\"lisp\">;; \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0440\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0411\u0435\u0437\u044c\u0435. (define bz1 (list head-bc smile-bc eye1-bc eye2-bc)) (define bz2 (list head-bc)) (define bz3 (list smile-bc eye1-bc eye2-bc))  ;;\u0420\u0438\u0441\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043c\u0430\u0439\u043b\u0438\u043a (\u0436\u0451\u043b\u0442\u044b\u0439) (define sh-bz1 (shape-bz-fig! :beziers bz1 :color '(255 255 0))) (define r1 (rect! (p! 20 220) (p! 200 0) (p! 0 -200))) (draw-to-rect sh-bz1 i1 r1)  ;;\u0420\u0438\u0441\u0443\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043c\u0430\u0439\u043b\u0438\u043a (\u0437\u0435\u043b\u0435\u043d\u043e\u0432\u0430\u0442\u044b\u0439). (define sh-bz2 (complex-fig! :figs (list (shape-bz-fig! :beziers bz2 :color '(100 255 0))         (shape-bz-fig! :beziers bz3 :color '(0 0 0))         (brush-bz-fig! :beziers (list head-bc eye1-bc eye2-bc) :color '(0 0 255))         (brush-bz-fig! :beziers (list smile-bc ) :color '(200 0 0))))) (define r2 (rect! (p! 230 220) (p! 200 0) (p! 0 -200))) (draw-to-rect sh-bz2 i1 r2) <\/code><\/pre>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043a\u043b\u0430\u0441\u0441\u044b \u0444\u0438\u0433\u0443\u0440 \u0431\u0435\u0437\u044c\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0444\u0438\u0433\u0443\u0440.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ae9\/1c4\/761\/ae91c47612f713ea0b9b9eded924b684.png\" alt=\"\u0414\u0432\u0430 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0430 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0444\u0438\u0433\u0443\u0440.\" width=\"754\" height=\"478\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ae9\/1c4\/761\/ae91c47612f713ea0b9b9eded924b684.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ae9\/1c4\/761\/ae91c47612f713ea0b9b9eded924b684.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0432\u0430 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0430 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0444\u0438\u0433\u0443\u0440.<\/figcaption><\/div>\n<\/figure>\n<h2>\u0421\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435  \u043d\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0444\u0438\u0433\u0443\u0440 \u0441 \u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438.<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0432 \u044f\u0437\u044b\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u043d\u0443\u0436\u043d\u0430 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440.<\/p>\n<pre><code class=\"lisp\">(load (string-append path-lib \"pic.scm\")) ;;\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043e\u043a(picture) \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0444\u0438\u0433\u0443\u0440\u044b (defun (pic! fig-obj)    (lambda (img dest-r)       (draw-to-rect fig-obj  img dest-r))) <\/code><\/pre>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0444\u0438\u0433\u0443\u0440 \u0432 \u044f\u0437\u044b\u043a\u0435 \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438.<\/h2>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <code>pic.scm<\/code>. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0440\u0430\u043c\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u0438\u0445.<\/p>\n<pre><code class=\"lisp\">(load (string-append path-lib \"pic.scm\"))  (define r1 (make-rect-by-vect (p! 10  210) (p! 200 0)  (p!   0 -200))) (define r2 (make-rect-by-vect (p! 270 210) (p! 200 0)  (p! -40 -200))) (define r3 (make-rect-by-vect (p! 100 370) (p! 100 0)  (p!   0 -100))) (define r4 (make-rect-by-vect (p! 250 370) (p! 100 0)  (p!   0 -100))) (define r5 (make-rect-by-vect (p! 400 370) (p! 150 40) (p!  30 -150)))   (define c2 (make-rect-contour 0 0 50 50)) (define f2 (brush-fig! :name 'rect1   :color '(255 0 0)   :contour c2))  ;;\u0440\u0430\u043c\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u043e\u0432 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f. (draw-to-rect f2 i1 r1) (draw-to-rect f2 i1 r2) (draw-to-rect f2 i1 r3) (draw-to-rect f2 i1 r4) (draw-to-rect f2 i1 r5) <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438(picture) \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u043d\u0438\u043c \u043b\u044e\u0431\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u044f\u0437\u044b\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <code>pic-beside<\/code><\/p>\n<pre><code class=\"lisp\">(define p1 (pic! sh-bz1)) (define p2 (pic! sh-bz2))  ((pic-beside p1 p2 0.7) i1 r1) ((pic-beside p1 p2 0.3) i1 r2)  (define bs (pic-beside p1 p2 0.4))  (bs i1 r3) (bs i1 r4)  ((pic-beside p1 p1 0.8) i1 r5)<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1a9\/bbf\/13e\/1a9bbf13e031f899f72e850b6d7dc00c.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 beside \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u043e\u0432.\" width=\"602\" height=\"436\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1a9\/bbf\/13e\/1a9bbf13e031f899f72e850b6d7dc00c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1a9\/bbf\/13e\/1a9bbf13e031f899f72e850b6d7dc00c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 beside \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u043e\u0432.<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0430 \u0438\u0437 \u0444\u0438\u0433\u0443\u0440\u044b \u0441\u043e \u0441\u043b\u0435\u0433\u043a\u0430 \u0441\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u043c\u0438 \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u0430\u043c\u0438 \u0438 \u0440\u0430\u043c\u043a\u0438 \u0434\u043b\u044f \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"lisp\">(define sh-bz3 (complex-fig! :figs (list (shape-bz-fig! :beziers bz2 :color '(100 255 0))     (shape-bz-fig! :beziers bz3 :color '(0 0 0))     (brush-bz-fig! :beziers (list head-bc eye1-bc eye2-bc) :color '(0 0 255))     (brush-bz-fig! :beziers (list smile-bc ) :color '(200 0 0)))                 :min-x 5 :min-y -5 :max-x 85 :max-y 75)) (define pic-f (pic! sh-bz3))   (get-gabarite sh-bz3) ;;(5 -5 85 75)  (define r1 (make-rect-by-vect (p! 10  110) (p! 100 0)  (p!   0 -100))) (define r2 (make-rect-by-vect (p! 170 110) (p! 100 0)  (p! -40 -100))) (define r3 (make-rect-by-vect (p! 300 110) (p! 100 20) (p!  30 -100))) (define r4 (make-rect-by-vect (p! 440 110) (p! 100 0)  (p!   0 -100))) (define r5 (make-rect-by-vect (p! 10  350) (p! 100 0)  (p!   0 -180))) (define r6 (make-rect-by-vect (p! 150 350) (p! 100 0)  (p!   0 -180))) (define r7 (make-rect-by-vect (p! 250 350) (p! 150 40) (p!  30 -180))) (define r8 (make-rect-by-vect (p! 470 380) (p! 150 40) (p!  -30 -180)))  (define c2 (make-rect-contour 0 0 50 50)) (define f2 (brush-fig! :name 'rect1   :color '(255 0 0)   :contour c2))  (define f3 (brush-fig! :name 'rect2   :color '(127 0 0)   :contour c2)) (define pic3 (pic! f3))  ;;\u0440\u0430\u043c\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u043e\u0432 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f. (draw-to-rect f2 i1 r1) (draw-to-rect f2 i1 r2) (draw-to-rect f2 i1 r3) (draw-to-rect f2 i1 r4) (draw-to-rect f2 i1 r5) (draw-to-rect f2 i1 r6) (draw-to-rect f2 i1 r7) (draw-to-rect f2 i1 r8) <\/code><\/pre>\n<p>\u0418 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u043e\u043c:<\/p>\n<pre><code class=\"lisp\">(pic-f i1 r1) ((pic-rotate90 pic-f) i1 r2) ((pic-flip     pic-f) i1 r3) ((pic-rotate90 (pic-flip  pic-f)) i1 r4)  ((pic-above  pic-f pic-f 0.4)  i1 r5) ((pic-beside pic-f pic-f 0.7)  i1 r6) ((pic-above  (pic-beside pic-f pic-f 0.3) pic-f 0.6) i1 r7) ((pic-rotate45 (pic-over pic-f pic3)) i1 r8)<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e8f\/b90\/668\/e8fb9066832abc165c98cb14f413fb02.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u043e\u0432.\" width=\"640\" height=\"480\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e8f\/b90\/668\/e8fb9066832abc165c98cb14f413fb02.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e8f\/b90\/668\/e8fb9066832abc165c98cb14f413fb02.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u043e\u0432.<\/figcaption><\/div>\n<\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/h2>\n<p>\u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0435\u0449\u0451 \u0440\u0430\u0437 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0432\u0441\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043c\u043e\u0439 \u043f\u0443\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0443\u0441\u0442\u044c \u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u041e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0451\u043d\u043d\u043e\u0439 \u0432 \u044f\u0437\u044b\u043a Script-fu GIMP.<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/933022\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u041a\u043b\u0430\u0441\u0441\u044b. \u041d\u0430\u0447\u0430\u043b\u043e<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/933308\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432 \u041e\u041e\u041f \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/933466\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u041e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/933644\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0434\u0438\u0437\u0430\u0439\u043d (\u0430-\u043b\u044f CLOS)<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/934092\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u00ab\u0420\u041e\u041c\u0411\u0415 \u0421\u041c\u0415\u0420\u0422\u0418\u00bb<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/934560\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/934894\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. Dot \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/935292\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0418\u0437\u044e\u043c\u0438\u043d\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/936210\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u041e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/936636\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u041e\u041e\u041f \u043d\u0430 \u043c\u0438\u043a\u0441\u0438\u043d\u0430\u0445 \u0438\u043b\u0438 \u0441\u043a\u0430\u0437 \u043e \u0442\u043e\u043c: \u00ab\u0414\u0430 \u0447\u0442\u043e \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u0448\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435?\u00bb<\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/937152\/\" rel=\"noopener noreferrer nofollow\">GIMP Script-Fu \u041e\u041e\u041f. \u0412\u0435\u043a\u0442\u043e\u0440\u044b<\/a><\/p>\n<p>GIMP Script-Fu \u041e\u041e\u041f. \u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0424\u0438\u0433\u0443\u0440 \u0438 \u0432\u0441\u0435 \u0444\u0438\u0433\u0443\u0440\u044b \u0432 \u044f\u0437\u044b\u043a \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c \u044d\u0442\u0430 \u0441\u0435\u0440\u0438\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0412\u0430\u043c \u043f\u0440\u043e\u043d\u0438\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u0432\u043e\u043f\u043b\u043e\u0449\u0435\u043d\u0438\u0435\u043c \u0432 CLOS \u0438 \u043c\u043e\u0435\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439, \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0439, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439, \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0427\u0442\u043e \u0436\u0435 \u0432 \u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e? \u041a\u043b\u0430\u0441\u0441\u044b, \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u0440\u0438\u0447\u0451\u043c \u041c\u041d\u041e\u0416\u0415\u0421\u0422\u0412\u0415\u041d\u041d\u041e\u0415, \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0442\u043e\u0434\u044b(\u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0431\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0442\u0438\u043f\u0430\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432), \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440 \u0432 \u0432\u0438\u0434\u0435 \u0414\u041e\u0422 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430. \u0427\u0435\u0433\u043e \u0435\u0449\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0436\u0435\u043b\u0430\u0442\u044c \u043e\u0442 \u041e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u042f \u043d\u0435 \u0437\u043d\u0430\u044e.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/937886\/\"> https:\/\/habr.com\/ru\/articles\/937886\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><a href=\"https:\/\/gitflic.ru\/project\/nuinu\/gimp-script-fu-ext\" rel=\"noopener noreferrer nofollow\">\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a Script-fu<\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432 GIMP \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u044d\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 &#8212; \u0424\u0438\u0433\u0443\u0440. \u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0444\u0438\u0433\u0443\u0440 \u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432: \u0424\u0438\u0433\u0443\u0440\u044b \u0440\u0438\u0441\u0443\u0435\u043c\u044b\u0445 \u043f\u043e \u043a\u043e\u043d\u0442\u0443\u0440\u0443 \u041a\u0438\u0441\u0442\u044c\u044e \u0438 \u041a\u0430\u0440\u0430\u043d\u0434\u0430\u0448\u043e\u043c, \u0424\u0438\u0433\u0443\u0440 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0424\u0438\u0433\u0443\u0440, \u0424\u0438\u0433\u0443\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0424\u0438\u0433\u0443\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0422\u0435\u043a\u0441\u0442. \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u043a\u0430\u043a \u043b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0451\u043d\u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0438\u0435\u0440\u0430\u0440\u0430\u0445\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u0441\u044f \u044d\u0442\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u044f\u0437\u044b\u043a\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u0442\u0430\u0442\u0435\u0439.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430.<\/h2>\n<p>\u0412 \u0446\u0435\u043b\u044f\u0445 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a (stroke), \u0442.\u043a. \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0446\u0432\u0435\u0442\u043e\u043c \u0438\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u043e\u0440\u043e\u0439 \u043e\u0431\u0440\u0430\u0437\u0443\u044f \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c &#8230; \u0421\u041c\u0410\u0419\u041b\u0418\u041a! \u0421\u043c\u0430\u0439\u043b\u0438\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0433\u043e\u043b\u043e\u0432\u044b, \u0434\u0432\u0443\u0445 \u0433\u043b\u0430\u0437 \u0438 \u0443\u043b\u044b\u0431\u043a\u0438. \u041a\u0430\u043a \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0443\u0440 \u0438\u0437 \u043b\u0438\u043d\u0438\u0439 \u0431\u0435\u0437\u044c\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0449\u0438\u0439 \u043a\u0440\u0443\u0433?<\/p>\n<details class=\"spoiler\">\n<summary>\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0445\u043e\u043b\u0441\u0442 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(define path-home (getenv \"HOME\")) (define path-lib (string-append path-home \"\/work\/gimp\/lib\/\")) (define path-work (string-append path-home \"\/work\/gimp\/\")) (load (string-append path-lib \"util.scm\")) (load (string-append path-lib \"defun.scm\")) (load (string-append path-lib \"struct2.scm\")) (load (string-append path-lib \"storage.scm\")) (load (string-append path-lib \"cyclic.scm\")) (load (string-append path-lib \"hashtable3.scm\")) ;;\u0445\u0435\u0448 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0439! (load (string-append path-lib \"sort2.scm\")) (load (string-append path-lib \"tsort.scm\")) ;;(load (string-append path-lib \"cpl-sbcl.scm\")) (load (string-append path-lib \"cpl-mro.scm\")) ;;(load (string-append path-lib \"cpl-topext.scm\")) (load (string-append path-lib \"struct2ext.scm\")) (load (string-append path-lib \"queue.scm\")) (load (string-append path-lib \"obj5.scm\")) (load (string-append path-lib \"obj\/object.scm\"))  (load (string-append path-lib \"point.scm\")) (load (string-append path-lib \"tr2d.scm\")) (load (string-append path-lib \"contour.scm\")) (load (string-append path-lib \"img.scm\")) (load (string-append path-lib \"rect.scm\")) (load (string-append path-lib \"vect.scm\")) (load (string-append path-lib \"brush.scm\")) (load (string-append path-lib \"bezier.scm\"))  (load (string-append path-lib \"fig-obj4.scm\")) (load (string-append path-lib \"fig-obj4bz.scm\"))  (define i1 (create-1-layer-img 640 480)) ;; \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0445\u043e\u043b\u0441\u0442 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f. <\/code><\/pre>\n<\/div>\n<\/details>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0440\u0443\u0433 \u0432 \u0440\u0443\u0447\u043d\u0443\u044e:<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\">\n<div><figcaption>\u041a\u043e\u043d\u0442\u0443\u0440 \u043a\u0440\u0443\u0433\u0430 \u0438\u0437 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u0431\u0435\u0437\u044c\u0435<\/figcaption><\/div>\n<\/figure>\n<ul>\n<li>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0443\u0433\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0446\u0432\u0435\u0442\u0443 \u0438 \u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c, \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e &#171;\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435&#187; &#171;\u0412 \u043a\u043e\u043d\u0442\u0443\u0440&#187;.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"lisp\">(define c1 (make-circle-n 50 50 40 30)) (define fg-color (car (gimp-context-get-foreground))) (define fig1 (shape-fig! :contour c1 :color fg-color)) (draw fig1 i1 #f) ;;\u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0444\u0438\u0433\u0443\u0440\u0443 \u043f\u043e \u043a\u043e\u043d\u0442\u0443\u0440\u0443 \u0431\u0435\u0437 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. (gimp-image-select-color i1 CHANNEL-OP-ADD (car (gimp-image-get-active-drawable i1)) fg-color) ;#t <\/code><\/pre>\n<figure class=\"full-width\">\n<div><figcaption>\u041a\u043e\u043d\u0442\u0443\u0440 \u043a\u0440\u0443\u0433\u0430 \u0438\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<ul>\n<li>\n<p>\u0422\u0440\u0435\u0442\u044c\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e GIMP \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u044d\u043b\u0438\u043f\u0441\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u0445.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(gimp-vectors-bezier-stroke-new-ellipse vectors x0 y0 radius-x radius-y angle) (gimp-vectors-stroke-scale vectors stroke-id scale-x scale-y) (gimp-vectors-stroke-translate vectors stroke-id off-x off-y)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u0432\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0438\u0433\u0443\u0440 \u0432 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 GIMP\u043e\u043c <code>gimp-vectors-bezier-stroke-new-ellipse<\/code>.<\/p>\n<pre><code class=\"lisp\">(gimp-image-get-vectors i1)    ;;(3 #(153 152 3)) (gimp-vectors-bezier-stroke-new-ellipse 153 50 50 40 40 0) (gimp-vectors-bezier-stroke-new-ellipse 153 41 40 4 10 0) (gimp-vectors-bezier-stroke-new-ellipse 153 61 40 4 10 0) <\/code><\/pre>\n<p>\u0443\u043b\u044b\u0431\u043a\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041a\u043e\u043d\u0442\u0443\u0440 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 GIMP<\/figcaption><\/div>\n<\/figure>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u0430\u043c\u0439\u043b\u0438\u043a \u0438\u0437 GIMP\u0430 \u0432 Script-fu<\/p>\n<pre><code class=\"lisp\">(define bzs1 (make-beziers-from-img-by-vector i1 153)) (define bzs1o (beziers-to-origin bzs1)) (define min-bzs1 (min-beziers bzs1o)) ;;#(p 0.0 0.0) (define max-bzs1 (max-beziers bzs1o)) ;;#(p 80.0 80.0) (define bzs1t (translate-beziers bzs1o ;;\u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441\u043c\u0430\u0439\u043b\u0438\u043a \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0441\u044f \u0432 \u0444\u0438\u0433\u0443\u0440\u0430\u0445 (comb-tr2d  (make-tr2d-reflect-x)  (make-tr2d-move 0 (+ (p-y min-bzs1) (p-y max-bzs1)))))) <\/code><\/pre>\n<p>\u0432\u044b\u0432\u0435\u0434\u0435\u043c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c Script-fu:<\/p>\n<details class=\"spoiler\">\n<summary>\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0435 \u0432 \u043a\u0440\u0438\u0432\u044b\u0445 \u0431\u0435\u0437\u044c\u0435 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">;;\u0443\u043b\u044b\u0431\u043a\u0430 (car bzs1t) ;; #(bezier (#(bezier-p #(p 17,125.0 32,625.0) #(p 16,18532994.0 31,34665689.0) #(p 17,57473711.0 30,4158742.0)) #(bezier-p #(p 42,375.0 19,625.0) #(p 31.0 19,375.0) #(p 54,75.0 19,625.0)) #(bezier-p #(p 64,375.0 33,75.0) #(p 65,5817278.0 33,19513436.0) #(p 65,19396945.0 33,35153491.0)) #(bezier-p #(p 50,75.0 16,75.0) #(p 58,375.0 21.0) #(p 48,125.0 14,625.0)) #(bezier-p #(p 35,125.0 16.0) #(p 40,625.0 14,375.0) #(p 25,375.0 19,125.0))) 1) ;;\u0433\u043e\u043b\u043e\u0432\u0430 (cadr bzs1t) ;; #(bezier (#(bezier-p #(p 80.0 40.0) #(p 80.0 62,09138999.0) #(p 80.0 17,90861001.0)) #(bezier-p #(p 40.0 0.0) #(p 62,09138999.0 0.0) #(p 17,90861001.0 0.0)) #(bezier-p #(p 0.0 40.0) #(p 0.0 17,90861001.0) #(p 0.0 62,09138999.0)) #(bezier-p #(p 40.0 80.0) #(p 17,90861001.0 80.0) #(p 62,09138999.0 80.0))) 1) ;;\u0433\u043b\u0430\u0437\u0430 (caddr bzs1t) ;; #(bezier (#(bezier-p #(p 35.0 50.0) #(p 35.0 55,5228475.0) #(p 35.0 44,4771525.0)) #(bezier-p #(p 31.0 40.0) #(p 33,209139.0 40.0) #(p 28,790861.0 40.0)) #(bezier-p #(p 27.0 50.0) #(p 27.0 44,4771525.0) #(p 27.0 55,5228475.0)) #(bezier-p #(p 31.0 60.0) #(p 28,790861.0 60.0) #(p 33,209139.0 60.0))) 1) (cadddr bzs1t) ;; #(bezier (#(bezier-p #(p 55.0 50.0) #(p 55.0 55,5228475.0) #(p 55.0 44,4771525.0)) #(bezier-p #(p 51.0 40.0) #(p 53,209139.0 40.0) #(p 48,790861.0 40.0)) #(bezier-p #(p 47.0 50.0) #(p 47.0 44,4771525.0) #(p 47.0 55,5228475.0)) #(bezier-p #(p 51.0 60.0) #(p 48,790861.0 60.0) #(p 53,209139.0 60.0))) 1)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, tinyschema \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u044f\u043f\u044f\u0442\u043e\u0439 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0441 \u043d\u0443\u043b\u0451\u043c. \u041d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0430\u043c\u0430\u0439\u043b\u0438\u043a\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u0435 \u043a \u0432\u0432\u043e\u0434\u0443 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 Script-fu<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0435, \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(define head-bc   #(bezier (#(bezier-p #(p 80.0 40.0) #(p 80.0 62.09138999) #(p 80.0 17.90861001))     #(bezier-p #(p 40.0 0.0) #(p 62.09138999 0.0) #(p 17.90861001 0.0))     #(bezier-p #(p 0.0 40.0) #(p 0.0 17.90861001) #(p 0.0 62.09138999))     #(bezier-p #(p 40.0 80.0) #(p 17.90861001 80.0) #(p 62.09138999 80.0))) 1))  (define smile-bc   #(bezier     (#(bezier-p #(p 17.125 32.625) #(p 16.18532994 31.34665689) #(p 17.57473711 30.4158742))      #(bezier-p #(p 42.375 19.625) #(p 31.0 19.375) #(p 54.75 19.625))      #(bezier-p #(p 64.375 33.75) #(p 65.5817278 33.19513436) #(p 65.19396945 33.35153491))      #(bezier-p #(p 50.75 16.75) #(p 58.375 21.0) #(p 48.125 14.625))      #(bezier-p #(p 35.125 16.0) #(p 40.625 14.375) #(p 25.375 19.125))) 1))  (define eye1-bc   #(bezier     (#(bezier-p #(p 35.0 50.0) #(p 35.0 55.5228475) #(p 35.0 44.4771525))      #(bezier-p #(p 31.0 40.0) #(p 33.209139 40.0) #(p 28.790861 40.0))      #(bezier-p #(p 27.0 50.0) #(p 27.0 44.4771525) #(p 27.0 55.5228475))      #(bezier-p #(p 31.0 60.0) #(p 28.790861 60.0) #(p 33.209139 60.0))) 1))  (define eye2-bc   #(bezier (#(bezier-p #(p 55.0 50.0) #(p 55.0 55.5228475) #(p 55.0 44.4771525))         #(bezier-p #(p 51.0 40.0) #(p 53.209139 40.0) #(p 48.790861 40.0))         #(bezier-p #(p 47.0 50.0) #(p 47.0 44.4771525) #(p 47.0 55.5228475))         #(bezier-p #(p 51.0 60.0) #(p 48.790861 60.0) #(p 53.209139 60.0))) 1)) <\/code><\/pre>\n<\/div>\n<\/details>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043b\u0430\u0441\u0441\u044b \u0444\u0438\u0433\u0443\u0440 \u0411\u0435\u0437\u044c\u0435.<\/h2>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0438\u0433\u0443\u0440 \u0431\u0435\u0437\u044c\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0444\u0438\u0433\u0443\u0440: \u0444\u0438\u0433\u0443\u0440\u044b \u043a\u043e\u043d\u0442\u0443\u0440\u043d\u044b\u0435 \u0438 \u0444\u0438\u0433\u0443\u0440\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0438\u0433\u0443\u0440\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0439 \u0441\u0442\u0440\u043e\u043a, \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c(\u0441\u043f\u0438\u0441\u043a\u043e\u043c) \u0441\u0442\u0440\u043e\u043a, \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a \u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0411\u0435\u0437\u044c\u0435.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">;;\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0440\u043e\u043a(\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440) (define (translate-beziers bclist tr)   (map    (lambda (bc)      (translate-bezier bc tr))    bclist))  ;;\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0421\u041f\u0418\u0421\u041a\u0410 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435, \u0442.\u0435 \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430. (defun (min-beziers bzlist &amp;key (min-p min-bezier-p))   (let* ((tmp-p  (min-bezier (car bzlist) :min-p min-p))          (min-x  (p-x tmp-p))          (min-y  (p-y tmp-p)))     (do ((cur (cdr bzlist) (cdr cur)))         ((null? cur) (p! min-x min-y))       (let ((cur-p (min-bezier (car cur) :min-p min-p)))         (if (&lt; (p-x cur-p) min-x)             (set! min-x (p-x cur-p)))         (if (&lt; (p-y cur-p) min-y)             (set! min-y (p-y cur-p)))         )       )))  ;;\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0421\u041f\u0418\u0421\u041a\u0410 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435 \u0442.\u0435 \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 (defun (max-beziers bzlist &amp;key (max-p max-bezier-p))   (let* ((tmp-p   (max-bezier (car bzlist) :max-p max-p))  (max-x   (p-x tmp-p))          (max-y   (p-y tmp-p)))     (do ((cur (cdr bzlist) (cdr cur)))         ((null? cur) (p! max-x max-y))       (let ((cur-p (max-bezier (car cur) :max-p max-p)))         (if (&gt; (p-x cur-p) max-x)             (set! max-x (p-x cur-p))             ())         (if (&gt; (p-y cur-p) max-y)             (set! max-y (p-y cur-p))             ())         )       )))  ;;\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432 \u0431\u0435\u0437\u044c\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.\u0443\u0441\u043b\u043e\u0432\u043d\u0430\u044f, \u0442.\u043a \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b (define (beziers-to-origin bclist)    (let ((p-min (min-beziers bclist)))       (translate-beziers bclist                          (make-tr2d-move (- (p-x p-min)) (- (p-y p-min))))))  ;;\u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043d\u0430<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-471031","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/471031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=471031"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/471031\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=471031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=471031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=471031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}