{"id":474547,"date":"2025-09-11T03:00:27","date_gmt":"2025-09-11T03:00:27","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=474547"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=474547","title":{"rendered":"<span>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0435\u0442\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043a\u0440\u0443\u0433\u043e\u0432 \u0432 \u043a\u0440\u0443\u0433. \u041c\u0435\u0442\u043e\u0434 \u043e\u0442\u0436\u0438\u0433\u0430<\/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>\u042f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <em>\u00abFlorist\u00bb<\/em>. \u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0441\u0442\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u043a\u0435\u0442 \u2014 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u0431\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u043e\u0447\u043d\u044b\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u044b, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u043c\u0430\u043a\u0435\u0442\u0430 \u0446\u0432\u0435\u0442\u044b \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430. \u042f \u0441\u043e\u0437\u0434\u0430\u043b\u0430 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0430 \u0435\u0433\u043e \u0432 \u0441\u0430\u0439\u0442 \u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d \u0434\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438: <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/kf\/hw\/1o\/kfhw1ovfsnlde-o68xpxoed5ook.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/kf\/hw\/1o\/kfhw1ovfsnlde-o68xpxoed5ook.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/kf\/hw\/1o\/kfhw1ovfsnlde-o68xpxoed5ook.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p> \u041a\u043e\u043d\u0446\u0435\u043f\u0442 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0435\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0443 \u0431\u0443\u043a\u0435\u0442\u0430 \u0438\u0437 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0446\u0432\u0435\u0442\u044b \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430. <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/q9\/a-\/3u\/q9a-3u3nwi_ekzaxn57iwahihnc.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/q9\/a-\/3u\/q9a-3u3nwi_ekzaxn57iwahihnc.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/q9\/a-\/3u\/q9a-3u3nwi_ekzaxn57iwahihnc.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043c\u0430\u043a\u0435\u0442 \u043a\u0440\u0443\u0433\u043b\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u0421\u0430\u043c \u043c\u0430\u043a\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0444\u043e\u0440\u043c\u044b \u2014 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043a\u0440\u0443\u0433\u043e\u0432-\u044f\u0447\u0435\u0435\u043a \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430. \u0422\u0430\u043a\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0443 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u043e\u0442\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u0438 \u043f\u0443\u0441\u0442\u043e\u0442. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0440\u0435\u043c\u043b\u0435\u043d\u043e \u043a \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0435 \u0438\u043b\u0438 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438. \u0410\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/h2>\n<p>\u041f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u043d\u043e\u0441\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u00ab\u0423\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u043a\u0440\u0443\u0433\u043e\u0432 \u0432 \u043a\u0440\u0443\u0433\u00bb. \u0415\u0451 \u0446\u0435\u043b\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u043a\u0440\u0443\u0433\u043e\u0432 \u0432 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0438\u0439\u00a0\u043a\u0440\u0443\u0433. \u0420\u044f\u0434 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u0434\u0432\u0438\u043d\u0443\u043b\u0438 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u043e \u043d\u0435\u0439 \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043e\u043a, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e 20 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432, \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0438\u0437 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0442 1 \u0434\u043e 15 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434 \u043c\u043e\u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0435 \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e \u044d\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0443\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u2014 \u0442\u0430\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0437 <a href=\"https:\/\/ru.ruwiki.ru\/wiki\/%D0%A3%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%80%D1%83%D0%B3%D0%BE%D0%B2_%D0%B2_%D0%BA%D1%80%D1%83%D0%B3%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0420\u0443\u0432\u0438\u043a\u0438<\/a>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-m\/27\/x2\/-m27x2n4jfz10fsm5kjzc09ngfs.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/-m\/27\/x2\/-m27x2n4jfz10fsm5kjzc09ngfs.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/-m\/27\/x2\/-m27x2n4jfz10fsm5kjzc09ngfs.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u043c\u043e\u0438\u043c \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0432\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u2014 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435. \u0411\u0443\u0434\u0435\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0438\u0445 \u043f\u0440\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043a\u043e\u0434\u0430, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<p>C\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043e\u0442 3 \u0434\u043e 15 \u043a\u0440\u0443\u0433\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u043d\u043e <img decoding=\"async\" class=\"formula inline\" source=\"71,1\\%\" alt=\"71,1\\%\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/72\/72b\/72bb2fc011dfb24a914cd3cd783f5d02.svg\" width=\"48\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/72\/72b\/72bb2fc011dfb24a914cd3cd783f5d02.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/72\/72b\/72bb2fc011dfb24a914cd3cd783f5d02.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0442\u0432\u0435\u0442 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c.<\/p>\n<p>\u0421\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p>\n<blockquote>\n<p>\u0418\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 n \u043a\u0440\u0443\u0433\u043e\u0432 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 <em>r<\/em>. \u0422\u0430\u043a\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0440\u0443\u0433 \u2014 \u00ab\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u00bb, \u0440\u0430\u0434\u0438\u0443\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0432\u0435\u043d <em>R<\/em>. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c <em>n<\/em> \u043a\u0440\u0443\u0433\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0434\u0438\u0443\u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0431\u044b\u043b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c. \u041d\u0430\u0439\u0442\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f n \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432 \u0434\u043b\u044f <img decoding=\"async\" class=\"formula inline\" source=\"n = \\{1,3,5,7,9,11,13,15\\}\" alt=\"n = \\{1,3,5,7,9,11,13,15\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/57\/57c\/57ce2e8fe3e1d1f32b935fc59ba8af65.svg\" width=\"208\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/57\/57c\/57ce2e8fe3e1d1f32b935fc59ba8af65.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/57\/57c\/57ce2e8fe3e1d1f32b935fc59ba8af65.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u041f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u0430\u043a\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043d\u0430 <em>JavaScript<\/em>. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043e\u0431\u0449\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e <em>n<\/em>.<\/p>\n<h2>\u041c\u0435\u0442\u043e\u0434 \u043e\u0442\u0436\u0438\u0433\u0430.<\/h2>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0439 <em>\u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u0436\u0438\u0433\u0430<\/em>, \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u0447\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u00ab\u0447\u0430\u0441\u0442\u0438\u0446\u044b\u00bb \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0432\u0438\u0436\u0443\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u043e \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0430\u0442\u043e\u043c\u043e\u0432 \u043d\u0430\u0433\u0440\u0435\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u0430\u043b\u043b\u0430, \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u043d\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043d\u0435\u0440\u0433\u0438\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u0435\u0442\u0430\u043b\u043b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u044e\u0442, \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f, \u0438 \u043e\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0448\u0451\u0442\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \u0422\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0442\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u043e\u0434\u0431\u043e\u0440\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u043e\u0432. <em>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c<\/em> \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u043f\u0440\u0435\u0436\u0434\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043c\u0435\u043d\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b, \u0447\u0435\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u044d\u0442\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0430\u043a \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0445\u043e\u0442\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435\u043a\u0430\u044f \u00ab\u044f\u043c\u0430\u00bb, \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c <em>\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c<\/em> \u2014 \u0441\u0430\u043c\u043e\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043a \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u0440\u0443\u0433\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u0449\u0430\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0432\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u00ab\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e\u00bb \u0440\u0430\u0434\u0438\u0443\u0441\u0430 <em>R<\/em>, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 <em>R<\/em>. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0441\u043b\u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432\u043e\u043a\u0440\u0443\u0433, \u0442\u043e \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0432\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e <strong>\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439<\/strong> \u0440\u0430\u0434\u0438\u0443\u0441 <em>R<\/em>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/nd\/45\/7a\/nd457axknhkmgkc6gtsd-lmdd3m.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/nd\/45\/7a\/nd457axknhkmgkc6gtsd-lmdd3m.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/nd\/45\/7a\/nd457axknhkmgkc6gtsd-lmdd3m.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0427\u0430\u0441\u0442\u0438\u0446\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0435 \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0442\u0436\u0438\u0433\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0447\u0430\u0441\u0442\u0438\u0446\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e, \u043d\u043e \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e. \u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0444\u0430\u0437\u0435 \u0446\u0438\u043a\u043b\u0430 \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e, \u043f\u0440\u043e\u0445\u043e\u0434\u044f \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043e\u0431\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u0412\u0445\u043e\u0434\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u0444\u0430\u0437\u0443, \u0433\u0434\u0435 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043e\u043d\u0430 \u0438\u0449\u0435\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0435.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/cw\/uz\/iq\/cwuziqvghvbiizqf9r5gyqxemtg.gif\" width=\"350\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/cw\/uz\/iq\/cwuziqvghvbiizqf9r5gyqxemtg.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/cw\/uz\/iq\/cwuziqvghvbiizqf9r5gyqxemtg.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b.<\/h2>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0420\u0430\u0434\u0438\u0443\u0441 <em>r<\/em> \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<pre><code>unitRadius = 30 <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 30 \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0435. \u041f\u0440\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 1, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043a\u0440\u0443\u0433\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u0431\u044b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u044b. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 <em>R<\/em> \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<pre><code>containerRadius = unitRadius * Math.sqrt(n \/ 0.9) <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043a\u0440\u0443\u0433\u043e\u0432. \u041f\u043b\u043e\u0449\u0430\u0434\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0440\u0430\u0432\u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"\\pi r^2\" alt=\"\\pi r^2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/66\/666\/6666716ddb469e1a10b4dedf9a566dcb.svg\" width=\"24\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/66\/666\/6666716ddb469e1a10b4dedf9a566dcb.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/66\/666\/6666716ddb469e1a10b4dedf9a566dcb.svg 781w\" loading=\"lazy\" decode=\"async\"\/> , \u043f\u043b\u043e\u0449\u0430\u0434\u044c <em>n<\/em> \u0442\u0430\u043a\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432  \u2014  <img decoding=\"async\" class=\"formula inline\" source=\"n \\pi r^2\" alt=\"n \\pi r^2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfe\/cfe85b99f168b5eec9025f5fb4cf7f68.svg\" width=\"32\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfe\/cfe85b99f168b5eec9025f5fb4cf7f68.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfe\/cfe85b99f168b5eec9025f5fb4cf7f68.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0414\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u2014 <img decoding=\"async\" class=\"formula inline\" source=\"\\pi R^2\" alt=\"\\pi R^2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/906\/906688688b8b23ce8a20972fde98a4ad.svg\" width=\"24\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/906\/906688688b8b23ce8a20972fde98a4ad.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/906\/906688688b8b23ce8a20972fde98a4ad.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u043a\u0440\u0443\u0433\u043e\u0432 \u043a \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\u03c1 = \\frac{n \\pi r^2}{\\pi R^2} = n (\\frac{r}{R})^2 \u2248 0.9\" alt=\"\u03c1 = \\frac{n \\pi r^2}{\\pi R^2} = n (\\frac{r}{R})^2 \u2248 0.9\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e0\/e03\/e0315b03a0e9f12ce557f8a0303ce773.svg\" width=\"200\" height=\"40\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e0\/e03\/e0315b03a0e9f12ce557f8a0303ce773.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e0\/e03\/e0315b03a0e9f12ce557f8a0303ce773.svg 781w\" loading=\"lazy\" decode=\"async\"\/><img decoding=\"async\" class=\"formula\" source=\"\\frac{r}{R} \u2248 \\sqrt\\frac{0.9}{n}\" alt=\"\\frac{r}{R} \u2248 \\sqrt\\frac{0.9}{n}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6f\/6f5\/6f584083ce08171504516589ede366d1.svg\" width=\"88\" height=\"40\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6f\/6f5\/6f584083ce08171504516589ede366d1.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6f\/6f5\/6f584083ce08171504516589ede366d1.svg 781w\" loading=\"lazy\" decode=\"async\"\/><img decoding=\"async\" class=\"formula\" source=\"R \u2248 r \\sqrt\\frac{n}{0.9}\" alt=\"R \u2248 r \\sqrt\\frac{n}{0.9}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/860\/860d511d91c99265bcf994dac4f4d515.svg\" width=\"88\" height=\"40\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/860\/860d511d91c99265bcf994dac4f4d515.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/860\/860d511d91c99265bcf994dac4f4d515.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u042f \u0432\u0437\u044f\u043b\u0430 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"90\\%\" alt=\"90\\%\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e69\/e695a8421cc7f79ac872e765ffa31bd9.svg\" width=\"32\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e69\/e695a8421cc7f79ac872e765ffa31bd9.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e6\/e69\/e695a8421cc7f79ac872e765ffa31bd9.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u043a\u0440\u0443\u0433\u0438 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441 \u0434\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e.<\/p>\n<ul>\n<li>\n<p>\u041f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <em>R<\/em>. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 <em>R<\/em> \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<\/li>\n<\/ul>\n<pre><code>bestContainerRadius = Infinity <\/code><\/pre>\n<ul>\n<li>\n<p><em>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430<\/em> \u2014 \u0441 \u043d\u0435\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<pre><code>let temperature = 2.0; <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0447\u0430\u0441\u0442\u0438\u0446.<\/p>\n<ul>\n<li>\n<p><em>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u044f<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439. \u0422\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0431\u0440\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 1. \u0427\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a 1, \u0442\u0435\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0438\u0434\u0451\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<pre><code>coolingRate = 0.9997 <\/code><\/pre>\n<ul>\n<li>\n<p>\u041f\u043e\u0442\u043e\u043b\u043e\u043a \u0434\u043b\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 5000 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0436\u0451\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0442 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0442\u043e\u0440\u043c\u043e\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 <em>n<\/em>, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0431\u043e\u043b\u0435\u0435 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u0432\u043e\u0434\u043e\u043a, \u043f\u043e\u043c\u043e\u0433\u0430\u044f \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0422\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0442\u0435\u0445 <em>n<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e 5000.<\/p>\n<\/li>\n<\/ul>\n<pre><code>maxIterations = 5000 <\/code><\/pre>\n<p>\u0417\u0430 5000 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043e\u0442 2.0 \u0441\u043f\u0430\u0434\u0451\u0442 \u0434\u043e <img decoding=\"async\" class=\"formula inline\" source=\"2.0 \\times 0.9997^{5000} \\approx 0.446\" alt=\"2.0 \\times 0.9997^{5000} \\approx 0.446\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/16\/168\/168383a7baa5e6f0fe7dc42282842f57.svg\" width=\"184\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/16\/168\/168383a7baa5e6f0fe7dc42282842f57.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/16\/168\/168383a7baa5e6f0fe7dc42282842f57.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2014 \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u0437\u043a\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u0442\u0436\u0438\u0433\u0430. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0435 \u043a 0, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0438\u0437\u043a\u0438\u0445 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430\u0445 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b, \u0438 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0432\u043f\u043b\u043e\u0442\u043d\u0443\u044e \u0434\u043e 0.<\/p>\n<h2>\u041d\u0430\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/h2>\n<p>\u0412 \u0440\u043e\u043b\u0438 \u0447\u0430\u0441\u0442\u0438\u0446\u044b, \u043d\u0430\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a\u0440\u0443\u0433. \u041a\u043b\u0430\u0441\u0441 Ball \u0437\u0430\u0434\u0430\u0441\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0438\u0446\u044b: \u0435\u0451 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0440\u0430\u0434\u0438\u0443\u0441 \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c velocity, \u0440\u0430\u0432\u043d\u0443\u044e 0.<\/p>\n<pre><code>constructor(x, y, radius) {   this.r = radius;   this.velocity = { x: 0, y: 0 };   this.position = { x: x, y: y }; } <\/code><\/pre>\n<p>\u0421\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u043f\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <em>force<\/em>. \u0414\u043b\u0438\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u041f\u0438\u0444\u0430\u0433\u043e\u0440\u0430. \u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 1, \u043e\u043d\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<pre><code>applyForce(force) {     this.velocity.x += force.x;     this.velocity.y += force.y;     const speed = Math.sqrt(this.velocity.x * this.velocity.x + this.velocity.y * this.velocity.y);     if (speed &gt; 1.0) {         this.velocity.x = (this.velocity.x \/ speed) * 1.0;         this.velocity.y = (this.velocity.y \/ speed) * 1.0;     } } <\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u043a\u0440\u0443\u0433\u043e\u0432. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <em>deterministicRandom<\/em> \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0448\u0443\u043c <em>noise<\/em> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0428\u0443\u043c \u0434\u0430\u0451\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u043e\u043b\u044e \u043a\u0440\u0443\u0433\u0430\u043c \u0432 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438, \u0438\u0437\u044a\u044f\u0441\u043d\u044f\u044f\u0441\u044c \u0444\u0438\u0433\u0443\u0440\u0430\u043b\u044c\u043d\u043e. \u0422\u0430\u043a \u043a\u0440\u0443\u0433\u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u044e\u0442 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u043d\u0438\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430\u0445.<br \/> \u041f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u0421\u0442\u043e\u043f, \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c? \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442. \u0412 \u0444\u0438\u0437\u0438\u043a\u0435 \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u043c\u044b \u0431\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\text{x}_{t+1} = \\text{x}_t + \\text{$v$} \\cdot \\Delta t\" alt=\"\\text{x}_{t+1} = \\text{x}_t + \\text{$v$} \\cdot \\Delta t\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e9\/e9d\/e9d7957f13b556e0e608922e4f885f98.svg\" width=\"136\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e9\/e9d\/e9d7957f13b556e0e608922e4f885f98.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e9\/e9d\/e9d7957f13b556e0e608922e4f885f98.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043b\u043e\u0436\u0438\u043b\u0438 \u0431\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0430\u0441\u044c \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u0437\u0430 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"\\Delta t\" alt=\"\\Delta t\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5a\/5a7\/5a72f1304af0783657605aed0e38201a.svg\" width=\"16\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5a\/5a7\/5a72f1304af0783657605aed0e38201a.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5a\/5a7\/5a72f1304af0783657605aed0e38201a.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, c\u043e\u043a\u0440\u0430\u0442\u0438\u0432 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u0435\u0448\u0430\u044e\u0449\u0438\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u0448\u0430\u0433\u0430\u043c\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"\\Delta t\" alt=\"\\Delta t\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5a\/5a7\/5a72f1304af0783657605aed0e38201a.svg\" width=\"16\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5a\/5a7\/5a72f1304af0783657605aed0e38201a.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5a\/5a7\/5a72f1304af0783657605aed0e38201a.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b \u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442 \u0437\u0430 1, \u0447\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u0430\u043a\u0438 \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/p>\n<pre><code>update(seed, iter) {     const noiseX = (deterministicRandom(seed, this.position.x * 1000 + iter) - 0.5) * 1.2; const noiseY = (deterministicRandom(seed, this.position.y * 1000 + iter + 1000) - 0.5) * 1.2;     this.velocity.x += noiseX;     this.velocity.y += noiseY;     this.position.x += this.velocity.x;     this.position.y += this.velocity.y;     this.velocity.x *= 0.98;     this.velocity.y *= 0.98; } <\/code><\/pre>\n<ul>\n<li>\n<p>1.2 \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0448\u0443\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>0.98 \u2014 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0449\u0438\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0444\u0438\u0437\u0438\u043a\u0438.<\/h2>\n<p>\u0421 <em>\u043a\u043b\u0430\u0441\u0441\u043e\u043c Ball<\/em> \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043a\u043b\u0430\u0441\u0441\u0443 Packer, \u0442\u043e \u0435\u0441\u0442\u044c \u043a \u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u043e\u043c\u0443 <em>\u043c\u0435\u0442\u043e\u0434\u0443 \u043e\u0442\u0436\u0438\u0433\u0430<\/em>. \u0417\u0434\u0435\u0441\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0448\u0443\u043c\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0430 \u0440\u0430\u043d\u0435\u0435. \u0414\u043b\u044f \u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u2014 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>seed<\/em> \u2014 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044f\u0441\u044c \u043d\u0435\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code>seed = 12345 * n_circles <\/code><\/pre>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0443\u043c \u0431\u0443\u0434\u0435\u043c \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 0 \u0438 1, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0443\u0441\u043e\u043c \u043a\u0430\u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u0435\u043c.<\/p>\n<pre><code>deterministicRandom(seed, index) {     const x = Math.sin(seed + index * 1000) * 10000;     return x - Math.floor(x); } <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u043a\u0440\u0443\u0433\u043e\u0432. \u041f\u0440\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 <em>\u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446<\/em>. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043c\u0438 \u043a\u0440\u0443\u0433\u043e\u0432 \u0441 \u0441\u0443\u043c\u043c\u043e\u0439 \u0438\u0445 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u0432. \u041f\u0440\u0438 \u0441\u043e\u043f\u0440\u0438\u043a\u043e\u0441\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043a\u0440\u0443\u0433\u043e\u0432 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e \u0434\u0432\u0443\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u0430\u043c. \u0422\u0430\u043a\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043d\u043e\u0432\u0430 \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u043e\u0439.<\/p>\n<pre><code>hasOverlaps(balls) {     for (let i = 0; i &lt; balls.length; i++) {         for (let j = i + 1; j &lt; balls.length; j++) {             const dx = balls[i].position.x - balls[j].position.x;             const dy = balls[i].position.y - balls[j].position.y;             const d = Math.sqrt(dx * dx + dy * dy);             if (d &lt; balls[i].r + balls[j].r &amp;&amp; d &gt; 0) {                 return true;             }         }     }     return false; } <\/code><\/pre>\n<h2>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f.<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <em>update()<\/em>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e, \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0431\u0443\u0434\u0435\u043c \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0449\u0438\u0442\u044c \u0441 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438.<\/p>\n<pre><code>this.iter++; <\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u043b\u0430\u0433, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043a\u0440\u0443\u0433\u043e\u0432. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0431\u044b\u043b\u0438, \u0442\u043e \u0444\u043b\u0430\u0433 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 <em>true<\/em>.<\/p>\n<pre><code>this.hasCollisions = false <\/code><\/pre>\n<p>\u0421\u0431\u0440\u043e\u0441\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u043e 0 \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e.<\/p>\n<pre><code>this.maxVelocity = 0 <\/code><\/pre>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c \u0432 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446 \u0448\u0443\u043c <em>noise<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 2000 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u0445, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u043e\u0442\u0436\u0438\u0433\u0430. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0448\u0443\u043c\u0430 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f <em>deterministicRandom<\/em> \u043f\u043e \u043e\u0441\u044f\u043c <em>x<\/em> \u0438 <em>y<\/em>.<\/p>\n<pre><code>if (this.iter &lt; 2000) {     for (let ball of this.balls) {         const noiseX = (this.deterministicRandom(this.seed, ball.position.x * 1000 + this.iter) - 0.5) * 0.6;         const noiseY = (this.deterministicRandom(this.seed, ball.position.y * 1000 + this.iter + 1000) - 0.5) * 0.6;         ball.position.x += noiseX;         ball.position.y += noiseY;     } } <\/code><\/pre>\n<h2>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446.<\/h2>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u044b\u0445\u043e\u0434\u0430 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <em>d<\/em> \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043a\u0440\u0443\u0433\u0430 \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u0442\u0430\u043a \u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u044b. \u0421\u0443\u043c\u043c\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u0447\u0430\u0441\u0442\u0438\u0446\u044b <em>d<\/em> \u0438 \u0435\u0451 \u0440\u0430\u0434\u0438\u0443\u0441\u0430 <em>r<\/em> \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 <em>R<\/em>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0g\/nh\/da\/0gnhdavnoohjp4b64ksc07jmqow.png\" width=\"350\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/0g\/nh\/da\/0gnhdavnoohjp4b64ksc07jmqow.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/0g\/nh\/da\/0gnhdavnoohjp4b64ksc07jmqow.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0435\u0451 \u0432\u0435\u043a\u0442\u043e\u0440. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>norm<\/em> \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0446\u0435\u043d\u0442\u0440\u0430. \u042d\u0442\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0451\u043c \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u043d\u0430 <em>d<\/em>.<\/p>\n<pre><code>const d = Math.sqrt(ball.position.x * ball.position.x + ball.position.y * ball.position.y); <\/code><\/pre>\n<p>`<br \/> \u0414\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0434\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446\u044b, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 1:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\sqrt{(\\frac{x}{d})^2 + (\\frac{y}{d})^2} = \\sqrt{\\frac{x^2}{d^2} + \\frac{y^2}{d^2}} = \\sqrt{\\frac{x^2 + y^2}{d^2}} = \\sqrt{\\frac{d^2}{d^2}} = \\sqrt{1} = 1 \" alt=\"\\sqrt{(\\frac{x}{d})^2 + (\\frac{y}{d})^2} = \\sqrt{\\frac{x^2}{d^2} + \\frac{y^2}{d^2}} = \\sqrt{\\frac{x^2 + y^2}{d^2}} = \\sqrt{\\frac{d^2}{d^2}} = \\sqrt{1} = 1 \" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/402\/402e430d1da0584f5f174dffe2739c59.svg\" width=\"488\" height=\"40\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/402\/402e430d1da0584f5f174dffe2739c59.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/402\/402e430d1da0584f5f174dffe2739c59.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0415\u0441\u043b\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"d = 0\" alt=\"d = 0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/75\/750\/7508699004dbe407175c6b5a7fff4da2.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/75\/750\/7508699004dbe407175c6b5a7fff4da2.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/75\/750\/7508699004dbe407175c6b5a7fff4da2.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0442\u043e \u0435\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 0.01, \u0443\u0431\u0438\u0440\u0430\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 0. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u043f\u043e\u0440\u0438\u0442\u044c, \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044f, \u0447\u0442\u043e <em>\u00ab\u0447\u0430\u0441\u0442\u0438\u0446\u0430, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0439\u0442\u0438 \u0437\u0430 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0451 \u0440\u0430\u0434\u0438\u0443\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u00bb<\/em>. \u0421 \u044d\u0442\u0438\u043c \u0442\u0440\u0443\u0434\u043d\u043e \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u044c\u0441\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043a\u0430\u0437\u0430\u0432\u0448\u0438\u0441\u044c \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043f\u0440\u043e\u0441\u0442\u043e-\u043d\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e, \u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0432\u0435\u043a\u0442\u043e\u0440? \u041f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <em>norm<\/em> \u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"R-r\" alt=\"R-r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c\u044e 0.01. \u0422\u0430\u043a \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u0434\u043e \u0434\u043b\u0438\u043d\u044b <img decoding=\"async\" class=\"formula inline\" source=\"R-r\" alt=\"R-r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg 781w\" loading=\"lazy\" decode=\"async\"\/> , \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442 \u0447\u0430\u0441\u0442\u0438\u0446\u0443 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"R-r\" alt=\"R-r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg 781w\" loading=\"lazy\" decode=\"async\"\/>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tl\/6f\/4t\/tl6f4tb_ozood8kzu1q6phkp38c.png\" width=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/tl\/6f\/4t\/tl6f4tb_ozood8kzu1q6phkp38c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/tl\/6f\/4t\/tl6f4tb_ozood8kzu1q6phkp38c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u0438 <em>ball.position<\/em> \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 <em>ball.velocity<\/em> \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430. \u0412\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0438\u0437 \u0446\u0435\u043d\u0442\u0440\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u0438\u0446\u044b <img decoding=\"async\" class=\"formula inline\" source=\"(x, y)\" alt=\"(x, y)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/49\/49b\/49b311da0ed4baee4da4dd66e37ef59c.svg\" width=\"40\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/49\/49b\/49b311da0ed4baee4da4dd66e37ef59c.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/49\/49b\/49b311da0ed4baee4da4dd66e37ef59c.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0434\u043b\u0438\u043d\u0443 <img decoding=\"async\" class=\"formula inline\" source=\"d=\\sqrt{x^2+y^2}\" alt=\"d=\\sqrt{x^2+y^2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ea\/ea0\/ea09814b8927c0deb22ce8640be1095b.svg\" width=\"104\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ea\/ea0\/ea09814b8927c0deb22ce8640be1095b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ea\/ea0\/ea09814b8927c0deb22ce8640be1095b.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <em>norm<\/em> \u043c\u044b \u043c\u0435\u043d\u044f\u0435\u043c \u0434\u043b\u0438\u043d\u0443 <em>ball.positon<\/em> \u0434\u043e \u043d\u0443\u0436\u043d\u043e\u0439 \u043d\u0430\u043c \u0434\u043b\u0438\u043d\u044b <img decoding=\"async\" class=\"formula inline\" source=\"R-r\" alt=\"R-r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bd\/bdf\/bdf6bbfa906dbc2d729e9363f5e4c98b.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0412\u0435\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0446\u0435\u043d\u0442\u0440\u0430 \u0441\u0430\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u0438\u0446\u044b. \u0415\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u0438\u0446\u044b, \u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0435\u0451 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044f \u0441\u0430\u043c\u0443 \u0447\u0430\u0441\u0442\u0438\u0446\u0443, \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0451 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0443\u043c\u043d\u043e\u0436\u0438\u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0441\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 -0.8, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0440\u0430\u0432\u043d\u0443\u044e <img decoding=\"async\" class=\"formula inline\" source=\"80\\%\" alt=\"80\\%\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a88\/a886218e38f1e1b8be1caa0ba288de26.svg\" width=\"32\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a88\/a886218e38f1e1b8be1caa0ba288de26.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a88\/a886218e38f1e1b8be1caa0ba288de26.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044b.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<pre><code>if (d &gt; this.containerRadius - ball.r) {     const norm = {         x: ball.position.x \/ (d || 0.01),         y: ball.position.y \/ (d || 0.01)     };     ball.position.x = norm.x * (this.containerRadius - ball.r - 0.01);     ball.position.y = norm.y * (this.containerRadius - ball.r - 0.01);     ball.velocity.x *= -0.8;     ball.velocity.y *= -0.8;     this.hasCollisions = true; } <\/code><\/pre>\n<h2>\u0421\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446.<\/h2>\n<p>\u041e\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0438\u0445 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044e \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0446\u0438\u043a\u043b\u043e\u0432 \u2014 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0447\u0430\u0441\u0442\u0438\u0446, \u043a\u0430\u0436\u0434\u0443\u044e \u0441 \u043a\u0430\u0436\u0434\u043e\u0439. \u0412\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0446\u0438\u043a\u043b\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0447\u0430\u0441\u0442\u0438\u0446\u0443 \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c <em>i<\/em>. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0441 \u0441\u0430\u043c\u043e\u0439 \u0441\u043e\u0431\u043e\u0439, \u043d\u0430\u0447\u043d\u0451\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c <em>j<\/em> \u043d\u0430 1 \u043e\u0442 <em>i<\/em>. \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0430\u0440\u044b \u0438\u0437 \u043d\u043e\u043c\u0435\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1-2 \u0438 2-1.<\/p>\n<p>\u0412\u044b\u0431\u0435\u0440\u0435\u043c \u0447\u0430\u0441\u0442\u0438\u0446\u044b <em>i<\/em> \u0438 <em>j<\/em>, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<br \/> <img decoding=\"async\" class=\"formula inline\" source=\"d = \\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}\" alt=\"d = \\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9f\/9fd\/9fdfd40b03e4cf26b60814cde594b8f9.svg\" width=\"232\" height=\"32\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9f\/9fd\/9fdfd40b03e4cf26b60814cde594b8f9.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9f\/9fd\/9fdfd40b03e4cf26b60814cde594b8f9.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<pre><code>for (let i = 0; i &lt; this.balls.length; i++) {     for (let j = i + 1; j &lt; this.balls.length; j++) {         const ball1 = this.balls[i];         const ball2 = this.balls[j];         const dx = ball1.position.x - ball2.position.x;         const dy = ball1.position.y - ball2.position.y;         const d = Math.sqrt(dx * dx + dy * dy); <\/code><\/pre>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u043c \u0435\u0433\u043e \u0441 \u0441\u0443\u043c\u043c\u043e\u0439 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u0432 \u0447\u0430\u0441\u0442\u0438\u0446 \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043c \u0444\u0430\u043a\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <\/p>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"d&gt;0\" alt=\"d&gt;0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1d\/1d1\/1d1524e69d13cd77795b6d20f2fc2546.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1d\/1d1\/1d1524e69d13cd77795b6d20f2fc2546.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1d\/1d1\/1d1524e69d13cd77795b6d20f2fc2546.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 0 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 <em>force<\/em>, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446. \u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c <em>norm<\/em>, \u0434\u043b\u0438\u043d\u0430 <em>force<\/em> \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 1, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043e \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u0434\u043b\u0438\u043d\u044b.<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\sqrt{(\\frac{x_1-x_2}{d})^2 + (\\frac{y_1-y_2}{d})^2} = \\sqrt{\\frac{(x_1 - x_2)^2+(y_1-y_2)^2}{d^2}} = \\sqrt{\\frac{d^2}{d^2}} = \\sqrt{1} = 1 \" alt=\"\\sqrt{(\\frac{x_1-x_2}{d})^2 + (\\frac{y_1-y_2}{d})^2} = \\sqrt{\\frac{(x_1 - x_2)^2+(y_1-y_2)^2}{d^2}} = \\sqrt{\\frac{d^2}{d^2}} = \\sqrt{1} = 1 \" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7d\/7d2\/7d2e28befee3800033433056b14890e2.svg\" width=\"592\" height=\"48\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7d\/7d2\/7d2e28befee3800033433056b14890e2.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7d\/7d2\/7d2e28befee3800033433056b14890e2.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u0439. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>force<\/em> \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u043e\u0431\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430. \u041e\u0434\u043d\u0443 \u0447\u0430\u0441\u0442\u0438\u0446\u0443 \u0441\u0434\u0432\u0438\u043d\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>force<\/em>, \u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u2014 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f <em>force<\/em>.<\/p>\n<p>\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u0440\u0443\u0433\u0438 \u0437\u0430\u0445\u043e\u0434\u044f\u0442 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c <em>overlap<\/em>. \u041d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <em>overlap<\/em> \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043a\u0440\u0443\u0433\u0438, \u043d\u043e \u043d\u0435 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u0430\u0441\u0430\u043d\u0438\u044f, \u0430 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435. \u0420\u043e\u0432\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438: \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u043e\u0442\u043e\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u0430\u0441\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u0440\u0435\u0437\u043a\u0438\u0439 \u0441\u043a\u0430\u0447\u043e\u043a \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043a\u0430\u0441\u0430\u043d\u0438\u044f, \u043d\u0430\u043c \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sw\/2y\/e5\/sw2ye51ojul75ritz9cwqlrxrmq.png\" width=\"500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/sw\/2y\/e5\/sw2ye51ojul75ritz9cwqlrxrmq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/sw\/2y\/e5\/sw2ye51ojul75ritz9cwqlrxrmq.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<pre><code>const minDist = ball1.r + ball2.r; if (d &lt; minDist &amp;&amp; d &gt; 0) { \u00a0\u00a0\u00a0\u00a0this.hasCollisions = true; \u00a0\u00a0\u00a0\u00a0const overlap = minDist - d;     const force = {         x: dx \/ (d || 0.01),         y: dy \/ (d || 0.01)     };     ball1.position.x += force.x * overlap * 0.8;     ball1.position.y += force.y * overlap * 0.8;     ball2.position.x -= force.x * overlap * 0.8;     ball2.position.y -= force.y * overlap * 0.8; <\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0438\u043b\u0443 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u044f <em>forceMagnitude<\/em>. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0433\u0438 \u043d\u0430\u043b\u043e\u0436\u0438\u043b\u0438\u0441\u044c \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0442 <em>overlap<\/em>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 \u044d\u0442\u043e \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e: \u0447\u0435\u043c \u0432\u044b\u0448\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043f\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443, \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044f \u0435\u0433\u043e. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0438\u043b\u0430 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u0438\u0446\u0430\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0442\u043b\u0435\u0442\u0435\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u042d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<pre><code>const forceMagnitude = overlap * 5.0 * (1.0 + temperature); ball1.applyForce({     x: force.x * forceMagnitude,     y: force.y * forceMagnitude }); ball2.applyForce({     x: -force.x * forceMagnitude,     y: -force.y * forceMagnitude }); <\/code><\/pre>\n<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0446\u0438\u043a\u043b, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u0422\u0430\u043a \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f.<\/p>\n<pre><code>for (let ball of this.balls) {     ball.update(this.seed + this.iter, this.iter); } temperature *= coolingRate; <\/code><\/pre>\n<h2>\u041a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/h2>\n<p>\u041c\u0435\u0442\u043e\u0434 <em>finalizePositions()<\/em> \u2014 \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u0442\u0430\u043f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0412\u0432\u0435\u0434\u0451\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<pre><code>let adjustments = 0; <\/code><\/pre>\n<p>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0433, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439, \u043a\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 <em>overlap<\/em>.<\/p>\n<pre><code>let step = 0.5; <\/code><\/pre>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c \u0447\u0438\u0441\u043b\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<pre><code>const maxAdjustments = 3000; <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0438 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0448\u0430\u0433 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 0.999 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0448\u0430\u0433\u043e\u043c 0.1, \u043f\u043e\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043e.<\/p>\n<pre><code>if (!hasOverlap) break;     adjustments++;     step = Math.max(0.1, step * 0.999); <\/code><\/pre>\n<h2>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430.<\/h2>\n<p>\u0418\u0442\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0431\u0435\u0437 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cz\/y1\/t0\/czy1t0a25yres6rpp9op0heodom.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/cz\/y1\/t0\/czy1t0a25yres6rpp9op0heodom.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/cz\/y1\/t0\/czy1t0a25yres6rpp9op0heodom.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u043e\u043a \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0434\u043b\u044f <img decoding=\"async\" class=\"formula inline\" source=\"n=9\" alt=\"n=9\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f6\/f60\/f600ce0b7252deefc0ded28f11e245cd.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f6\/f60\/f600ce0b7252deefc0ded28f11e245cd.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f6\/f60\/f600ce0b7252deefc0ded28f11e245cd.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"n=13\" alt=\"n=13\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f9\/f96\/f9641e656a78e90db0f0bec55e646263.svg\" width=\"48\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f9\/f96\/f9641e656a78e90db0f0bec55e646263.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f9\/f96\/f9641e656a78e90db0f0bec55e646263.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043c\u0430\u0433\u043d\u0438\u0442\u043d\u044b\u0435 \u0431\u0443\u0440\u0438.<br \/> \u0414\u043b\u044f <img decoding=\"async\" class=\"formula inline\" source=\"n=9\" alt=\"n=9\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f6\/f60\/f600ce0b7252deefc0ded28f11e245cd.svg\" width=\"40\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f6\/f60\/f600ce0b7252deefc0ded28f11e245cd.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f6\/f60\/f600ce0b7252deefc0ded28f11e245cd.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043a\u0440\u0443\u0433 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0440\u0443\u0433\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"3.613r-r=2.613r\" alt=\"3.613r-r=2.613r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a2\/a25\/a25f642839eec4f0590dc3fd61c34030.svg\" width=\"152\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a2\/a25\/a25f642839eec4f0590dc3fd61c34030.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a2\/a25\/a25f642839eec4f0590dc3fd61c34030.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0437 <a href=\"https:\/\/ru.ruwiki.ru\/wiki\/%D0%A3%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%80%D1%83%D0%B3%D0%BE%D0%B2_%D0%B2_%D0%BA%D1%80%D1%83%D0%B3%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0420\u0443\u0432\u0438\u043a\u0438<\/a>.<\/p>\n<p>\u041f\u043e\u043b\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"360\u00b0\" alt=\"360\u00b0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/15\/15d\/15daed58bf0d6e6555d92f136939b677.svg\" width=\"32\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/15\/15d\/15daed58bf0d6e6555d92f136939b677.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/15\/15d\/15daed58bf0d6e6555d92f136939b677.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0442\u043e \u0435\u0441\u0442\u044c <img decoding=\"async\" class=\"formula inline\" source=\"2\\pi\" alt=\"2\\pi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c3\/c31\/c3198a6dbef629ca31403b4ccdff3fc7.svg\" width=\"16\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c3\/c31\/c3198a6dbef629ca31403b4ccdff3fc7.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c3\/c31\/c3198a6dbef629ca31403b4ccdff3fc7.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0440\u0430\u0434\u0438\u0430\u043d, \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043d\u0430 \u043d\u0435\u0439 8-\u043c\u0438 \u043a\u0440\u0443\u0433\u043e\u0432 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0443\u0433\u043e\u043b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u043a\u0440\u0443\u0433\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d<img decoding=\"async\" class=\"formula inline\" source=\"\\frac{2\\pi}{8}=\\frac{\\pi}{4}\" alt=\"\\frac{2\\pi}{8}=\\frac{\\pi}{4}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c5\/c54\/c5437e37636b7b6f687090d8dad938ef.svg\" width=\"64\" height=\"32\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c5\/c54\/c5437e37636b7b6f687090d8dad938ef.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c5\/c54\/c5437e37636b7b6f687090d8dad938ef.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0430 \u043a\u0430\u0436\u0434\u044b\u0439 <em>i<\/em>-\u044b\u0439 \u043a\u0440\u0443\u0433 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u043f\u043e\u0434 \u0443\u0433\u043b\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"\\frac{\\pi i}{4}\" alt=\"\\frac{\\pi i}{4}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8b\/8b3\/8b3040d9b57761c9d9d1916e5bf3fca3.svg\" width=\"24\" height=\"32\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8b\/8b3\/8b3040d9b57761c9d9d1916e5bf3fca3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8b\/8b3\/8b3040d9b57761c9d9d1916e5bf3fca3.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0433\u043b\u0430 \u0438 \u0440\u0430\u0434\u0438\u0443\u0441\u0430, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0438\u0437 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u0432 \u043f\u043e\u043b\u044f\u0440\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u044b:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\begin{cases}x = r\u22c5cos\u03c6\\\\y = r\u22c5sin\u03c6\\end{cases}\" alt=\"\\begin{cases}x = r\u22c5cos\u03c6\\\\y = r\u22c5sin\u03c6\\end{cases}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/08\/082\/08212f6ced1aa23f48815ce742700067.svg\" width=\"104\" height=\"40\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/08\/082\/08212f6ced1aa23f48815ce742700067.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/08\/082\/08212f6ced1aa23f48815ce742700067.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <em>r<\/em> \u2014 \u044d\u0442\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e \u043f\u043e\u043b\u044e\u0441\u0430, \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u044d\u0442\u043e \u043d\u0435 <em>r<\/em>, \u0430 <img decoding=\"async\" class=\"formula inline\" source=\"2.613r\" alt=\"2.613r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/89\/899\/89966540f603b3dd50055631134fd096.svg\" width=\"48\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/89\/899\/89966540f603b3dd50055631134fd096.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/89\/899\/89966540f603b3dd50055631134fd096.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0422\u043e\u0433\u0434\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0440\u0443\u0433\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\begin{cases}x = 2.613r\u22c5cos\\frac{\\pi i}{4} \\\\ y = 2.613r\u22c5sin\\frac{\\pi i}{4}\\end{cases}\" alt=\"\\begin{cases}x = 2.613r\u22c5cos\\frac{\\pi i}{4} \\\\ y = 2.613r\u22c5sin\\frac{\\pi i}{4}\\end{cases}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9a\/9a6\/9a6cc6e665bbcc22d08db3ac925a436a.svg\" width=\"152\" height=\"40\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9a\/9a6\/9a6cc6e665bbcc22d08db3ac925a436a.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9a\/9a6\/9a6cc6e665bbcc22d08db3ac925a436a.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<pre><code>createSpecialConfiguration(n) {     if (n === 9) {         let newBalls = [];         newBalls.push(new Ball(0, 0, unitRadius));         const outerRadius = unitRadius * 2.613;         for (let i = 0; i &lt; 8; i++) {             const angle = (i * Math.PI) \/ 4;             const x = Math.cos(angle) * outerRadius;             const y = Math.sin(angle) * outerRadius;             newBalls.push(new Ball(x, y, unitRadius));         }         return newBalls;     }  } <\/code><\/pre>\n<p>\u0414\u043b\u044f <img decoding=\"async\" class=\"formula inline\" source=\"n=13\" alt=\"n=13\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f9\/f96\/f9641e656a78e90db0f0bec55e646263.svg\" width=\"48\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f9\/f96\/f9641e656a78e90db0f0bec55e646263.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f9\/f96\/f9641e656a78e90db0f0bec55e646263.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e: 3 \u043a\u0440\u0443\u0433\u0430 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"4.236r - r = 3.236r\" alt=\"4.236r - r = 3.236r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/78\/78b\/78b23e98317d8d5c0e464c4a2b824522.svg\" width=\"152\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/78\/78b\/78b23e98317d8d5c0e464c4a2b824522.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/78\/78b\/78b23e98317d8d5c0e464c4a2b824522.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0426\u0435\u043d\u0442\u0440\u044b 3-\u0445 \u043a\u0440\u0443\u0433\u043e\u0432 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0440\u0430\u0432\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u0430 \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0433\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u043c\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043c 3 \u043d\u0430\u0448\u0438\u0445 \u043a\u0440\u0443\u0433\u0430. \u0420\u0430\u0434\u0438\u0443\u0441 \u0442\u0430\u043a\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"R = \\frac{a}{\\sqrt3}\" alt=\"R = \\frac{a}{\\sqrt3}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/34\/344\/3445294de8999c105304d1fb8a5482ee.svg\" width=\"64\" height=\"32\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/34\/344\/3445294de8999c105304d1fb8a5482ee.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/34\/344\/3445294de8999c105304d1fb8a5482ee.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0433\u0434\u0435 <em>a<\/em> \u2014 \u044d\u0442\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0442\u043e \u0435\u0441\u0442\u044c <em>2r<\/em>. \u0422\u043e\u0433\u0434\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"R = \\frac{2r}{\\sqrt3}=1.1547r\" alt=\"R = \\frac{2r}{\\sqrt3}=1.1547r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ec\/ec2\/ec2548fb022b395c68c022b2270973e4.svg\" width=\"152\" height=\"40\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ec\/ec2\/ec2548fb022b395c68c022b2270973e4.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ec\/ec2\/ec2548fb022b395c68c022b2270973e4.svg 781w\" loading=\"lazy\" decode=\"async\"\/> . \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"\\frac{\\pi}{6}\" alt=\"\\frac{\\pi}{6}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b78\/b789bd6694a7bfd50ff61e3564310686.svg\" width=\"16\" height=\"32\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b78\/b789bd6694a7bfd50ff61e3564310686.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b78\/b789bd6694a7bfd50ff61e3564310686.svg 781w\" loading=\"lazy\" decode=\"async\"\/>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vn\/1z\/jm\/vn1zjmxbf0txtkghk3bjpobs4-e.png\" width=\"500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/vn\/1z\/jm\/vn1zjmxbf0txtkghk3bjpobs4-e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/vn\/1z\/jm\/vn1zjmxbf0txtkghk3bjpobs4-e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<pre><code>else if (n === 13) {     const outerCount = n - 3;     const innerCount = 3;     const outerRadius = unitRadius * 3.236;     const innerRadius = unitRadius * 1.1547;     let newBalls = [];     for (let i = 0; i &lt; outerCount; i++) {         const angle = (i * 2 * Math.PI) \/ outerCount;         const x = Math.cos(angle) * outerRadius;         const y = Math.sin(angle) * outerRadius;         newBalls.push(new Ball(x, y, unitRadius));     }     for (let i = 0; i &lt; innerCount; i++) {         const angle = (i * 2 * Math.PI) \/ innerCount + Math.PI\/6;         const x = Math.cos(angle) * innerRadius;         const y = Math.sin(angle) * innerRadius;         newBalls.push(new Ball(x, y, unitRadius));     }     return newBalls; } return []; <\/code><\/pre>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u043f\u0435\u0440\u044c.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vb\/vx\/th\/vbvxth5hp3srojvf81hwyfx-cdy.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/vb\/vx\/th\/vbvxth5hp3srojvf81hwyfx-cdy.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/vb\/vx\/th\/vbvxth5hp3srojvf81hwyfx-cdy.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0441\u0451 \u0441\u043e\u0432\u043f\u0430\u043b\u043e, \u0437\u043d\u0430\u0447\u0438\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0433\u043e\u0442\u043e\u0432, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0443\u043c\u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443.<\/p>\n<h2>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430.<\/h2>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <em>drawFlowers(n)<\/em> \u0431\u0435\u0440\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b <em>Packer<\/em>, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432, \u0438 \u0440\u0438\u0441\u0443\u0435\u0442 \u0438\u0445 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <em>.svg<\/em>, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0444\u043e\u0440\u043c\u0430 \u00ab\u043a\u0440\u0443\u0433\u00bb, \u0442\u043e \u0432 \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u0443\u044e \u0432 <em>Packer<\/em> \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0443 \u043a\u0440\u0443\u0433\u043e\u0432.<\/p>\n<pre><code>svg.innerHTML = ''; if (currentShapeIndex !== 0) return; const packer = new Packer(n); <\/code><\/pre>\n<p>\u0428\u0438\u0440\u0438\u043d\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u043a\u0430\u043a 2<em>bestContainerRadius<\/em>. \u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0448\u0438\u0440\u0438\u043d\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0443\u044e <img decoding=\"async\" class=\"formula inline\" source=\"70\\%\" alt=\"70\\%\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f8\/f89\/f893530236daafffe62e42b85c0f980f.svg\" width=\"32\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f8\/f89\/f893530236daafffe62e42b85c0f980f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f8\/f89\/f893530236daafffe62e42b85c0f980f.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0448\u0438\u0440\u0438\u043d\u044b \u044d\u043a\u0440\u0430\u043d\u0430, \u0430 \u0432\u044b\u0441\u043e\u0442\u0443 \u2014 <img decoding=\"async\" class=\"formula inline\" source=\"80\\%\" alt=\"80\\%\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a88\/a886218e38f1e1b8be1caa0ba288de26.svg\" width=\"32\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a88\/a886218e38f1e1b8be1caa0ba288de26.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a8\/a88\/a886218e38f1e1b8be1caa0ba288de26.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432 <em>margin<\/em>.  \u0410\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>zoom<\/em>, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0439 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u0430 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b \u0442\u0435\u043a\u0443\u0449\u0438\u043c. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 <code>w * zoom + margin * 2 <\/code> \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435 \u0438 \u0432\u044b\u0441\u043e\u0442\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>border<\/em> \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u0440\u0443\u0433\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430: \u0446\u0435\u043d\u0442\u0440 <img decoding=\"async\" class=\"formula inline\" source=\"(cx, cy)\" alt=\"(cx, cy)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u0440\u0430\u0434\u0438\u0443\u0441. \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0432 \u0432\u0438\u0434\u0435 \u0442\u043e\u043b\u0449\u0438\u043d\u044b \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u0442\u043e\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c.<\/p>\n<pre><code>const w = bestContainerRadius * 2; const h = w; const margin = 20; const maxWidth = window.innerWidth * 0.7 - margin * 2; const maxHeight = window.innerHeight * 0.8 - margin * 2; const zoom = Math.min(maxWidth \/ w, maxHeight \/ h); const strokeWidth = 4; const border = {     x: 0,     y: 0,     width: w,     height: h,     cx: w \/ 2,     cy: h \/ 2,     r: w \/ 2 }; const viewBoxWidth = w * zoom + margin * 2; const viewBoxHeight = h * zoom + margin * 2; <\/code><\/pre>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>setAttribute<\/em> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c <em>preserveAspectRatio<\/em> \u0438 <em>xMidYMid meet<\/em> \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0439 \u0438 \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<pre><code>svg.setAttribute('viewBox', `0 0 ${viewBoxWidth} ${viewBoxHeight}`); svg.setAttribute('preserveAspectRatio', 'xMidYMid meet'); const contentGroup = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"g\"); <\/code><\/pre>\n<p><em>URL<\/em> <code>http:\/\/www.w3.org\/2000\/svg<\/code>  \u043d\u0435 \u0432\u0435\u0434\u0451\u0442 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435, \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432, \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u043c \u0438\u043c\u0451\u043d <em>svg<\/em>-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0441\u0430\u043c\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438\u0437 <em>border<\/em>, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0435\u0451 \u0446\u0435\u043d\u0442\u0440 \u0441\u043e\u0432\u043f\u0430\u0434\u0451\u0442 \u0441 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u00ab\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043e\u0447\u0435\u0440\u0442\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u043c <em>stroke<\/em> \u0446\u0432\u0435\u0442\u0430 <code>#fedfd7<\/code> \u0431\u0435\u0437 \u0437\u0430\u043b\u0438\u0432\u043a\u0438 <em>fill<\/em> .<\/p>\n<pre><code>const borderCircle = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"circle\"); borderCircle.setAttribute(\"cx\", (border.cx * zoom + margin).toString()); borderCircle.setAttribute(\"cy\", (border.cy * zoom + margin).toString()); borderCircle.setAttribute(\"r\", (border.r * zoom).toString()); borderCircle.setAttribute(\"fill\", \"none\"); borderCircle.setAttribute(\"stroke\", \"#fedfd7\"); borderCircle.setAttribute(\"stroke-width\", strokeWidth.toString()); borderCircle.setAttribute(\"pointer-events\", \"none\"); contentGroup.appendChild(borderCircle); <\/code><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043a\u0440\u0443\u0433\u0438 \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e. \u0418\u0437 <em>packer.list<\/em> \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432 <img decoding=\"async\" class=\"formula inline\" source=\"(circle.c.x, circle.c.y)\" alt=\"(circle.c.x, circle.c.y)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c3\/c30\/c3076d9567edeeb2cce271659d959655.svg\" width=\"176\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c3\/c30\/c3076d9567edeeb2cce271659d959655.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c3\/c30\/c3076d9567edeeb2cce271659d959655.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432, \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c <img decoding=\"async\" class=\"formula inline\" source=\"(cx, cy)\" alt=\"(cx, cy)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0414\u043b\u044f \u043d\u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 <em>Packer<\/em> \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 <em>svg<\/em>. \u0412 <em>Packer<\/em> \u0446\u0435\u043d\u0442\u0440 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430, \u0430 \u0432 <em>svg<\/em> \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e \u0446\u0435\u043d\u0442\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043b\u0435\u0432\u043e\u043c \u0443\u0433\u043b\u0443, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0441\u044c x \u0443\u0445\u043e\u0434\u0438\u0442 \u0432\u043f\u0440\u0430\u0432\u043e, \u0430 \u043e\u0441\u044c y \u2014 \u0432\u043d\u0438\u0437.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sh\/4s\/pu\/sh4spun7iybppsquqt7eig8kxwo.png\" width=\"300\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/sh\/4s\/pu\/sh4spun7iybppsquqt7eig8kxwo.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/sh\/4s\/pu\/sh4spun7iybppsquqt7eig8kxwo.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0440\u0443\u0433 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043d\u0442\u0443\u0440 \u0442\u043e\u0433\u043e \u0436\u0435 \u0446\u0432\u0435\u0442\u0430, \u0447\u0442\u043e \u0438 \u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0443 \u0446\u0432\u0435\u0442\u0430 <code>#fd8264<\/code>.<\/p>\n<pre><code>packer.list.forEach((circle) =&gt; {     const cx = (circle.c.x + w \/ 2) * zoom + margin;     const cy = (circle.c.y + h \/ 2) * zoom + margin;     const radius = circle.r * zoom;     const circleEl = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"circle\");     circleEl.setAttribute(\"cx\", cx.toString());     circleEl.setAttribute(\"cy\", cy.toString());     circleEl.setAttribute(\"r\", radius.toString());     circleEl.setAttribute(\"fill\", \"#fd8264\");     circleEl.setAttribute(\"stroke\", \"#fedfd7\");     circleEl.setAttribute(\"stroke-width\", strokeWidth.toString());     contentGroup.appendChild(circleEl); }); <\/code><\/pre>\n<p>\u0412 \u0446\u0435\u043d\u0442\u0440\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"(cx, cy)\" alt=\"(cx, cy)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/b7\/b7b\/b7b0d50c50c54b1be9fc87f106424a14.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0437\u043d\u0430\u043a \u00ab+\u00bb, \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a \u043d\u0430\u0436\u0430\u0442\u0438\u044e. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438: \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e <em>line1<\/em> \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e <em>line2<\/em> \u043e\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"(x_1, y_1)\" alt=\"(x_1, y_1)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a0\/a02\/a02c59c95fddaaaf17ce1fb6886ba33b.svg\" width=\"56\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a0\/a02\/a02c59c95fddaaaf17ce1fb6886ba33b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a0\/a02\/a02c59c95fddaaaf17ce1fb6886ba33b.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0434\u043e <img decoding=\"async\" class=\"formula inline\" source=\"(y_1, y_2)\" alt=\"(y_1, y_2)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/927\/9270a773b0b981590e70cc4f91ab34d5.svg\" width=\"48\" height=\"16\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/927\/9270a773b0b981590e70cc4f91ab34d5.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/927\/9270a773b0b981590e70cc4f91ab34d5.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0414\u043b\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"0.4r\" alt=\"0.4r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/30\/30c\/30ce6d6b543cf3319847ec5e4d2cc556.svg\" width=\"24\" height=\"12\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/30\/30c\/30ce6d6b543cf3319847ec5e4d2cc556.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/30\/30c\/30ce6d6b543cf3319847ec5e4d2cc556.svg 781w\" loading=\"lazy\" decode=\"async\"\/>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-u\/wy\/zo\/-uwyzogauh02m2b9b4noocw5eqk.png\" width=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/-u\/wy\/zo\/-uwyzogauh02m2b9b4noocw5eqk.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/-u\/wy\/zo\/-uwyzogauh02m2b9b4noocw5eqk.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<pre><code>const plusSize = radius * 0.4; const line1 = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"line\"); line1.setAttribute(\"x1\", (cx - plusSize \/ 2).toString()); line1.setAttribute(\"y1\", cy.toString()); line1.setAttribute(\"x2\", (cx + plusSize \/ 2).toString()); line1.setAttribute(\"y2\", cy.toString()); line1.setAttribute(\"stroke\", \"#fedfd7\"); line1.setAttribute(\"stroke-width\", strokeWidth.toString()); line1.setAttribute(\"stroke-linecap\", \"round\"); line1.setAttribute(\"pointer-events\", \"none\"); contentGroup.appendChild(line1);  const line2 = document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"line\"); line2.setAttribute(\"x1\", cx.toString()); line2.setAttribute(\"y1\", (cy - plusSize \/ 2).toString()); line2.setAttribute(\"x2\", cx.toString()); line2.setAttribute(\"y2\", (cy + plusSize \/ 2).toString()); line2.setAttribute(\"stroke\", \"#fedfd7\"); line2.setAttribute(\"stroke-width\", strokeWidth.toString()); line2.setAttribute(\"stroke-linecap\", \"round\"); line2.setAttribute(\"pointer-events\", \"none\"); contentGroup.appendChild(line2); <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ag\/xr\/gm\/agxrgmzvfyjjudhpguy6j0_i3nq.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ag\/xr\/gm\/agxrgmzvfyjjudhpguy6j0_i3nq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ag\/xr\/gm\/agxrgmzvfyjjudhpguy6j0_i3nq.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430:<\/strong> <a href=\"http:\/\/htmlpreview.github.io\/?https:\/\/gist.githubusercontent.com\/AnnaLafleur\/e5f3c3afb0e29d4113c40083ee231f7b\/raw\/5210e843256bba00d68442c59fcb1d21c8706388\/PackingCircles.html\" rel=\"noopener noreferrer nofollow\">PackingCircles<\/a><br \/> <strong>\u041a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b:<\/strong> <a href=\"https:\/\/gist.githubusercontent.com\/AnnaLafleur\/e5f3c3afb0e29d4113c40083ee231f7b\/raw\/5210e843256bba00d68442c59fcb1d21c8706388\/PackingCircles.html\" rel=\"noopener noreferrer nofollow\">PackingCircles.html<\/a><br \/> <strong>\u0411\u043e\u043b\u044c\u0448\u0435 \u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432 \u0442\u0433:<\/strong> <a href=\"https:\/\/t.me\/LafleurDesignProjects\" rel=\"noopener noreferrer nofollow\">LafleurDesignProjects<\/a><\/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\/945846\/\"> https:\/\/habr.com\/ru\/articles\/945846\/<\/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>\u042f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <em>\u00abFlorist\u00bb<\/em>. \u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0441\u0442\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u043a\u0435\u0442 \u2014 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u0431\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u043e\u0447\u043d\u044b\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u044b, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u043c\u0430\u043a\u0435\u0442\u0430 \u0446\u0432\u0435\u0442\u044b \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430. \u042f \u0441\u043e\u0437\u0434\u0430\u043b\u0430 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0430 \u0435\u0433\u043e \u0432 \u0441\u0430\u0439\u0442 \u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d \u0434\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438: <\/p>\n<figure class=\"\"><\/figure>\n<p> \u041a\u043e\u043d\u0446\u0435\u043f\u0442 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0435\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0444\u043e\u0440\u043c\u0443 \u0431\u0443\u043a\u0435\u0442\u0430 \u0438\u0437 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0446\u0432\u0435\u0442\u044b \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430. <\/p>\n<figure class=\"\"><\/figure>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043c\u0430\u043a\u0435\u0442 \u043a\u0440\u0443\u0433\u043b\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u0421\u0430\u043c \u043c\u0430\u043a\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0444\u043e\u0440\u043c\u044b \u2014 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043a\u0440\u0443\u0433\u043e\u0432-\u044f\u0447\u0435\u0435\u043a \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430. \u0422\u0430\u043a\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0443 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u043e\u0442\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u0438 \u043f\u0443\u0441\u0442\u043e\u0442. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0440\u0435\u043c\u043b\u0435\u043d\u043e \u043a \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0435 \u0438\u043b\u0438 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0435.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438. \u0410\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/h2>\n<p>\u041f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u043d\u043e\u0441\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u00ab\u0423\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u043a\u0440\u0443\u0433\u043e\u0432 \u0432 \u043a\u0440\u0443\u0433\u00bb. \u0415\u0451 \u0446\u0435\u043b\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u043a\u0440\u0443\u0433\u043e\u0432 \u0432 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0438\u0439\u00a0\u043a\u0440\u0443\u0433. \u0420\u044f\u0434 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u0434\u0432\u0438\u043d\u0443\u043b\u0438 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u043e \u043d\u0435\u0439 \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043e\u043a, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e 20 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432, \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0438\u0437 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0442 1 \u0434\u043e 15 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434 \u043c\u043e\u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0435 \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e \u044d\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0443\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u2014 \u0442\u0430\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0437 <a href=\"https:\/\/ru.ruwiki.ru\/wiki\/%D0%A3%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%80%D1%83%D0%B3%D0%BE%D0%B2_%D0%B2_%D0%BA%D1%80%D1%83%D0%B3%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0420\u0443\u0432\u0438\u043a\u0438<\/a>.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u043c\u043e\u0438\u043c \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0432\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u2014 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435. \u0411\u0443\u0434\u0435\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0438\u0445 \u043f\u0440\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043a\u043e\u0434\u0430, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<p>C\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043e\u0442 3 \u0434\u043e 15 \u043a\u0440\u0443\u0433\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u043d\u043e . \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0442\u0432\u0435\u0442 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c.<\/p>\n<p>\u0421\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p>\n<blockquote>\n<p>\u0418\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 n \u043a\u0440\u0443\u0433\u043e\u0432 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 <em>r<\/em>. \u0422\u0430\u043a\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0440\u0443\u0433 \u2014 \u00ab\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u00bb, \u0440\u0430\u0434\u0438\u0443\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0432\u0435\u043d <em>R<\/em>. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c <em>n<\/em> \u043a\u0440\u0443\u0433\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0434\u0438\u0443\u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0431\u044b\u043b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c. \u041d\u0430\u0439\u0442\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f n \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432 \u0434\u043b\u044f . \u041f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u0430\u043a\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043d\u0430 <em>JavaScript<\/em>. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043e\u0431\u0449\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e <em>n<\/em>.<\/p>\n<h2>\u041c\u0435\u0442\u043e\u0434 \u043e\u0442\u0436\u0438\u0433\u0430.<\/h2>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0439 <em>\u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u0436\u0438\u0433\u0430<\/em>, \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u0447\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u00ab\u0447\u0430\u0441\u0442\u0438\u0446\u044b\u00bb \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0432\u0438\u0436\u0443\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u043e \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0430\u0442\u043e\u043c\u043e\u0432 \u043d\u0430\u0433\u0440\u0435\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u0430\u043b\u043b\u0430, \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u043d\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043d\u0435\u0440\u0433\u0438\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u0435\u0442\u0430\u043b\u043b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043e\u0445\u043b\u0430\u0436\u0434\u0430\u044e\u0442, \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f, \u0438 \u043e\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0448\u0451\u0442\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \u0422\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0442\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u043e\u0434\u0431\u043e\u0440\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u043e\u0432. <em>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c<\/em> \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u043f\u0440\u0435\u0436\u0434\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043c\u0435\u043d\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b, \u0447\u0435\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u044d\u0442\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0430\u043a \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0445\u043e\u0442\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435\u043a\u0430\u044f \u00ab\u044f\u043c\u0430\u00bb, \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c <em>\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c<\/em> \u2014 \u0441\u0430\u043c\u043e\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043a \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u0440\u0443\u0433\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u0449\u0430\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0432\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u00ab\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e\u00bb \u0440\u0430\u0434\u0438\u0443\u0441\u0430 <em>R<\/em>, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 <em>R<\/em>. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0441\u043b\u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432\u043e\u043a\u0440\u0443\u0433, \u0442\u043e \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0432\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e <strong>\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439<\/strong> \u0440\u0430\u0434\u0438\u0443\u0441 <em>R<\/em>.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0427\u0430\u0441\u0442\u0438\u0446\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0435 \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043e\u0442\u0436\u0438\u0433\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0447\u0430\u0441\u0442\u0438\u0446\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e, \u043d\u043e \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e. \u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0444\u0430\u0437\u0435 \u0446\u0438\u043a\u043b\u0430 \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e, \u043f\u0440\u043e\u0445\u043e\u0434\u044f \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043e\u0431\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u0412\u0445\u043e\u0434\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u0444\u0430\u0437\u0443, \u0433\u0434\u0435 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043e\u043d\u0430 \u0438\u0449\u0435\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0435.<\/p>\n<figure class=\"\"><\/figure>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b.<\/h2>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0420\u0430\u0434\u0438\u0443\u0441 <em>r<\/em> \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<pre><code>unitRadius = 30 <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 30 \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0435. \u041f\u0440\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 1, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043a\u0440\u0443\u0433\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u0431\u044b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u044b. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 <em>R<\/em> \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<pre><code>containerRadius = unitRadius * Math.sqrt(n \/ 0.9) <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043a\u0440\u0443\u0433\u043e\u0432. \u041f\u043b\u043e\u0449\u0430\u0434\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0440\u0430\u0432\u043d\u0430  , \u043f\u043b\u043e\u0449\u0430\u0434\u044c <em>n<\/em> \u0442\u0430\u043a\u0438\u0445 \u043a\u0440\u0443\u0433\u043e\u0432  \u2014  . \u0414\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u2014 . \u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u043a\u0440\u0443\u0433\u043e\u0432 \u043a \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430:<\/p>\n<p>\u042f \u0432\u0437\u044f\u043b\u0430 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438  \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u043a\u0440\u0443\u0433\u0438 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441 \u0434\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e.<\/p>\n<ul>\n<li>\n<p>\u041f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <em>R<\/em>. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 <em>R<\/em> \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<\/li>\n<\/ul>\n<pre><code>bestContainerRadius = Infinity <\/code><\/pre>\n<ul>\n<li>\n<p><em>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430<\/em> \u2014 \u0441 \u043d\u0435\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<pre><code>let temperature = 2.0; <\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0447\u0430\u0441\u0442\u0438\u0446.<\/p>\n<ul>\n<li>\n<p><em>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u044f<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439. \u0422\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0431\u0440\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 1. \u0427\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a 1, \u0442\u0435\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0438\u0434\u0451\u0442 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<pre><code>coolingRate = 0.9997 <\/code><\/pre>\n<ul>\n<li>\n<p>\u041f\u043e\u0442\u043e\u043b\u043e\u043a \u0434\u043b\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 5000 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0436\u0451\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0442 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0442\u043e\u0440\u043c\u043e\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 <em>n<\/em>, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0431\u043e\u043b\u0435\u0435 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u0432\u043e\u0434\u043e\u043a, \u043f\u043e\u043c\u043e\u0433\u0430\u044f \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0422\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0442\u0435\u0445 <em>n<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e 5000.<\/p>\n<\/li>\n<\/ul>\n<pre><code>maxIterations = 5000 <\/code><\/pre>\n<p>\u0417\u0430 5000 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043e\u0442 2.0 \u0441\u043f\u0430\u0434\u0451\u0442 \u0434\u043e  \u2014 \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u0437\u043a\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u0442\u0436\u0438\u0433\u0430. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0435 \u043a 0, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0438\u0437\u043a\u0438\u0445 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430\u0445 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b, \u0438 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0432\u043f\u043b\u043e\u0442\u043d\u0443\u044e \u0434\u043e 0.<\/p>\n<h2>\u041d\u0430\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/h2>\n<p>\u0412 \u0440\u043e\u043b\u0438 \u0447\u0430\u0441\u0442\u0438\u0446\u044b, \u043d\u0430\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a\u0440\u0443\u0433. \u041a\u043b\u0430\u0441\u0441 Ball \u0437\u0430\u0434\u0430\u0441\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0438\u0446\u044b: \u0435\u0451 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0440\u0430\u0434\u0438\u0443\u0441 \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c velocity, \u0440\u0430\u0432\u043d\u0443\u044e 0.<\/p>\n<pre><code>constructor(x, y, radius) {   this.r = radius;   this.velocity = { x: 0, y: 0 };   this.position = { x: x, y: y }; } <\/code><\/pre>\n<p>\u0421\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u043f\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <em>force<\/em>. \u0414\u043b\u0438\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u041f\u0438\u0444\u0430\u0433\u043e\u0440\u0430. \u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 1, \u043e\u043d\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<pre><code>applyForce(force) {     this.velocity.x += force.x;     this.velocity.y += force.y;     const speed = Math.sqrt(this.velocity.x * this.velocity.x + this.velocity.y * this.velocity.y);     if (speed &gt; 1.0) {         this.velocity.x = (this.velocity.x \/ speed) * 1.0;         this.velocity.y = (this.velocity.y \/ speed) * 1.0;     } } <\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u043a\u0440\u0443\u0433\u043e\u0432. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <em>deterministicRandom<\/em> \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0448\u0443\u043c <em>noise<\/em> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0428\u0443\u043c \u0434\u0430\u0451\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u043e\u043b\u044e \u043a\u0440\u0443\u0433\u0430\u043c \u0432 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438, \u0438\u0437\u044a\u044f\u0441\u043d\u044f\u044f\u0441\u044c \u0444\u0438\u0433\u0443\u0440\u0430\u043b\u044c\u043d\u043e. \u0422\u0430\u043a \u043a\u0440\u0443\u0433\u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u044e\u0442 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u043d\u0438\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430\u0445.<br \/> \u041f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u0421\u0442\u043e\u043f, \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c? \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442. \u0412 \u0444\u0438\u0437\u0438\u043a\u0435 \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u043c\u044b \u0431\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<p>\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043b\u043e\u0436\u0438\u043b\u0438 \u0431\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0430\u0441\u044c \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u0437\u0430 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 , c\u043e\u043a\u0440\u0430\u0442\u0438\u0432 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u0435\u0448\u0430\u044e\u0449\u0438\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u0448\u0430\u0433\u0430\u043c\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438  \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b \u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442 \u0437\u0430 1, \u0447\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u0430\u043a\u0438 \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/p>\n<pre><code>update(seed, iter) {     const noiseX = (deterministicRandom(seed, this.position.x * 1000 + iter) - 0.5) * 1.2; const noiseY = (deterministicRandom(seed, this.position.y * 1000 + iter + 1000) - 0.5) * 1.2;     this.velocity.x += noiseX;     this.velocity.y += noiseY;     this.position.x += this.velocity.x;     this.position.y += this.velocity.y;     this.velocity.x *= 0.98;     this.velocity.y *= 0.98; } <\/code><\/pre>\n<ul>\n<li>\n<p>1.2 \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0448\u0443\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>0.98 \u2014 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0449\u0438\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0444\u0438\u0437\u0438\u043a\u0438.<\/h2>\n<p>\u0421 <em>\u043a\u043b\u0430\u0441\u0441\u043e\u043c Ball<\/em> \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043a\u043b\u0430\u0441\u0441\u0443 Packer, \u0442\u043e \u0435\u0441\u0442\u044c \u043a \u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u043e\u043c\u0443 <em>\u043c\u0435\u0442\u043e\u0434\u0443 \u043e\u0442\u0436\u0438\u0433\u0430<\/em>. \u0417\u0434\u0435\u0441\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0448\u0443\u043c\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0430 \u0440\u0430\u043d\u0435\u0435. \u0414\u043b\u044f \u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u2014 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>seed<\/em> \u2014 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044f\u0441\u044c \u043d\u0435\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code>seed = 12345 * n_circles <\/code><\/pre>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e<\/p>\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-474547","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/474547","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=474547"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/474547\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=474547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=474547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=474547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}