{"id":315074,"date":"2020-12-17T21:00:35","date_gmt":"2020-12-17T21:00:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=315074"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=315074","title":{"rendered":"Javis v0.3 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0440\u044f\u0434\u043e\u0432 \u0424\u0443\u0440\u044c\u0435"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wh\/aj\/v7\/whajv7unqwf-8bu8ld_qptyoue0.gif\"><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u0440\u0435\u043b\u0438\u0437\u0430 <a href=\"https:\/\/github.com\/Wikunia\/Javis.jl\" rel=\"nofollow\">Javis<\/a> v0.2, \u0447\u0442\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u043e\u0441\u044c <a href=\"https:\/\/opensourc.es\/blog\/javis-v0.2-and-future\/\" rel=\"nofollow\">\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435<\/a>. \u0422\u0430\u043c \u044f \u0434\u0430\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u041c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 v0.3, \u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 \u0441\u0442\u0430\u043b\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0432\u0432\u0435\u043b\u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0443\u0447\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u044f \u0441\u043e\u0437\u0434\u0430\u043c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e, \u0430 \u043f\u043e \u043f\u0443\u0442\u0438 \u0431\u0443\u0434\u0443 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u043f\u0440\u043e \u0440\u044f\u0434\u044b \u0424\u0443\u0440\u044c\u0435.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u042f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043b\u044e\u0434\u0435\u0439 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043e \u0440\u044f\u0434\u0430\u0445 \u0424\u0443\u0440\u044c\u0435, \u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438 \u0438\u0445. \u0418 \u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0430\u0445\u043e\u0436\u0443\u0441\u044c \u0432 \u0438\u0445 \u0447\u0438\u0441\u043b\u0435. \u041d\u0435 \u0437\u043d\u0430\u044e, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0432 \u0442\u0435\u043c\u0435, \u043d\u043e \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435. \u041a \u0441\u043b\u043e\u0432\u0443, \u0437\u0430\u0432\u0438\u0434\u0443\u044e \u044f \u044d\u0442\u0438\u043c \u043b\u044e\u0434\u044f\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u044f\u0434\u044b \u0424\u0443\u0440\u044c\u0435 \u2014 \u044d\u0442\u043e \u043d\u0435\u0447\u0442\u043e \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u0431\u043b\u043e\u0433 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f Javis \u0438 <a href=\"https:\/\/habr.com\/ru\/hub\/julia\/\">Julia<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u0447\u043d\u0443 \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432 v0.3.<\/p>\n<p>  <\/p>\n<h3 id=\"izmeneniya-v-v03\">\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 v0.3<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0438\u043b\u0438 \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u043e\u0431\u0449\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u043c\u043e\u0440\u0444\u0438\u043d\u0433\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u043e\u0433\u0434\u0430.<br \/>  \u041d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u043e\u0442\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f. (\u041d\u0443, \u0441\u043a\u0430\u0436\u0435\u043c, \u0432 \u043d\u043e\u044f\u0431\u0440\u0435\u2026 \u043d\u0430\u0434\u0435\u044e\u0441\u044c)<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/cw\/dy\/ze\/cwdyze8cemh10hyvsutkys33bam.gif\"><\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e-\u0442\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e \u0432 v0.3, \u043a\u0430\u043a \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0441\u043b\u043e\u0438, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0438\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u043c \u0445\u043e\u0434\u043e\u043c. \u0415\u0441\u0442\u044c \u0443\u0436\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u0430\u043d, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0437\u0430\u043a\u043e\u0434\u0438\u0442\u044c, \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u0432\u043d\u043e\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<br \/>  \u0415\u0449\u0435 \u0431\u044b\u043b\u043e \u043e\u0431\u0435\u0449\u0430\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u043b\u0438\u0431\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Javis v0.2, \u043b\u0438\u0431\u043e \u0447\u0442\u043e \u0432\u044b \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u0435\u0442\u0435\u0441\u044c \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u043b\u0438.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<p>  <\/p>\n<p><code>Action<\/code> \u0438 <code>SubAction<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <code>Object<\/code> \u0438 <code>Action<\/code>.<br \/>  \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e <code>Action<\/code> \u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u043c\u043e\u0433 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0435\u0433\u043e. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u043a\u0438\u043c.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0438 <code>BackgroundAction<\/code> \u0434\u043e <code>Background<\/code>. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443 <\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u044b \u0443\u0434\u0430\u043b\u0438\u043b\u0438 <code>Translation<\/code>, <code>Rotation<\/code> \u0438 <code>Scaling<\/code> \u0438 \u0432\u0432\u0435\u043b\u0438 <code>anim_translate<\/code>, <code>anim_rotate<\/code>\/<code>anim_rotate_around<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 <code>anim_scale<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439, \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e, \u0430 \u043d\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>javis<\/code> \u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u0432\u0448\u0435\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 \u0431\u0435\u0441\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441 \u044d\u0442\u0438\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0432\u0438\u0434\u0435\u043e, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0437\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0438, \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0432\u0438\u0434\u0435\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"julia\">using Javis function ground(args...)     background(&quot;black&quot;)     sethue(&quot;white&quot;) end  video = Video(800, 400) Background(1:100, ground) ball = Object((args...)-&gt;circle(O, 100, :fill), Point(-500, 0)) rolling = Action(anim_translate(Point(1000, 0))) act!(ball, rolling)  render(video; pathname=&quot;rolling_ball.gif&quot;)<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bu\/7f\/y-\/bu7fy-c_zfdvqsqagrteyex8bqa.gif\"><\/p>\n<p>  <\/p>\n<p>\u0414\u0443\u043c\u0430\u044e, \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u0435\u043d, \u043a\u0440\u043e\u043c\u0435, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0438\u0447\u0443\u0434 &#8230;<\/p>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>circle<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0438 \u0440\u0430\u0434\u0438\u0443\u0441, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 (\u0437\u0434\u0435\u0441\u044c <code>:fill<\/code>). \u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e \u0446\u0435\u043d\u0442\u0440 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435? \u042f \u043c\u043e\u0433 \u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0432 <code>Point(-500, 0)<\/code>, \u043d\u043e \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0434\u0443\u043c\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u0441\u0438. \u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e: \u043e\u0431\u044a\u0435\u043a\u0442 \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u0440\u0443\u0433\u0430 (\u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0435\u0433\u043e \u043d\u0435 \u0432\u0440\u0430\u0449\u0430\u0435\u043c). \u041a\u0430\u043a \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043a \u043a\u0440\u0443\u0433\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d?<\/p>\n<p>  <\/p>\n<pre><code class=\"julia\">using Javis function ground(args...)     background(&quot;black&quot;)     sethue(&quot;white&quot;) end  function my_circle(args...)     circle(O, 100, :fill)     sethue(&quot;black&quot;)     line(O, Point(100, 0), :stroke) end  video = Video(800, 400) Background(1:100, ground) ball = Object(my_circle, Point(-500, 0)) translating = Action(anim_translate(Point(1000, 0))) rotating = Action(anim_rotate(0.0, 2*2\u03c0)) act!(ball, [translating, rotating])  render(video; pathname=&quot;rolling_ball_2.gif&quot;)<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zm\/nc\/fu\/zmncfuiuabsuxkaigtrpt_4qruu.gif\"><\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438 \u043a\u0430\u0442\u0438\u0442\u0441\u044f. \u041b\u0430\u0434\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u043b\u0435\u043a\u0441\u044f, \u043d\u043e \u043f\u043e\u0437\u0436\u0435 \u043d\u0430\u043c \u044d\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0432 v0.2 \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0443\u0433\u0430 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0435\u0439 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441 v0.2.2, \u043d\u043e \u044f \u0435\u0449\u0435 \u043d\u0435 \u043f\u0438\u0441\u0430\u043b \u043e\u0431 \u044d\u0442\u043e\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f <strong>\u043f\u0435\u0440\u0435\u043c\u0435\u043d<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"julia\">using Javis function ground(args...)     background(&quot;black&quot;)     sethue(&quot;white&quot;) end  function my_circle(args...; line_length=0)     circle(O, 100, :fill)     sethue(&quot;black&quot;)     setline(2)     line(O, Point(line_length, 0), :stroke) end  video = Video(800, 400) Background(1:100, ground) ball = Object(my_circle, Point(-500, 0)) translating = Action(anim_translate(Point(1000, 0))) rotating = Action(anim_rotate(0.0, 2*2\u03c0)) changing_len = Action(change(:line_length, 0 =&gt; 100)) act!(ball, [translating, rotating, changing_len])  render(video; pathname=&quot;rolling_ball_3.gif&quot;)<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ix\/zp\/gr\/ixzpgromlmdvy5pogsnjuwcssjq.gif\"><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u0412\u043e\u0442 \u043c\u044b \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u0438 \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u0424\u0443\u0440\u044c\u0435 <\/p>\n<p>  <\/p>\n<h3 id=\"ryady-fure\">\u0420\u044f\u0434\u044b \u0424\u0443\u0440\u044c\u0435<\/h3>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0437 \u043a\u0443\u0447\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0448\u0442\u0443\u043a \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043b\u043d\u044b \u0434\u043b\u044f \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438 \u043b\u044e\u0431\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043d\u0430\u0441\u0447\u0435\u0442 \u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438?<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qk\/1z\/z1\/qk1zz1cwdddh7c78v0xbn782ydy.gif\"><\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"julia\">using Javis, Colors function ground(args...)     background(&quot;black&quot;)     sethue(&quot;white&quot;)     translate(-args[1].width\/2+50, 0)     scale(700, 150) end  function wave(xs, ys, opacity, color)     setline(1.5)     setopacity(opacity)     sethue(color)     points = Vector{Point}(undef, length(xs))     for (x, y, i) in zip(xs, ys, 1:length(xs))         points[i] = Point(x, y)     end     prettypoly(points, :stroke, ()-&gt;()) end  function term(x, i)     return 4\/\u03c0 * sin.(2\u03c0*(2i-1)*x)\/(2i-1) end  function sum_term(x, k)     k == 0 &amp;&amp; return zeros(length(x))     return sum(term(x, i) for i in 1:k) end  nframes = 300 frames_per_wave = 40 video = Video(800, 600) Background(1:nframes, ground)  x = 0.0:0.001:1.0 k = 6 colors = [RGB(0.0, 1.0, 0.4), RGB(0, 1.0, 1.0), RGB(1.0, 0.25, 0.25),  RGB(1.0, 1.0, 0.0), RGB(1.0, 0.5, 1.0), RGB(0.75, 0.75, 1.0)] waves = Object[] for i = 1:k     frames = frames_per_wave*(i-1)+1:nframes     push!(waves, Object(frames, (args...; y=term(x,i)) -&gt; wave(x, y, 0.5, colors[i])))     act!(waves[end], Action(5:frames_per_wave,                     change(:y, term(x,i) =&gt; sum_term(x, i)))) end  sum_wave = Object(1:nframes, (args...; y=zeros(length(x)))-&gt;wave(x, y, 1.0, &quot;white&quot;)) for i = 1:k     act!(sum_wave, Action(frames_per_wave*(i-1)+1:frames_per_wave*i,                          change(:y, sum_term(x, i-1) =&gt; sum_term(x, i)))) end  render(video; pathname=&quot;images\/fourier_1D.gif&quot;)<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041c\u044b, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043b\u043d\u044b) \u043f\u0443\u0442\u0435\u043c \u0438\u0445 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0443\u044e \u0432\u043e\u043b\u043d\u0443.<\/p>\n<p>  <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e. \u041f\u043e\u0434\u0445\u043e\u0434 \u043e\u0431\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0414\u043b\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u2014 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<h3 id=\"a-teper-begom-v-2d\">\u0410 \u0442\u0435\u043f\u0435\u0440\u044c, \u0431\u0435\u0433\u043e\u043c \u0432 2D<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0432 2D \u2014 \u044d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u041a\u0441\u0442\u0430\u0442\u0438, \u0432\u0441\u044f \u044d\u0442\u0430 \u0438\u0434\u0435\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Javis \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u044f\u0434\u043e\u0432 \u0424\u0443\u0440\u044c\u0435 \u043f\u0440\u0438\u0448\u043b\u0430 \u043e\u0442 <a href=\"https:\/\/github.com\/ric-cioffi\" rel=\"nofollow\">\u0420\u0438\u043a\u043a\u0430\u0440\u0434\u043e \u0427\u0438\u043e\u0444\u0444\u0438<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f \u043b\u044e\u0431\u043b\u044e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c Javis. \u041e\u043d \u0441\u0430\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0438\u0434\u0435\u044e, \u0431\u0435\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0435\u0434\u043e\u043c\u0430, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b\u0438 <a href=\"https:\/\/discourse.julialang.org\/t\/fourier-draws-the-julia-logo\/47309\" rel=\"nofollow\">\u0435\u0433\u043e \u043f\u043e\u0441\u0442<\/a> \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430 JuliaLang-\u0434\u0438\u0441\u043a\u0443\u0440\u0441\u0435. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430!<\/p>\n<p>  <\/p>\n<p>\u0418\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Javis, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u042f \u043f\u043e\u0434\u043e\u0436\u0434\u0443 \u0437\u0434\u0435\u0441\u044c \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442, \u043f\u043e\u043a\u0430 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0435\u0433\u043e \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0435\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u043c\u044b\u0441\u043b \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0440\u044f\u0434\u043e\u0432 \u0424\u0443\u0440\u044c\u0435 \u0432 2D. \u042f \u043d\u0430\u0447\u043d\u0443 \u0441 \u043a\u0440\u0443\u0433\u043e\u0432 \u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u044f \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e \u0442\u043e\u043c\u0443 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0413\u0440\u0430\u043d\u0442 \u0421\u0430\u043d\u0434\u0435\u0440\u0441\u043e\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043b \u043d\u0430 \u0441\u0432\u043e\u0435\u043c YouTube-\u043a\u0430\u043d\u0430\u043b\u0435 <em>3blue1brown<\/em> <a href=\"https:\/\/youtu.be\/r6sGWTCMz2k\" rel=\"nofollow\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u044f\u0434\u044b \u0424\u0443\u0440\u044c\u0435?<\/a>. \u0412 \u043a\u043e\u043d\u0446\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043e\u043a <\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u0443\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0430\u0442\u0430\u043b\u0438 \u043a\u0440\u0443\u0433\u0438, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430. \u042f \u0437\u0434\u0435\u0441\u044c \u0438\u043c\u0435\u044e \u0432 \u0432\u0438\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b<\/p>\n<p>  <\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/918\/40c\/3a9\/91840c3a92ad9b1a8fa2426dec59ae87.svg\" alt=\"$ e^{2\\pi i t} $\" data-tex=\"display\"><\/math><\/p>\n<p>  <\/p>\n<p>\u0433\u0434\u0435 <em>t<\/em> \u2014 \u043d\u0430\u0448\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 <code>0<\/code> \u0434\u043e <code>1<\/code>, \u0430 <code>i<\/code> \u2014 \u043c\u043d\u0438\u043c\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0434\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e <em>t<\/em>. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0435\u0433\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043d\u0430 \u043e\u0441\u0438 <em>x<\/em> \u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u043d\u0430 \u043e\u0441\u0438 <em>y<\/em>.<\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0440\u0443\u0433 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043a\u0440\u0443\u0433 \u0441 <code>t=1.00<\/code><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4s\/bx\/1w\/4sbx1wncv02ckifehy9uofwwtyu.gif\"><\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0443\u043c\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u0441\u0442\u0430. <\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043d\u0435\u043a\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u0440\u0443\u0433\u0438, \u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u0440\u0443\u0433\u043e\u0432, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u0440\u0443\u0433\u0438 \u2014 \u044d\u0442\u043e \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043b\u043d\u044b \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430.<\/p>\n<p>  <\/p>\n<p>\u042f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, <em>\u0447\u0435\u0433\u043e<\/em> \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0447\u044c, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043a\u0430\u0436\u0443, <em>\u043a\u0430\u043a<\/em> \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c.<\/p>\n<p>  <\/p>\n<h3 id=\"chto-my-hotim-vossozdat\">\u0427\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c<\/h3>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u0442\u043e, \u0447\u0435\u0433\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0441\u0442\u0438\u0447\u044c, \u043d\u043e \u043f\u043e\u0437\u0436\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0440\u0443\u0433\u043e\u0432, \u0445\u043e\u0442\u044c \u0442\u043e\u0433\u0434\u0430 \u0438 \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zs\/6v\/sr\/zs6vsrvvrgltzhwowam0nx5dbaq.gif\"><\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"julia\">using Javis, FFTW, FFTViews  function ground(args...)     background(&quot;black&quot;)     sethue(&quot;white&quot;) end  function circ(; r = 10, vec = O, action = :stroke, color = &quot;white&quot;)     sethue(color)     circle(O, r, action)     my_arrow(O, vec)     return vec end  function my_arrow(start_pos, end_pos)     start_pos \u2248 end_pos &amp;&amp; return end_pos     arrow(         start_pos,         end_pos;         linewidth = distance(start_pos, end_pos) \/ 100,         arrowheadlength = 7,     )     return end_pos end  function draw_line(     p1 = O,     p2 = O;     color = &quot;white&quot;,     action = :stroke,     edge = &quot;solid&quot;,     linewidth = 3, )     sethue(color)     setdash(edge)     setline(linewidth)     line(p1, p2, action) end  function draw_path!(path, pos, color)     sethue(color)      push!(path, pos)     draw_line.(path[2:end], path[1:(end - 1)]; color = color) end  function get_points(npoints, options)     Drawing()     shape = poly([Point(-200, 0), Point(250, 70), Point(165, -210)]; close=true)     points = [Javis.get_polypoint_at(shape, i \/ (npoints-1)) for i in 0:(npoints-1)]     return points end  function poly_color(points, action; color=nothing)     color !== nothing &amp;&amp; sethue(color)     poly(points, action) end  c2p(c::Complex) = Point(real(c), imag(c))  remap_idx(i::Int) = (-1)^i * floor(Int, i \/ 2) remap_inv(n::Int) = 2n * sign(n) - 1 * (n &gt; 0)  function animate_fourier(options)     npoints = options.npoints     nplay_frames = options.nplay_frames     nruns = options.nruns     nframes = nplay_frames + options.nend_frames      points = get_points(npoints, options)     npoints = length(points)     println(&quot;#points: $npoints&quot;)      # optain the fft result and scale     x = [p.x for p in points]     y = [p.y for p in points]      fs = fft(complex.(x, y)) |&gt; FFTView     # normalize the points as fft doesn't normalize     fs .\/= npoints     npoints = length(fs)      video = Video(options.width, options.height)     Background(1:nframes, ground)     Object((args...)-&gt;poly_color(points, :stroke; color=&quot;green&quot;))      circles = Object[]     npoints = 5      for i in 1:npoints         ridx = remap_idx(i)          push!(circles, Object((args...) -&gt; circ(; r = abs(fs[ridx]), vec = c2p(fs[ridx]))))          if i &gt; 1             # translate to the tip of the vector of the previous circle             act!(circles[i], Action(1:1, anim_translate(circles[i - 1])))         end         ridx = remap_idx(i)         act!(circles[i], Action(1:nplay_frames, anim_rotate(0.0, ridx * 2\u03c0 * nruns)))     end      trace_points = Point[]     Object(1:nframes, (args...) -&gt; draw_path!(trace_points, pos(circles[end]), &quot;red&quot;))      render(video, pathname = options.filename) end  function main()     gif_options = (         npoints = 1000, # rough number of points for the shape =&gt; number of circles         nplay_frames = 400, # number of frames for the animation of fourier         nruns = 2, # how often it's drawn         nend_frames = 0,  # number of frames in the end         width = 800,         height = 500,         shape_scale = 0.8, # scale factor for the logo         tsp_quality_factor = 40,         filename = &quot;images\/fourier_tri_5.gif&quot;,     )     animate_fourier(gif_options) end  main()<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0437\u0435\u043b\u0435\u043d\u044b\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u044f\u0442\u044c \u043a\u0440\u0443\u0433\u043e\u0432. \u041e\u043d\u0438 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0438\u0440\u0443\u044e\u0442 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u043a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u043e\u0439. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439 \u043a \u043d\u0435\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438, \u0433\u0434\u0435 \u0432\u0435\u043a\u0442\u043e\u0440 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<p>  <\/p>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0446\u0435\u043d\u0442\u0440 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0430\u044f \u0442\u043e\u0447\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0431\u0430\u043b\u0430\u043d\u0441 \u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u0435 \u043a\u0440\u0443\u0433\u043e\u0432 \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0435\u043d. \u042f \u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0440\u043d\u0443\u0441\u044c \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0437\u0436\u0435 \u0432 \u044d\u0442\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u043e\u043c-\u0434\u043b\u0438\u043d\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043d\u0430\u0441\u0447\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435? \u041e\u043d \u043d\u0435 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f, \u043d\u043e \u0435\u0433\u043e \u0446\u0435\u043d\u0442\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043c, \u043a\u0443\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u0440\u0443\u0433. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f. \u041e\u0434\u0438\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0445\u043e\u0434\u0443 \u043f\u043e \u043a\u043e\u043d\u0442\u0443\u0440\u0443 \u0440\u0438\u0441\u0443\u043d\u043a\u0430. <\/p>\n<p>  <\/p>\n<blockquote><p>\u0412\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0437\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432? \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0441\u044c <em>y<\/em> \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u0430 \u0432\u043d\u0438\u0437 \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u0432\u0432\u0435\u0440\u0445. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p><\/blockquote>\n<p>\u0410 \u0432\u043e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0438 \u043a\u0440\u0443\u0433\u0430 \u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f. \u0412\u0435\u043a\u0442\u043e\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u0443 \u0436\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u0440\u0443\u0433, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438. \u0414\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0435\u043b\u0430\u044e\u0442 <strong>\u0434\u0432\u0430<\/strong> \u043f\u043e\u043b\u043d\u044b\u0445 \u043a\u0440\u0443\u0433\u0430 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u0443. \u041e\u0434\u0438\u043d \u0438\u0434\u0435\u0442 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435, \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u043f\u0440\u043e\u0442\u0438\u0432.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041d\u0443, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u044d\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u043e\u0433\u043e, \u0447\u0435\u0433\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0441\u0442\u0438\u0447\u044c, \u0438 \u0432\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u0440\u0443\u0433\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"kak-eto-poschitat\">\u041a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c<\/h3>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u0445\u043e\u0447\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0432\u0430\u0441, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u044f\u0442\u0438 \u043a\u0440\u0443\u0433\u043e\u0432, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435.<\/p>\n<p>  <\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/742\/f15\/8fd\/742f158fdb7fa198237e12478b56afc2.svg\" alt=\"$ \\sum_{k=-n}^n c_k e^{k\\cdot 2\\pi i t} $\" data-tex=\"display\"><\/math><\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/918\/40c\/3a9\/91840c3a92ad9b1a8fa2426dec59ae87.svg\" alt=\"$e^{2\\pi i t}$\" data-tex=\"inline\"><\/math> \u0440\u0430\u043d\u044c\u0448\u0435, \u0442\u0430\u043a \u0447\u0442\u043e <em>k<\/em> \u2014 \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0449\u044c \u0432 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0418\u0437 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043a\u0440\u0443\u0433\u0430 \u0432\u044b\u0448\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <em>k<\/em> \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0430 \u0437\u043d\u0430\u043a <em>k<\/em> \u2014 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f. <\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043a\u0440\u0443\u0433 \u0441 <em>k=0<\/em> \u0438 \u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u0440\u0443\u0433\u0438 \u0441 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4c5\/c20\/1ea\/4c5c201ea88f2ebc88bfd2ffe36bcfae.svg\" alt=\"$k \\in \\{-1, 1, -2, 2\\}$\" data-tex=\"inline\"><\/math>. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c, \u2014 \u044d\u0442\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/833\/f60\/906\/833f60906cf2429fe497c7950d50c0b1.svg\" alt=\"$c_k$\" data-tex=\"inline\"><\/math>.<\/p>\n<p>  <\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/833\/f60\/906\/833f60906cf2429fe497c7950d50c0b1.svg\" alt=\"$c_k$\" data-tex=\"inline\"><\/math> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0434\u0438\u0443\u0441 \u043a\u0440\u0443\u0433\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 2.5 \u0438\u043b\u0438 0.5. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0438 \u0437\u0430\u0434\u0430\u044e\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u0440\u0443\u0433\u0430. \u042d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u041c\u044b \u0443\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0438 \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/833\/f60\/906\/833f60906cf2429fe497c7950d50c0b1.svg\" alt=\"$c_k$\" data-tex=\"inline\"><\/math> \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0438 \u0443\u0433\u043b\u043e\u043c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0422\u0430\u043a\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0430\u0439\u0442\u0430\u0445, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438. \u041c\u043e\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430 \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0413\u0440\u0430\u043d\u0442 \u0421\u0430\u043d\u0434\u0435\u0440\u0441\u043e\u043d \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043b \u044d\u0442\u043e \u0432 \u0441\u0432\u043e\u0435\u043c \u0432\u0438\u0434\u0435\u043e <a href=\"https:\/\/youtu.be\/r6sGWTCMz2k\" rel=\"nofollow\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u044f\u0434\u044b \u0424\u0443\u0440\u044c\u0435?<\/a>.<\/p><\/blockquote>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u043b\u044f <em>n=1<\/em>:<\/p>\n<p>  <\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d3b\/647\/9a7\/d3b6479a7e155f566a130ebfe749a8fb.svg\" alt=\"$ c_{-1} e^{-2\\pi i t} + c_{0} e^{0\\cdot 2\\pi i t} + c_{1} e^{2\\pi i t} $\" data-tex=\"display\"><\/math><\/p>\n<p>  <\/p>\n<p>\u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/49c\/c8f\/a4f\/49cc8fa4f16311bb00d97b73cc95e252.svg\" alt=\"$e^0 = 1$\" data-tex=\"inline\"><\/math>:<\/p>\n<p>  <\/p>\n<p><math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c30\/d1a\/d8f\/c30d1ad8fab3321d8e19d84a8973111b.svg\" alt=\"$ c_{-1} e^{-2\\pi i t} + c_{0} + c_{1} e^{2\\pi i t} $\" data-tex=\"display\"><\/math><\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043c <em>t<\/em> \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 <em>0<\/em> \u043a <em>1<\/em> \u0438 \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0435 \u043a\u0440\u0443\u0433\u0438?<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0443\u043c\u043c\u044b, \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0443\u0441\u0440\u0435\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0446\u0435\u043d\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u0447\u043a\u0435 <code>(0,0)<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u0437 \u043d\u0438\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c <em>t<\/em> \u043c\u0435\u0436\u0434\u0443 <em>0<\/em> \u0438 <em>1<\/em> (\u0438\u043b\u0438, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439\u2026 \u0445\u043e\u0440\u043e\u0448\u043e, \u0441\u043a\u0430\u0436\u0435\u043c, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430)<br \/>  \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/206\/00c\/422\/20600c422160c10dc3d3b3348a973c94.svg\" alt=\"$c_0$\" data-tex=\"inline\"><\/math>. \u0427\u0443\u0434\u043d\u0435\u043d\u044c\u043a\u043e, \u0434\u0430?<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u044d\u0442\u043e \u0435\u0449\u0435 \u0440\u0430\u0437: \u043c\u044b \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0435\u043c \u043f\u043e \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u043c, \u0438 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435, \u043a\u0440\u043e\u043c\u0435 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/206\/00c\/422\/20600c422160c10dc3d3b3348a973c94.svg\" alt=\"$c_0$\" data-tex=\"inline\"><\/math>, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0440\u0443\u0433\u0430\u043c\u0438, \u043e\u043d\u0438 \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7bd\/4dc\/fda\/7bd4dcfdaca65306e56a1ac89735cec9.svg\" alt=\"$(0, 0)$\" data-tex=\"inline\"><\/math> \u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0434\u0435\u043b\u0443.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0431\u044b\u043b\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043f\u044f\u0442\u044c\u044e \u043a\u0440\u0443\u0433\u0430\u043c\u0438, \u043e\u0442\u0447\u0430\u044f\u043d\u043d\u043e \u043f\u044b\u0442\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c\u0441\u044f \u043a \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443.<\/p>\n<p>  <\/p>\n<p>\u041d\u0443 \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u0430 \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/416\/917\/8e2\/4169178e20c7b215a990c9e33811427d.svg\" alt=\"$c_{-1}$\" data-tex=\"inline\"><\/math> \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/833\/f60\/906\/833f60906cf2429fe497c7950d50c0b1.svg\" alt=\"$c_k$\" data-tex=\"inline\"><\/math>? <\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u0432\u0441\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e65\/e11\/9ed\/e65e119ed46d37c1f5ed16759773baf2.svg\" alt=\"$e^{1\\cdot 2\\pi i t}$\" data-tex=\"inline\"><\/math>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/181\/7a4\/466\/1817a44660256010306d7f5cdc449f52.svg\" alt=\"$e^x \\cdot e^y = e^{x+y}$\" data-tex=\"inline\"><\/math> \u0442\u0430\u043a\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f. \u0423\u043c\u043d\u043e\u0436\u0430\u044f \u043d\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e65\/e11\/9ed\/e65e119ed46d37c1f5ed16759773baf2.svg\" alt=\"$e^{1\\cdot 2\\pi i t}$\" data-tex=\"inline\"><\/math>, \u043c\u044b \u0432\u044b\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043b\u044f <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5dd\/e2f\/611\/5dde2f611264a4575577d32c27d62f7b.svg\" alt=\"$k=-1$\" data-tex=\"inline\"><\/math>. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zu\/ba\/rs\/zubars0em9g-zlmk3hxboyz8z0i.gif\"><\/p>\n<p>  <\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430<\/li>\n<li>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c 100 \u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u044d\u0442\u043e\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435 \u0438 \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0435\u043c \u0435\u0433\u043e<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u0441 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0435\u043a\u0442\u043e\u0440\u0430<\/li>\n<li>\u0423\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043d\u0430 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e5d\/df0\/3f9\/e5ddf03f9e8afa6b811e2dbff5e72fba.svg\" alt=\"$e^{k \\cdot 2\\pi i t}$\" data-tex=\"inline\"><\/math> \u0441 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5dd\/e2f\/611\/5dde2f611264a4575577d32c27d62f7b.svg\" alt=\"$k=-1$\" data-tex=\"inline\"><\/math> \u0438 <em>t<\/em> \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u043c \u043e\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043d\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 100 \u0442\u043e\u0447\u0435\u043a \u0438 \u0441\u043d\u043e\u0432\u0430 \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0435\u043c \u0438\u0445<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u0440\u0443\u0433<\/li>\n<li>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u0440\u0443\u0433\u0430<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0418 \u0442\u0430\u043a \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u0440\u0443\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c.<\/p>\n<p>  <\/p>\n<h3 id=\"rabotat-spodruchney-s-paketami\">\u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043f\u043e\u0434\u0440\u0443\u0447\u043d\u0435\u0439 \u0441 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438<\/h3>\n<p>  <\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0438 \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0440\u0443\u0447\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442. \u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0441\u043c\u043e\u0433\u0443 \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0431\u044b\u043b \u0443\u0431\u0435\u0436\u0434\u0435\u043d \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0442\u043e \u0440\u044f\u0434\u044b \u0424\u0443\u0440\u044c\u0435 \u044d\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e, \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441 \u043d\u0438\u043c\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0440\u0443\u0442\u044b\u0445 \u0448\u0442\u0443\u043a, \u0447\u0435\u043c \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043b \u0437\u0434\u0435\u0441\u044c \u0438\u043b\u0438 \u043f\u043e\u043d\u044f\u043b \u0441\u0430\u043c <\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432 \u0441\u0432\u043e\u0435\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0424\u0443\u0440\u044c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u043d\u044c\u0448\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/JuliaMath\/FFTW.jl\" rel=\"nofollow\">FFTW<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/JuliaArrays\/FFTViews.jl\" rel=\"nofollow\">FFTViews<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u044f\u0436\u0435\u043b\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u0430\u044f \u0431\u0443\u043a\u0432\u0430 &quot;F&quot; \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 &quot;\u0431\u044b\u0441\u0442\u0440\u044b\u0439&quot;.<\/p>\n<p>  <\/p>\n<p>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, FFTViews \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443. \u041a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f <em>k<\/em>. <\/p>\n<p>  <\/p>\n<p>FFTW \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 <math><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/833\/f60\/906\/833f60906cf2429fe497c7950d50c0b1.svg\" alt=\"$c_k$\" data-tex=\"inline\"><\/math>, \u043d\u043e FFTViews \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0431\u043e\u043b\u0435\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a <em>c[-3]<\/em>, \u0434\u0430\u0436\u0435 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e Julia \u2014 \u044d\u0442\u043e \u044f\u0437\u044b\u043a, \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0435\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0441 \u0435\u0434\u0438\u043d\u0438\u0446\u044b.<\/p>\n<p>  <\/p>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c \u0432\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440 \u0442\u043e\u0447\u0435\u043a \u043a\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c, \u2014 \u044d\u0442\u043e \u0443\u0441\u0440\u0435\u0434\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c (\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 )<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0434 \u0441\u0440\u0435\u0434\u043d\u0438\u043c \u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a.<\/p>\n<p>  <\/p>\n<p>\u042f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442, \u043f\u043e\u043a\u0430\u0437\u0430\u0432 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044f, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432\u044b\u043b\u043e\u0436\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<h2 id=\"the-final-animation\">The final animation<\/h2>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/dl\/aj\/ob\/dlajobo-jfq0rcwizll94yqza5q.gif\"><\/p>\n<p>  <\/p>\n<div class=\"oembed\"><iframe id=\"5fce33b8fd7c16e10ee4a82e\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/5fce33b8fd7c16e10ee4a82e\"><\/iframe><\/div>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0437\u0430\u0434\u0430\u0447\u0443 \u043a\u043e\u043c\u043c\u0438\u0432\u043e\u044f\u0436\u0435\u0440\u0430 (TSP), \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0431\u0443\u043a\u0432\u044b \u0432 \u043e\u0434\u043d\u0443 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443. <\/p>\n<p>  <\/p>\n<blockquote><p>\u041a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430:<br \/>  \u0415\u0441\u043b\u0438 \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043a\u043e\u043c\u043c\u0438\u0432\u043e\u044f\u0436\u0435\u0440\u0430 \u0438\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0446\u0435\u043b\u043e\u043c \u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0438 \u0440\u0430\u043d\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u044b:  <\/p>\n<ul>\n<li><a href=\"https:\/\/opensourc.es\/blog\/mip-tsp\" rel=\"nofollow\">Solving the TSP using mixed integer programming<\/a><\/li>\n<li><a href=\"https:\/\/opensourc.es\/blog\/minlp-tspn\" rel=\"nofollow\">Doing the same thing but with neighborhoods<\/a><\/li>\n<li><a href=\"https:\/\/opensourc.es\/blog\/constraint-solver-1\" rel=\"nofollow\">Building a constraint solver (in several steps)<\/a><\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<p>\u041b\u0430\u0434\u043d\u043e \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043f\u043e\u0441\u0442\u0443:<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u043a\u043e\u043c\u043c\u0438\u0432\u043e\u044f\u0436\u0435\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043a\u0430\u0447\u043a\u043e\u0432 \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u044b \u043a \u0434\u0440\u0443\u0433\u043e\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0438\u0441\u0443\u043d\u043e\u043a \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u0435\u043d. \u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0432\u0441\u0435\u0445 \u0441\u043a\u0430\u0447\u043a\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u0435, \u0438\u043c\u0435\u044f \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u044f\u0434\u0430 \u0424\u0443\u0440\u044c\u0435 \u0441 \u0440\u0430\u0437\u0440\u044b\u0432\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u043b \u043d\u0438\u0436\u0435, \u044f \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u043e\u0447\u0435\u043a \u0438 \u043a\u0440\u0443\u0433\u043e\u0432, \u0447\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u0430\u044f \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f, \u0438 \u044f \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u0435\u0435 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0430\u0442\u0435\u043b\u044f TSP.<\/p>\n<p>  <\/p>\n<h4 id=\"vyvody\">\u0412\u044b\u0432\u043e\u0434\u044b<\/h4>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0443 \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0440\u0435\u043a\u043b\u0430\u043c\u043e\u0439 \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0443\u0437\u043d\u0430\u043b\u0438 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 20 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 Javis v0.3<\/li>\n<li>\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0444\u0438\u0433\u0443\u0440 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a \u043d\u0438\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439<\/li>\n<li>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0440\u044f\u0434\u0430\u043c\u0438 \u0424\u0443\u0440\u044c\u0435 \u0432 1D \u0438 2D<\/li>\n<li>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0440\u044f\u0434\u0430 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>\u0418\u043d\u0442\u0443\u0438\u0446\u0438\u044f, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/li>\n<\/ol>\n<p>  <\/p>\n<h4 id=\"ssylki\">\u0421\u0441\u044b\u043b\u043a\u0438<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0412\u0438\u0434\u0435\u043e-\u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043e\u0442 3blue1brown <a href=\"https:\/\/youtu.be\/r6sGWTCMz2k\" rel=\"nofollow\">But what is a Fourier series?<\/a><\/li>\n<li>\u0412\u0438\u0434\u0435\u043e-\u043a\u043e\u0434\u0438\u043d\u0433 \u043e\u0442 The Coding Train <a href=\"https:\/\/www.youtube.com\/watch?v=Mm2eYfj0SgA\" rel=\"nofollow\">Coding Challenge: #125 Fourier Series<\/a><\/li>\n<li>\u041f\u043e\u0441\u0442 \u043d\u0430 betterexplained.com <a href=\"https:\/\/betterexplained.com\/articles\/an-interactive-guide-to-the-fourier-transform\/\" rel=\"nofollow\">An Interactive Guide To The Fourier Transform<\/a><\/li>\n<li>\u0420\u0438\u0441\u043e\u0432\u0430\u043b\u043a\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u0438 <a href=\"https:\/\/gist.github.com\/Wikunia\/cf735079e208e18d87bf23eadcac350f\" rel=\"nofollow\">\u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p><em>\u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0443\u0442 \u0441\u0441\u044b\u043b\u043e\u0447\u043a\u0438 \u043d\u0430 \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b \u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u043f\u0430\u0442\u0440\u043e\u043d\u0430\u0436, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0441\u043a\u0443\u043f\u0438\u043c\u0441\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430 \u041e\u043b\u0435 \u041a\u0440\u044e\u0433\u0435\u0440\u0430 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0431\u043b\u043e\u0433.<\/em><\/p>\n<\/div>\n<p> \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\/post\/530652\/\"> https:\/\/habr.com\/ru\/post\/530652\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wh\/aj\/v7\/whajv7unqwf-8bu8ld_qptyoue0.gif\"><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u0440\u0435\u043b\u0438\u0437\u0430 <a href=\"https:\/\/github.com\/Wikunia\/Javis.jl\" rel=\"nofollow\">Javis<\/a> v0.2, \u0447\u0442\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u043e\u0441\u044c <a href=\"https:\/\/opensourc.es\/blog\/javis-v0.2-and-future\/\" rel=\"nofollow\">\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435<\/a>. \u0422\u0430\u043c \u044f \u0434\u0430\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u041c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 v0.3, \u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 \u0441\u0442\u0430\u043b\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0432\u0432\u0435\u043b\u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0443\u0447\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u044f \u0441\u043e\u0437\u0434\u0430\u043c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e, \u0430 \u043f\u043e \u043f\u0443\u0442\u0438 \u0431\u0443\u0434\u0443 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u043f\u0440\u043e \u0440\u044f\u0434\u044b \u0424\u0443\u0440\u044c\u0435.<\/p>\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-315074","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/315074","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=315074"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/315074\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=315074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=315074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=315074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}