{"id":323629,"date":"2021-05-23T21:00:40","date_gmt":"2021-05-23T21:00:40","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=323629"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=323629","title":{"rendered":"\u0413\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u043c\u0438\u0440\u044b"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0422\u0430\u0439\u043b\u043e\u0432\u043e\u0441\u0442\u044c \u0432 \u0438\u0433\u0440\u0430\u0445 \u2013 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0435 \u044f\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0438\u0433\u0440\u0430\u0445 \u0438\u043d\u0434\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u0442\u0430\u0439\u043b\u044b \u2013 \u0432 \u043d\u0438\u0445 \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0431\u0443\u0434\u044c \u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u0443\u0440\u043e\u0432\u043d\u044f \u0438\u043b\u0438 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0438 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f. <\/p>\n<p>\u0412 \u0442\u043e\u043f\u043e\u0432\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u043a\u043e\u043d\u0446\u0430 \u0434\u0435\u0432\u044f\u043d\u043e\u0441\u0442\u044b\u0445 &#8212; \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0447\u0430\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0437\u0430\u043c\u0435\u0441\u0442\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0439 \u2013 \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u043e\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439. \u0418\u043c\u0435\u043d\u043d\u043e \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0435\u0442\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/75c\/47f\/d96\/75c47fd96bf12ca7266e43444264b5df.jpg\" width=\"985\" height=\"720\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0447\u0438\u0442\u0430\u043b\u0438 \u043c\u043e\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e <a href=\"https:\/\/habr.com\/ru\/post\/554960\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u043a\u0438<\/a>, \u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0443 \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438, \u0441\u0441\u044b\u043b\u0430\u044f\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0435. \u0414\u0430\u0431\u044b \u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u044f \u0432\u0437\u044f\u043b \u0441 <a href=\"https:\/\/www.redblobgames.com\/grids\/hexagons\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 <\/a>\u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c. \u041a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0438\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439, \u0435\u0441\u0442\u044c \u0435\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 <a href=\"https:\/\/habr.com\/ru\/post\/319644\/\" rel=\"noopener noreferrer nofollow\">\u0445\u0430\u0431\u0440\u0435<\/a>. \u0412\u0441\u0435 \u0434\u0435\u043c\u043a\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u043d\u0430 \u0434\u0432\u0438\u0436\u043a\u0435 <a href=\"https:\/\/godotengine.org\/\" rel=\"noopener noreferrer nofollow\">Godot Engine<\/a> v 3.2.3 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0435\u0433\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u0414\u0443\u043c\u0430\u044e \u0432 \u0446\u0435\u043b\u043e\u043c \u0435\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044f\u0441\u0435\u043d, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.godotengine.org\/ru\/latest\/classes\/class_visualserver.html?highlight=VisualServer#class-visualserver-method-canvas-item-add-line\" rel=\"noopener noreferrer nofollow\">VisualServer.canvas_item_add_line<\/a> &#8212; \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.godotengine.org\/ru\/latest\/classes\/class_visualserver.html?highlight=VisualServer#class-visualserver-method-canvas-item-add-rect\" rel=\"noopener noreferrer nofollow\">VisualServer.canvas_item_add_rect<\/a> &#8212; \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043b\u0438\u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u043e\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.godotengine.org\/ru\/latest\/classes\/class_visualserver.html?highlight=VisualServer#class-visualserver-method-canvas-item-add-polyline\" rel=\"noopener noreferrer nofollow\">VisualServer.canvas_item_add_polyline<\/a> &#8212; \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043b\u0438\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.godotengine.org\/ru\/latest\/classes\/class_visualserver.html?highlight=VisualServer#class-visualserver-method-canvas-item-add-polygon\" rel=\"noopener noreferrer nofollow\">VisualServer.canvas_item_add_polygon<\/a> &#8212; \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043b\u0438\u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u043e\u043c \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/h2>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438, \u0443 \u043d\u0438\u0445 \u0432\u0441\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0432\u043d\u044b. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438 \u043b\u0438\u0448\u0435\u043d\u0430 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b \u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u043e\u043a, \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445:<\/p>\n<ul>\n<li>\n<p>\u0422\u0430\u043a\u0438\u0435 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 (\u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0439 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043e\u0441\u0435\u0434):<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e1\/580\/bf5\/2e1580bf5fb5ca9bcf49d6111b3ea0ce.png\" width=\"190\" height=\"192\"><figcaption><\/figcaption><\/figure>\n<\/li>\n<li>\n<p>\u0410 \u0442\u0430\u043a\u0438\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 (\u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0439 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043e\u0441\u0435\u0434):<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8cc\/7ef\/09a\/8cc7ef09a64f822bb3e30da863478622.png\" width=\"183\" height=\"179\"><figcaption><\/figcaption><\/figure>\n<\/li>\n<\/ul>\n<p>\u0423\u0436\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0438\u043f\u0438\u0447\u043d\u0443\u044e \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 &#8212; \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u044c, \u0432\u0434\u043e\u043b\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u0435\u0442\u043e\u043a. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u044f\u0445. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0435 \u0431\u0443\u0434\u0443, \u0432\u0441\u0435 \u0442\u0430\u043a\u0438 \u043f\u043e\u0441\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u043e\u043a, \u0430 \u043d\u0435 \u0438\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435. <\/p>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u044d\u0442\u043e \u0442\u0430\u043a\u0438 \u0432\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b \u043e\u0441\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043c\u0435\u0449\u0430\u0442\u044c:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/58e\/563\/5c3\/58e5635c348f09b2a8ef488a83d1be3f.png\" alt=\" \" title=\" \" width=\"500\" height=\"169\"><figcaption> <\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <em>\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. <\/em>\u0411\u044b\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f &#8212; \u0447\u0435\u0442\u043d\u044b\u0435 \u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435. \u041e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0441\u043e\u0441\u0435\u0434\u0430 \u0434\u043b\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u0412 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b <em>\u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 <\/em>\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0442.\u0435. \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0438\u0436\u043d\u0435\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043a \u043f\u0440\u0430\u0432\u043e\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439<em>.<\/em><\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u044d\u0442\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u0431\u0430\u0437\u0438\u0441\u043e\u0432. \u0414\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0431\u0430\u0437\u0438\u0441 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u043a \u043d\u0435\u0439 \u043f\u0435\u0440\u0435\u0448\u043b\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0439\u043b\u044b, \u0442\u0430\u043c \u043c\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438\u0437 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u043b\u0438 \u043d\u0430 \u043d\u0435\u0435 \u0440\u0430\u0434\u0438\u0443\u0441-\u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438. \u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0432 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443. <\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0443 \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u044f\u0440\u043a\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0441\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b46\/156\/550\/b4615655046760526371b1bb25d498d8.png\" width=\"661\" height=\"299\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e-\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442, \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435? \u0422\u0443\u0442 \u0442\u0440\u0438 \u043e\u0441\u0438, \u043f\u0440\u044f\u043c \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0433\u0435\u043d\u0438\u0439 \u0442\u043e\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a &#8212; \u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u043a\u0443\u0431 \u043f\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u0430 \u0435\u0449\u0435 \u0438 \u0434\u043e\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041f\u0440\u0430\u0432\u0434\u0430 \u0432\u043e\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0432 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435, \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u043a\u0438\u043f\u0435\u0442\u044c \u043c\u043e\u0437\u0433\u0438, \u0432\u0435\u0434\u044c \u0442\u0440\u0435\u0442\u044c\u044f \u043e\u0441\u044c \u0442\u0443\u0442 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0435\u0439 \u0438 \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0448\u0430\u0435\u0442. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u043a\u0443\u0431\u044b:<\/p>\n<p><iframe id=\"60a0fd8b0f3ebbcaeba0bde9\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/60a0fd8b0f3ebbcaeba0bde9\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043d\u0430 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u043a\u0443, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0443\u0431\u0438\u043a\u043e\u0432 \u0432 \u0440\u044f\u0434\u0443 \u043d\u0430 \u043e\u0434\u0438\u043d. \u0412\u043a\u043b\u044e\u0447\u0438\u0432 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u044e, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0443\u0431\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a. \u0412\u043a\u043b\u044e\u0447\u0438\u0432 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043b\u0435\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u0412\u043a\u043b\u044e\u0447\u0438\u0432 \u043b\u043e\u0433\u0438\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u043a\u0441\u0442\u0430\u0442\u0438 \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c, \u0432\u0435\u0434\u044c \u043c\u044b \u0441\u0430\u043c\u0438 \u0440\u0435\u0448\u0430\u0435\u043c, \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e 15, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430). \u041d\u0430\u043c \u043d\u0435\u0437\u0430\u0447\u0435\u043c \u0442\u0430\u0441\u043a\u0430\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043b\u0438\u0448\u043d\u044e\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0435\u0435 \u0437\u0430 \u043d\u043e\u043b\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0443\u043c\u043c\u0430 \u0442\u0440\u0435\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0432\u0435\u0437\u0434\u0435 \u0440\u0430\u0432\u043d\u0430 \u043d\u0443\u043b\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0435\u0442\u044c\u044f \u043d\u0430\u043c \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u0432\u0435\u0434\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0434\u0440\u0443\u0433\u0438\u0445. \u0422\u0435\u043f\u0435\u0440\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e &#171;\u043c\u0435\u0448\u0430\u044e\u0449\u0430\u044f&#187; \u0442\u0440\u0435\u0442\u044c\u044f \u043e\u0441\u044c \u0443\u0445\u043e\u0434\u0438\u0442. \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u0438\u0441\u044b \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043e\u0441\u0435\u0434, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432\u0434\u043e\u043b\u044c \u043e\u0441\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/595\/7dd\/072\/5957dd07228439c53b18409f7832dfdf.PNG\" width=\"671\" height=\"295\"><figcaption><\/figcaption><\/figure>\n<p>\u0422.\u043a. \u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u043d\u0435\u0442 \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043f\u043e \u0441\u0443\u0442\u0438 \u0432 \u043b\u044e\u0431\u0443\u044e \u0442\u043e\u0447\u043a\u0443. \u0421\u0430\u043c\u044b\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0446\u0435\u043d\u0442\u0440 \u0444\u0438\u0433\u0443\u0440\u044b, \u0432\u0435\u0434\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0433\u043e \u043e\u043d\u0430 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0430.<\/p>\n<h2>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/h2>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439 \u044d\u0442\u043e \u0442\u043e, \u043d\u0430 \u0447\u0435\u043c \u0437\u0430\u043f\u0430\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0435. \u042f \u0441\u043b\u044b\u0448\u0430\u043b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432, \u043f\u043e\u0440\u043e\u0439 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431, \u0433\u0434\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u0435\u0442\u043a\u043e\u0439, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043e\u043a\u0440\u0430\u0448\u0435\u043d\u0430 \u0432 \u0441\u0432\u043e\u0439 \u0446\u0432\u0435\u0442, \u0430 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0446\u0432\u0435\u0442\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u041f\u0440\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u043c\u0430\u0441\u043a\u0443 \u0438 \u043f\u043e \u0446\u0432\u0435\u0442\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u0421\u043b\u043e\u0436\u043d\u043e, \u0441 \u043a\u043e\u0441\u0442\u044b\u043b\u044f\u043c\u0438, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u043e\u0436\u0435\u0442. \u0410 \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440? \u041f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c? \u0412\u044b \u0442\u0443\u0442 \u044f\u0432\u043d\u043e \u043d\u0435 \u0437\u0430 \u044d\u0442\u0438\u043c.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u0432\u0435\u0434\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0442\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435 \u043a\u0430\u043a \u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c, \u0447\u0442\u043e \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043c\u0430\u0442\u0440\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043c \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 (\u0430 &#8212; \u0441\u0442\u043e\u0440\u043e\u043d\u0430):<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/15f\/07f\/6f5\/15f07f6f5c9a6b22a01449d8199b5f76.png\" width=\"506\" height=\"220\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0435 (\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435) \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043f\u043e\u043f\u043e\u043b\u0430\u043c \u0437\u0435\u043b\u0435\u043d\u044b\u043c\u0438 (\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438), \u0430 \u0437\u0435\u043b\u0435\u043d\u044b\u0435 \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0423\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043d\u0430 4 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0433\u0434\u0435 \u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u0443\u0433\u043b\u0430\u043c\u0438 \u0441\u0435\u0442\u043a\u0438, \u0430 \u0432\u0435\u0434\u044c \u043d\u0430\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438 \u0440\u043e\u0432\u043d\u043e \u0432 \u0443\u0433\u043b\u044b. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 &#171;\u0433\u0434\u0435 \u0442\u043e&#187;, \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u043f\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0449\u0435 \u043d\u0430 \u043f\u043e\u043f\u043e\u043b\u0430\u043c, \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u0432 \u0443\u0433\u043b\u044b \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/583\/62a\/71e\/58362a71e7bda3ab1123144b6eb1a4e9.png\" width=\"750\" height=\"260\"><figcaption><\/figcaption><\/figure>\n<p>\u0416\u0435\u043b\u0442\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u0414\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0435\u0435 \u0431\u0430\u0437\u0438\u0441\u043e\u0432 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\"># \u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 var hex_size = 32  var short = int(size*sqrt(3)\/2) # 1\/2 from short hex diagonal var long = int(size\/2) # 1\/4 from long hex diagonal<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0431\u0430\u0437\u0438\u0441\u044b \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0430\u0437\u0438\u0441\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f02\/395\/8b8\/f023958b8465345e02ed18945adcd320.png\" width=\"611\" height=\"256\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0435 \u0431\u0430\u0437\u0438\u0441\u044b \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">...  # Transorm2D \u0432 godot - \u044d\u0442\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0430 3x2, \u0433\u0434\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u043a\u0430\u0437\u044b\u0430\u0435\u0442 # \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0432\u0441\u0435\u043c,  # \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 2x2. \u0421\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, # \u043d\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442. # \u0423 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 - x \u0438 y. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440. X - \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 # \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043c\u0430\u0442\u0440\u0438\u0446\u044b 2x2 (\u043a\u0440\u0430\u0439\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f), Y - \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446.    var grid_basis = Transform2D() # \u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0431\u0430\u0437\u0438\u0441\u043e\u0432 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 var hex_basis = Transform2D() # \u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0431\u0430\u0437\u0438\u0441\u043e\u0432 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438  ...    # \u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 grid_basis.x = Vector2(long, 0) grid_basis.y = Vector2(0, short)  hex_basis.x = grid_basis.x*3 + grid_basis.y hex_basis.y = grid_basis.y*2  # \u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 grid_basis.x = Vector2(short, 0) grid_basis.y = Vector2(0, long) \t\t\t hex_basis.x = grid_basis.x*2 hex_basis.y = grid_basis.x+grid_basis.y*3<\/code><\/pre>\n<p>\u042f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Godot \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0446\u0435\u043b\u043e\u043c. \u0412\u0441\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u044f\u0441\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435, \u043a\u0430\u043a \u0431\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. <\/p>\n<h3>\u0428\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044c<\/h3>\n<p>\u0412\u043e\u0442 \u0437\u0430 \u0447\u0442\u043e \u044f \u043b\u044e\u0431\u043b\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443, \u0442\u0430\u043a \u044d\u0442\u043e \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0437\u0434\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043d\u0442\u0440\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 \u0438\u0437 \u0435\u0433\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0430 \u0441\u0435\u0442\u043a\u0435 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0431\u0430\u0437\u0438\u0441\u044b \u043d\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b:<\/p>\n<pre><code class=\"cpp\">func hex2pixel(hex): \treturn hex.x*hex_basis.x + hex.y*hex_basis.y<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u0431\u0430\u0437\u0438\u0441\u0430\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/819\/fd9\/759\/819fd9759eede9f74d975122913e618f.png\" width=\"1228\" height=\"376\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 (\u0441\u043c. \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432\u044b\u0448\u0435) \u043a \u0446\u0435\u043d\u0442\u0440\u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u0435\u0440\u0448\u0438\u043d, \u0438\u0431\u043e \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043d\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">func _get_vert_hex_vertices(hex): \tvar pixel = hex2pixel(hex) \treturn PoolVector2Array([ \t\tpixel+2*grid_basis.x, \t\tpixel+grid_basis.x+grid_basis.y, \t\tpixel-grid_basis.x+grid_basis.y, \t\tpixel-2*grid_basis.x, \t\tpixel-grid_basis.x-grid_basis.y, \t\tpixel+grid_basis.x-grid_basis.y \t])<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">func _get_hor_hex_vertices(hex): \tvar pixel = hex2pixel(hex) \treturn PoolVector2Array([ \t\tpixel+grid_basis.x-grid_basis.y, \t\tpixel+grid_basis.x+grid_basis.y, \t\tpixel+2*grid_basis.y, \t\tpixel-grid_basis.x+grid_basis.y, \t\tpixel-grid_basis.x-grid_basis.y, \t\tpixel-2*grid_basis.y, \t])<\/code><\/pre>\n<h3>\u041f\u0438\u043a\u0441\u0435\u043b\u044c \u0432 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a<\/h3>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e \u0441\u0430\u043c\u0430\u044f \u0438\u043d\u0442\u0440\u0438\u0433\u0443\u044e\u0449\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0432\u0435\u0434\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 \u043d\u0435\u0435 \u0440\u0430\u0434\u0438\u0443\u0441-\u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/26e\/b20\/c1c\/26eb20c1c82848a652f2657999a332cc.png\" width=\"514\" height=\"417\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">func pixel2hex(pixel): \tvar x = pixel.x\/(2*cw) - pixel.y\/(6*ch) \tvar y = pixel.y\/(3*ch) \treturn round_hex(Vector2(x, y))<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f8c\/bf9\/55d\/f8cbf955d3d88342546720b88a603620.png\" width=\"569\" height=\"481\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">func pixel2hex(pixel): \tvar x = pixel.x\/(3*cw) \tvar y = pixel.y\/(2*ch) - pixel.x\/(6*cw) \treturn round_hex(Vector2(x, y))<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0431\u0443\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>affine_inverse<\/code> \u0443 <code>Transform2D<\/code>, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439, \u043f\u043e\u0437\u0436\u0435 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0430\u0434\u043e. \u0412\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 <s>(\u0438 \u0437\u0440\u044f)<\/s>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u041a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f, \u0438\u043b\u0438 \u0437\u0430\u0431\u044b\u043b, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/function-x.ru\/return_matrix.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>, \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u0432\u043e\u0439 \u044f\u0437\u044b\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0443\u043d\u043a\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">func invert_basis(basis:Transform2D): # \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \tvar det = basis.x.x*basis.y.y - basis.y.x*basis.x.y \tvar idet = 1.0\/det \t# \u042f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d \u0447\u0442\u043e Transform2D \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \t# \u043a\u043e\u043f\u0438\u0440\u0443\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \tvar res = basis \tres.y.y = basis.x.x*idet \tres.x.x = basis.y.y*idet \tres.x.y = -basis.x.y*idet \tres.y.x = -basis.y.x*idet \treturn res \t func vec_mul_basis(vec:Vector2, basis:Transform2D): # \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \tvar x = vec.x*basis.x.x + vec.y*basis.y.x \tvar y = vec.x*basis.x.y + vec.y*basis.y.y \treturn Vector2(x, y) \t func pixel2hex(pixel): \treturn round_hex(vec_mul_basis(pixel, invert_basis(hex_basis)))<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Godot \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443:<\/p>\n<pre><code class=\"cpp\">func pixel2hex(pixel): \treturn round_hex(hex_basis.affine_inverse().xform(pixel))<\/code><\/pre>\n<p>\u0422\u0443\u0442 <code>.xform(Vector2)<\/code> &#8212; \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u043d\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440, \u0430\u043d\u0430\u043b\u043e\u0433 <code>vec_mul_basis<\/code> \u0438\u0437 \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u0435\u0438\u0445 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0439.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u044f \u0431\u044b \u0431\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>round_hex<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043a <code>int<\/code>. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 3, \u0438 \u043e\u043d\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c <code>x + y + z = 0<\/code>, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f <strong>\u043a\u0430\u0436\u0434\u043e\u0439<\/strong> \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0435, \u0442\u043e\u0433\u0434\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f. \u0414\u0430, \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043b\u0438\u0437\u0430\u043d <a href=\"https:\/\/www.redblobgames.com\/grids\/hexagons\/#rounding\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a>, \u043e\u0434\u043d\u0430\u043a\u043e \u0437\u0430\u0447\u0435\u043c \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439? \u0422\u0430\u043a \u0436\u0435 \u0442\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e <code>round<\/code>, \u0430 \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a <code>int<\/code>, \u0432\u0435\u0434\u044c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0435\u0435 \u0446\u0435\u043d\u0442\u0440\u0435, \u0430 \u043d\u0435 \u0432 \u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443, \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">func round_hex(hex:Vector2): \tvar rx = round(hex.x) \tvar ry = round(hex.y) \tvar rz = round(-hex.x-hex.y) # z = -x-y \t \tvar x_diff = abs(hex.x-rx) # \u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f x \tvar y_diff = abs(hex.y-ry) # \u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f y \tvar z_diff = abs(-hex.x-hex.y-rz) # \u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f z \tif x_diff &gt; y_diff and x_diff &gt; z_diff: \t\trx = -ry-rz # \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \telif y_diff &gt; z_diff: \t\try = -rx-rz # \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \treturn Vector2(rx, ry)<\/code><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5ed\/d7f\/864\/5edd7f864a37a232e746cfedfed39ebc.gif\" width=\"417\" height=\"449\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fbd\/64a\/321\/fbd64a3217c3d58b0bc525f3e1f928d7.gif\" width=\"473\" height=\"428\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0432\u044b \u043d\u0435 \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0441\u0435\u0442\u043a\u0438, \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u042f \u043d\u0435 \u0441\u0430\u043c\u043e\u0443\u0431\u0438\u0439\u0446\u0430. <\/p>\n<h2>\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u043e\u043a<\/h2>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435, \u0432\u0435\u0434\u044c \u0434\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u043d\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b. \u0414\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. <\/p>\n<p>\u0414\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b. \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u044f\u0447\u0435\u0435\u043a \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u0447\u0435\u043c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0432\u0435\u0434\u044c \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438 \u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 2 \u044f\u0447\u0435\u0439\u043a\u0438. \u0414\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043a \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443 \u043c\u044b \u0432\u043d\u0438\u0437 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u0442\u0440\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0437\u0438\u0441\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0439\u043d\u0435\u0433\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u0430 \u0441\u043d\u0438\u0437\u0443 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u0430\u044f \u043d\u0438\u0436\u043d\u044f\u044f \u0447\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0443\u0447\u0442\u0435\u043d\u043d\u043e\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u0443:<\/p>\n<pre><code class=\"cpp\">const hex_map_size = Vector2(7, 7) # \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 var grid_map_size:Vector2 # \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 ... grid_map_size.x = hex_map_size.x*2 grid_map_size.y = hex_map_size.y*3+1<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0432\u0441\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0448\u0438\u0440\u0438\u043d\u044b \u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">... grid_map_size.x = hex_map_size.x*3+1 grid_map_size.y = hex_map_size.y*2<\/code><\/pre>\n<p>\u0421\u0435\u0442\u043a\u0443 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438, \u043d\u0430 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0438 \u043d\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u0435\u0440\u0448\u0438\u043d:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/009\/f18\/2ac\/009f182acdd9e3d648ef0dade11619e6.png\" width=\"900\" height=\"396\"><figcaption><\/figcaption><\/figure>\n<p>\u0411\u0443\u0434\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u044f\u0434\u0443 \u043b\u0438\u043d\u0438\u0438 \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432 2 \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u0435\u0442\u043d\u044b\u0439 \u043f\u043e \u0441\u0447\u0435\u0442\u0443 \u0440\u044f\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0439, \u0430 \u043d\u0435 \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u044f\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432 \u043e\u0434\u043d\u0443 \u044f\u0447\u0435\u0439\u043a\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0435\u0440\u0445\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u0440\u044f\u0434\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0430. \u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u0448\u0442\u0440\u0438\u0445\u0430 \u0432 \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0440\u0445\u043d\u0438\u043c\u0438 \u043a\u043e\u043d\u0446\u0430\u043c\u0438 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0442\u0440\u0438 \u044f\u0447\u0435\u0439\u043a\u0438. \u0422\u043e\u0433\u0434\u0430 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438 \u0438\u0434\u0435\u043c \u0434\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u043a\u0440\u0430\u044f \u043a\u0430\u0440\u0442\u044b \u0441 \u0448\u0430\u0433\u043e\u043c 3, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u0438\u043d\u0434\u0435\u043a\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u0435\u043d \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u044f\u0434\u0430, \u043f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f <code>1-i%2<\/code>, \u0438 \u0438\u0434\u0435\u043c \u0434\u043e \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043a\u0440\u0430\u044f \u043a\u0430\u0440\u0442\u044b, \u043d\u043e \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438 \u043a\u0440\u0430\u0439\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438, \u0441 \u0448\u0430\u0433\u043e\u043c \u0432 \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u0412 \u043a\u0430\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0438\u0441\u0443\u0435\u043c \u043e\u0442\u0440\u0435\u0437\u043e\u043a \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">for i in range(1, grid_map_size.y, 3): \tfor j in range(1-i%2, grid_map_size.x+1, 2): \t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*i, grid_basis.x*j+grid_basis.y*(i+2), color, width, antialiasing) <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u0435\u0440\u0448\u0438\u043d. \u0415\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u043d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439, \u043e\u0442 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0433\u043b\u0430 \u043a \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u043e\u043c\u0443 (\u0438\u0445 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u0436\u043d\u0438\u043c\u0438 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044f\u043c\u0438), \u0438\u043b\u0438 \u043e\u0442 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u043a \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u043e\u043c\u0443 (\u0438\u0445 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0445\u043d\u0438\u043c\u0438 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044f\u043c\u0438), \u043f\u0440\u0438\u0447\u0435\u043c \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043e\u043d\u0438 \u0447\u0435\u0440\u0435\u0434\u0443\u044e\u0442\u0441\u044f, \u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043c\u0435\u043d\u044f\u0435\u0442 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c. \u0427\u0435\u0442\u043d\u044b\u043c \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441 \u043d\u0438\u0436\u043d\u0435\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438, \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u043c &#8212; \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0435 \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442 \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 3 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u043d\u0438\u0437. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043c\u0435\u043d\u044f\u0435\u0442 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c, \u0438 \u0442\u0430\u043a \u0441\u043e\u0432\u043f\u0430\u043b\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0435\u0435 \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u043e\u0436\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c. <\/p>\n<p>\u0414\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0442\u0440\u0435\u0442\u044c\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0443\u043b\u0435\u0432\u043e\u0439, \u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c. \u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u0442\u043e \u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0438\u0436\u043d\u044e\u044e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c, \u0438\u043d\u0430\u0447\u0435 \u0432\u0435\u0440\u0445\u043d\u044e\u044e. \u0422\u0443\u0442 \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u043d\u0443\u0436\u043d\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0433\u043e\u043b \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 <code>{j, i}<\/code> , \u0433\u0434\u0435  <code>j<\/code> &#8212; \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (\u043a\u0430\u043a \u0431\u044b <code>x<\/code>), <code>i<\/code> &#8212; \u0441\u0442\u0440\u043e\u043a\u0430 (\u043a\u0430\u043a \u0431\u044b <code>y<\/code>). \u0420\u0430\u0437\u043c\u0435\u0440 \u044f\u0447\u0435\u0439\u043a\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/faf\/0a1\/451\/faf0a14510a38c54f94103c74264bba6.png\" width=\"1055\" height=\"220\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\"># Drawing vertices for i in range(0, grid_map_size.y, 3): # \u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \tfor j in range(grid_map_size.x): # \u043a\u0440\u0430\u0439\u043d\u0438\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043d\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c, \u0442.\u043a. \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \t\tif i%2 == j%2: # \u043d\u0438\u0436\u043d\u044f\u044f \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c \t\t\tCanvas.line(surf, grid_basis.x*j+grid_basis.y*(i+1), grid_basis.x*(j+1)+grid_basis.y*i, color, width, antialiasing) \t\telse: # \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c \t\t\tCanvas.line(surf, grid_basis.x*j+grid_basis.y*i-offset, grid_basis.x*(j+1)+grid_basis.y*(i+1), color, width, antialiasing)<\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0432 \u043d\u0430 \u0445\u043e\u043b\u0441\u0442\u0435 \u0441\u0435\u0442\u043a\u0443, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043a\u0438 \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bb9\/442\/4a8\/bb94424a8de2f162b56cdc33ed5a81a6.gif\" width=\"433\" height=\"414\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0435\u043b\u043e \u0432\u0441\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u043e \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 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u044b \u0441 \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u043a\u0430\u043c\u0438. \u0414\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442.\u0435. \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u0434\u043d\u0443 \u044f\u0447\u0435\u0439\u043a\u0443 \u0432\u043b\u0435\u0432\u043e \u0438 \u043d\u0430 \u0434\u0432\u0435 \u0432\u0432\u0435\u0440\u0445, \u0432\u0435\u0434\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434 \u0442\u0430\u043a\u0438\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435 \u0432\u0441\u0435. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u0434\u0435\u043d\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0432\u044b\u0448\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u043e \u043f\u0440\u0438 \u0447\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0441\u043e\u0442\u0430\u0445 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0445\u0432\u043e\u0441\u0442\u044b:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/155\/5dd\/0f7\/1555dd0f7e72577f75d4c361b94c8f06.png\" width=\"481\" height=\"348\"><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u0438 \u0445\u0432\u043e\u0441\u0442\u044b \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u0443\u0433\u043b\u0430\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0443\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0432 \u043d\u0438\u0445 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0440\u0438\u0441\u0443\u0435\u043c \u0442\u0443\u0442 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c. <\/p>\n<p>\u0421\u043e\u0435\u0434\u0435\u043d\u0438\u0432 \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">func _draw_hor_rect_grid(surf:RID, color:Color, width=1.0, antialiasing=false): \tvar offset = grid_basis.x+grid_basis.y*2 \t# Drawing vertical lines \tfor i in range(1, grid_map_size.y, 3): \t\tfor j in range(1-i%2, grid_map_size.x+1, 2): \t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*i-offset, grid_basis.x*j+grid_basis.y*(i+2)-offset, color, width, antialiasing)  \t# Drawing vertices \tfor i in range(0, grid_map_size.y, 3): \t\tfor j in range(grid_map_size.x): \t\t\tif int(hex_map_size.y)%2 == 1 or not (i == grid_map_size.y-1 and (j == 0 or j == grid_map_size.x-1)): \t\t\t\tif i%2 == j%2: \t\t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*(i+1)-offset, grid_basis.x*(j+1)+grid_basis.y*i-offset, color, width, antialiasing) \t\t\t\telse: \t\t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*i-offset, grid_basis.x*(j+1)+grid_basis.y*(i+1)-offset, color, width, antialiasing)<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u043a\u0441\u0442\u0430\u0442\u0438 \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0442\u0443\u0442 \u0438 \u0435\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">func draw_auxiliary_grid(surf:RID, color:Color, width=1.0, antialiasing=false): \tvar offset = grid_basis.x+grid_basis.y*2 \tfor i in grid_map_size.x+1: \t\tCanvas.line(surf, grid_basis.x*i-offset, grid_basis.x*i+grid_basis.y*grid_map_size.y-offset, color, width, antialiasing) \tfor i in grid_map_size.y+1: \t\tCanvas.line(surf, grid_basis.y*i-offset, grid_basis.x*grid_map_size.x+grid_basis.y*i-offset, color, width, antialiasing)<\/code><\/pre>\n<p>\u0418, \u043a\u0430\u043a \u0438 \u043e\u0431\u0435\u0449\u0430\u043b, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">func _draw_vert_rect_grid(surf:RID, color:Color, width=1.0, antialiasing=false): \tvar offset = grid_basis.x*2+grid_basis.y \t# Drawing horizontal lines \tfor i in range(1, grid_map_size.x, 3): \t\tfor j in range(1-i%2, grid_map_size.y+1, 2): \t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*i+grid_basis.y*j-offset, grid_basis.x*(i+2)+grid_basis.y*j-offset, color, width, antialiasing) \t\t\t \t# Drawing vertices \tfor i in range(0, grid_map_size.x, 3): \t\tfor j in range(grid_map_size.y): \t\t\tif int(hex_map_size.x)%2 == 1 or not(i == grid_map_size.x-1 and (j == 0 or j == grid_map_size.y-1)): \t\t\t\tif j%2 == i%2: \t\t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(i+1)+grid_basis.y*j-offset, grid_basis.x*i+grid_basis.y*(j+1)-offset, color, width, antialiasing) \t\t\t\telse: \t\t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*i+grid_basis.y*j-offset, grid_basis.x*(i+1)+grid_basis.y*(j+1)-offset, color, width, antialiasing)<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0435\u043f\u043b\u043e\u0445, \u043d\u0438\u0433\u0434\u0435 \u043b\u0438\u043d\u0438\u0438 \u043d\u0435 \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b (\u0441\u0435\u0442\u043a\u0430 \u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u043d\u0430 \u0447\u0435\u0440\u043d\u043e\u043c \u0444\u043e\u043d\u0435, \u0430 \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043b\u0438\u043d\u0438\u0439 \u0432\u0435\u0437\u0434\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430):<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0435\u0442\u043a\u0430 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/089\/a59\/502\/089a595029d85c645337000240a39ed2.png\" width=\"437\" height=\"467\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u0435\u0442\u043a\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/507\/2d5\/c4b\/5072d5c4b45ea9dae69ca1a58231bff2.png\" width=\"500\" height=\"454\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0435\u0442\u043a\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e, \u0442\u0443\u0442 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0442\u0441\u0432\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432, \u0447\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043f\u0443\u0441\u0442\u043e\u0435 \u0447\u0435\u0440\u043d\u043e \u043e\u043a\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0438\u043c\u0435\u0435\u0442 <code>fps<\/code> \u043e\u043a\u043e\u043b\u043e 950, \u0430 \u043f\u0440\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0435\u043b\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c <code>Color8(255, 255, 255, 200)<\/code> \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 10&#215;10 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043a\u0438\u0430 32 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, <code>fps<\/code> \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 260. \u0422\u0430\u043a \u0447\u0442\u043e  \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e \u0440\u0435\u0437\u043e\u043d\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u043e\u0442\u043e\u043c \u043b\u0443\u0447\u0448\u0435 \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0435\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443.<\/p>\n<h3>\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432<\/h3>\n<p>\u0421\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0435\u0433\u043e \u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u043e\u043b\u044c\u0448\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0438\u0437 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445. \u0422\u0430\u043a\u0430\u044f \u0441\u0435\u0442\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0435\u043b\u0430\u0435\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D0%B5%D0%BA%D1%81%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%88%D0%B0%D1%85%D0%BC%D0%B0%D1%82%D1%8B_%D0%93%D0%BB%D0%B8%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE\" rel=\"noopener noreferrer nofollow\">\u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0448\u0430\u0445\u043c\u0430\u0442\u044b<\/a>.<\/p>\n<p>\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u043b\u0438\u0448\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439, \u0445\u043e\u0442\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043c\u043e\u0439 \u043a\u043e\u0434 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043a\u043e\u0434 \u0441\u0430\u0442\u0430\u043d\u044b. \u041f\u043e\u0440\u043e\u0431\u0443\u044e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0447\u0442\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u043e\u0441\u044c. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b1d\/986\/c95\/b1d986c95afef49381eb1d1c6a8483c1.png\" width=\"533\" height=\"490\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0441\u0435\u0442\u043e\u043a. \u0422.\u043a. \u043c\u044b \u0440\u0438\u0441\u0443\u0435\u043c \u0441\u0435\u0442\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c. \u0412 \u043a\u043e\u0434\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0438\u043f <code>Vector2<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0439\u043e \u0441\u0435\u0442\u043a\u043e\u0439, \u043f\u0440\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <code>X<\/code> \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430. \u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0431\u041e\u043b\u044c\u0448\u0430\u044f \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0435\u0433\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0442\u0430\u043a\u0438\u0445 \u0436\u0435. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0446\u0435\u043d\u0442\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0432\u0430 \u0440\u0430\u0437\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0447\u0442\u0435\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u0443:<\/p>\n<pre><code>var hex_map_size = Vector2(5, &lt;\u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f&gt;) ... var diagonal = hex_map_size.x*2-1<\/code><\/pre>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435. \u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0448\u0438\u0440\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438, \u0430 \u0432\u044b\u0441\u043e\u0442\u0430 \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 \u0438 \u0435\u0449\u0435 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0431\u043e\u043b\u044c\u0448\u0435:<\/p>\n<pre><code>... grid_map_size.x = diagonal*2 grid_map_size.y = diagonal*3+1<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u0430\u043c\u0438:<\/p>\n<pre><code>grid_map_size.x = diagonal*3+1 grid_map_size.y = diagonal*2<\/code><\/pre>\n<p>\u0428\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438, \u043d\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u0435\u0440\u0448\u0438\u043d \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/535\/65f\/07b\/53565f07bcfe55b32b60aef964a1220f.png\" width=\"850\" height=\"385\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0440\u0448\u0438\u043d. \u0420\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 \u043f\u043e-\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u0432\u0435\u0434\u044c \u0444\u0438\u0433\u0443\u0440\u0430 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u044e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438, \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0432 \u043e\u0434\u043d\u0443 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c, \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0435\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435. \u0421\u0435\u0442\u043a\u0430 \u043a\u0441\u0442\u0430\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0440\u043e\u0432\u043d\u043e, \u0438 \u0432\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443. \u041f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0432\u0435\u0434\u044c \u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0448\u0438\u0440\u0438\u043d\u044b \u043c\u044b \u0443\u0434\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b. \u0410 \u044d\u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u0447\u0435\u0442\u043d\u0430, \u0432\u0435\u0434\u044c \u043c\u044b \u043e\u0442 \u0447\u0435\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043e\u0442\u043d\u0438\u043c\u0430\u0435\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u0443 (<code>hex_map_size.x*2-1<\/code>). \u0412 \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u043c\u044b \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u044d\u0442\u0443 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c \u043d\u0430 <code>3<\/code>, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0442\u043e\u0436\u0435 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u043c, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u0441\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0435\u0442\u043d\u044b\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0448\u0438\u0440\u0438\u043d\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0447\u0435\u0442\u043d\u044b, \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0447\u0430\u0441\u0442\u0438:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b9f\/b91\/999\/b9fb91999b1442f40629ae5104a8cdfd.png\" width=\"450\" height=\"416\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0442\u044c \u0432 \u0446\u0438\u043a\u043b\u0430\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u0430 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>\u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0441\u0435\u0442\u043a\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0441 \u0441\u0430\u043c\u043e\u0439 \u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0447\u0435\u0442\u043d\u044b\u0439 (\u043f\u0440\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438). \u041f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u0435\u0442\u043a\u0438 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0432 \u0441\u0430\u043c\u043e\u043c \u0432\u0435\u0440\u0445\u0435\u043c \u0440\u044f\u0434\u0443 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u0443 \u044f\u0447\u0435\u0439\u043a\u0443 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u0442.\u043a. \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043b\u0435\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0438\u0436\u0435, \u043d\u043e \u0438 \u043b\u0435\u0432\u0435\u0435 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0442.\u0435. \u043d\u0430 \u043e\u0434\u043d\u0443 \u044f\u0447\u0435\u0439\u043a\u0443. \u0422\u043e\u0433\u0434\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u0441\u044f \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443 \u0431\u043b\u0438\u0436\u0435 \u043a \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e, \u0430 \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u044f\u0434 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043c\u0435\u043d\u044c\u0448\u0435\u0435, \u0447\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u0442.\u043a. \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0432 \u043d\u0435\u043c \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043b\u0435\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0434 \u043d\u0438\u043c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0447\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432 \u0442\u0440\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0438\u0434\u0435\u043c \u043e\u0442 \u043d\u0443\u043b\u044f \u0434\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u0432\u044b\u0441\u043e\u0442\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0441 \u0448\u0430\u0433\u043e\u043c \u0432 \u0442\u0440\u0438, \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u044f\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">for i in range(0, grid_map_size.y\/2, 3): # Drawing vertices   # \u0442\u0443\u0442 i\/3 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0438\u0434\u0435\u043c \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c 3, \u0430 \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445 \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441   start = hex_map_size.x-1 - i\/3  <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0434\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u044b\u0449\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u043d\u0435\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">for i in range(0, grid_map_size.y\/2, 3): # Drawing vertices   # \u0442\u0443\u0442 i\/3 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0438\u0434\u0435\u043c \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c 3, \u0443 \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445 \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430   start = hex_map_size.x-1 - i\/3     for j in range(start, grid_map_size.x\/2):   \tpass # \u041f\u043e\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0447\u0435\u0442\u043d\u044b\u0439, \u0430 \u0432\u043e\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0434\u0443\u0435\u0442 \u0441\u0432\u043e\u044e \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c. \u0427\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b &#8212; \u043e\u043d\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b. \u0414\u0432\u0438\u0433\u0430\u044f\u0441\u044c \u0432\u043d\u0438\u0437 \u043f\u043e \u0440\u044f\u0434\u0430\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430, \u0438\u043d\u0434\u0435\u043a\u0441 \u0440\u044f\u0434\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c, \u043a\u0430\u043a \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u044f\u0434\u0430. \u0415\u0441\u043b\u0438 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u043f\u0440\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0438 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0440\u044f\u0434\u0430 \u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438. \u0422\u0443\u0442 \u0436\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0435 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438, \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u043a\u0430\u0440\u0442\u044b \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0442\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445, \u0442\u043e \u043d\u0435\u0442. <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440. \u041c\u044b \u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0438\u0436\u043d\u044e\u044e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c, \u0435\u0441\u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0440\u044f\u0434\u0430 \u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u0438\u043d\u0430\u0447\u0435 \u0432\u0435\u0440\u0445\u043d\u044e\u044e. \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b 5. \u0422\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u0442\u043d\u044b\u043c, \u043a\u0430\u043a \u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u044f\u0434\u0430 (<code>i<\/code>=0). \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0438\u0436\u043d\u044e\u044e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c, \u043a\u0430\u043a \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0447\u0435\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u0441\u043a\u0430\u0436\u0435\u043c, 4, \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u043c, \u0430 \u0432\u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0447\u0435\u0442\u043d\u044b\u043c. \u0422\u043e\u0433\u0434\u0430 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0432 \u043d\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u0432\u0435\u0440\u0445\u044e\u044e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c, \u0430 \u0432\u0435\u0434\u044c \u043d\u0430\u043c \u0432\u0441\u0435 \u0435\u0449\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u0430 \u043d\u0438\u0436\u043d\u044f\u044f. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f6\/a82\/5b2\/5f6a825b2dfb806187935f186f0616b4.png\" width=\"419\" height=\"385\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0443\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430, \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0432\u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0430 \u0441\u0432\u043e\u0438 \u043c\u0435\u0441\u0442\u0430. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0432\u044b\u0431\u043e\u0440 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0438\u0436\u043d\u0435\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b. \u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0438 \u0440\u044f\u0434\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u0440\u044f\u0434\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b. \u0410 \u043f\u0440\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0435\u0440\u0435\u0434\u0443\u044e\u0442\u0441\u044f, \u043a\u0430\u043a \u0438 \u0447\u0435\u0440\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0447\u0435\u0440\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0435\u0439 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u044f\u0434\u0430 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0438 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0430\u0432\u0435\u043d\u0442\u0432\u043e <code>abs(i%2 - j%2) != parity<\/code>, \u0433\u0434\u0435 <code>parity<\/code> &#8212; \u044d\u0442\u043e \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u0434\u0432\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0435\u0440\u043d\u043e, \u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0438\u0436\u043d\u044e\u044e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c, \u0438\u043d\u0430\u0447\u0435 \u0432\u0435\u0440\u0445\u043d\u044e\u044e. \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u043b\u0438\u043d\u0438\u044f\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b65\/d8d\/3cf\/b65d8d3cf3b1b9627dbacce144e88b19.png\" width=\"761\" height=\"437\"><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">func _draw_hor_hex_grid(surf:RID, color:Color):\t \tvar parity = int(hex_map_size.x)%2 \tvar start \tfor i in range(0, grid_map_size.y\/2, 3): # Drawing vertices \t\tstart = hex_map_size.x - i\/3 - 1 \t\tfor j in range(start, grid_map_size.x\/2): \t\t\tif abs(i%2 - j%2) != parity: \t\t\t\t# Down diagonal \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*(i+1), grid_basis.x*(j+1)+grid_basis.y*i, color)       else: \t\t\t\t# Top diagonal \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j)+grid_basis.y*(i), grid_basis.x*(j+1)+grid_basis.y*(i+1), color)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043d\u0438\u043c\u0430\u0435\u043c \u043e\u0442 \u043a\u0440\u0430\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u043e\u0447\u043a\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e. \u0410 \u0432\u043e\u0442 \u0432 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e. \u0412\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u0441\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">func _draw_hor_hex_grid(surf:RID, color:Color, width=1.0, antialiasing=false): \tvar parity = int(hex_map_size.x)%2 \tvar start \tfor i in range(0, grid_map_size.y\/2, 3): # Drawing vertices \t\tstart = hex_map_size.x - i\/3 - 1 \t\tfor j in range(start, grid_map_size.x\/2): \t\t\tif abs(i%2 - j%2) != parity: \t\t\t\t# Down diagonal \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*(i+1), grid_basis.x*(j+1)+grid_basis.y*i, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(i+1), grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*i, color)  \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*(grid_map_size.y-i-1), grid_basis.x*(j+1)+grid_basis.y*(grid_map_size.y-i), color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(grid_map_size.y-i-1), grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(grid_map_size.y-i), color) \t\t\telse: \t\t\t\t# Top diagonal \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j)+grid_basis.y*(i), grid_basis.x*(j+1)+grid_basis.y*(i+1), color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(i), grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(i+1), color)  \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j)+grid_basis.y*(grid_map_size.y-i), grid_basis.x*(j+1)+grid_basis.y*(grid_map_size.y-i-1), color) \t\t\t\tVisualServer.ca<\/code><\/pre>\n<p>\u041d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e, \u043a\u043e\u0432\u0438\u0434 \u043f\u0435\u0440\u0435\u0436\u0438\u043b\u0438 &#8212; \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0435\u043c \u0438 \u044d\u0442\u043e. \u0417\u0430\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0434\u043b\u044f \u0441\u0435\u0442\u043e\u043a \u0441 \u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/64c\/4c4\/a9e\/64c4c4a9edf3e1e45d90c537b8a53c3d.png\" width=\"760\" height=\"438\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043d\u044f\u043b\u0438 \u0432\u043e \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u043c\u0435\u0448\u0430\u043d\u0438\u043d\u0435 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0435\u0439, \u0442\u043e \u043b\u0438\u0431\u043e \u0432\u044b \u0433\u0435\u043d\u0438\u0439, \u043b\u0438\u0431\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0447\u0442\u043e-\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0435 \u043b\u0435\u0433\u0447\u0435, \u043d\u043e \u0440\u0430\u0434\u0443\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0441\u0435\u0442\u043a\u0443. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 &#8212; \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0431\u043e\u0441\u0441\u043e\u043c \u0432 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0435 \u043e \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0435\u0442\u043e\u043a.<\/p>\n<p>\u0422\u0443\u0442 \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0441 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u0435\u0434\u044c \u043e\u0442\u0440\u0435\u0437\u043a\u0438 \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u0432 \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u043f\u0440\u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0432\u0430 \u0440\u0430\u0437\u0430, \u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f. \u0421\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u043e\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u0438 \u0432 \u0443\u0433\u043b\u0430\u0445. \u041d\u0430\u043f\u043e\u043c\u043d\u044e \u043a\u043e\u0434 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435:<\/p>\n<pre><code class=\"cpp\">for i in range(1, grid_map_size.y, 3): \tfor j in range(1-i%2, grid_map_size.x+1, 2): \t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*i, grid_basis.x*j+grid_basis.y*(i+2), color, width, antialiasing)<\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0432 \u0435\u0433\u043e \u0432 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u0440\u0438\u0432\u043e\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0447\u0435\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u043a\u0430\u0440\u0442\u044b, \u0432\u0435\u0434\u044c \u043f\u0440\u0438 \u043d\u0438\u0445 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u044f\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0430 \u043f\u0440\u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u044d\u0442\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e. \u042d\u0442\u043e \u0432\u044b\u0442\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0440\u044f\u0434\u0443, \u043f\u0440\u0438 \u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u043d\u043e \u043d\u0435\u0447\u0435\u0442\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c, \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0414\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u0438 \u0440\u044f\u0434\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0442\u043e \u0440\u0438\u0441\u0443\u0435\u043c \u0431\u0435\u0437 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0438\u043d\u0430\u0447\u0435 \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c. \u041f\u0438\u0445\u0430\u0442\u044c \u0441\u044e\u0434\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u0432\u0435\u0434\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0440\u0442\u044b \u0438 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 <code>abs(parity-i%2)<\/code>. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u044e &#8212; <code>parity<\/code> \u044d\u0442\u043e \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u0434\u0432\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0430\u043c\u0438, \u043f\u0440\u0438 \u0447\u0435\u0442\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 \u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u043a\u0430\u0440\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 &#8212; \u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u044d\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0446\u0438\u043a\u043b\u0435:<\/p>\n<pre><code class=\"cpp\">for i in range(1, grid_map_size.y, 3): \tfor j in range(abs(parity-i%2), grid_map_size.x+1, 2): \t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*i, grid_basis.x*j+grid_basis.y*(i+2), color, width, antialiasing)<\/code><\/pre>\n<p>\u0426\u0435\u043b\u044c \u043f\u043e\u0447\u0442\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043b\u0438\u0448\u043d\u0438\u0445 \u043b\u0438\u043d\u0438\u0439 \u043f\u043e \u0443\u0433\u043b\u0430\u043c:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/836\/aae\/0d6\/836aae0d68422ec5e51177bfbc81ea93.png\" width=\"460\" height=\"410\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u043b\u0438\u043d\u0438\u0439 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u044e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0433\u0440\u0430\u043d\u0438\u0446. \u0414\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446 \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0440\u044f\u0434\u043e\u043c \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443 \u0431\u043b\u0438\u0436\u0435 \u043a \u043b\u0435\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u043c\u0438\u043d\u0443\u0441 \u0438\u043d\u0434\u0435\u043a\u0441 \u0440\u044f\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">... start = hex_map_size.x-1 - i\/3<\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0434\u0442\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0440\u044f\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f, \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043b\u0435\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0414\u043b\u044f \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0430\u0440\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u044f\u0434\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u043a\u0430\u0440\u0442\u044b, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043d\u044f\u0432 \u043e\u0442 \u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0435\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">... start = (i-grid_map_size.y\/2)\/3<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 \u043b\u0435\u0432\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0414\u043b\u044f \u043f\u0440\u0430\u0432\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0440\u0430\u0437\u0438\u043c \u043b\u0435\u0432\u044b\u0435 \u0432 \u0441\u0438\u043b\u0443 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">for i in range(1, grid_map_size.y, 3): \tif i &lt;= grid_map_size.y\/2: \t\tstart = hex_map_size.x-1 - i\/3 \telse: \t\tstart = (i-grid_map_size.y\/2)\/3  \tfor j in range(abs(parity-i%2), grid_map_size.x+1, 2): \t\tif j &gt;= start and j &lt;= grid_map_size.x-start: # \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u043b\u0438\u0448\u043d\u0438\u0445 \u043b\u0438\u043d\u0438\u0439 \t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*i, grid_basis.x*j+grid_basis.y*(i+2), color, width, antialiasing) <\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0435 &#8212; \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043e\u0441\u0441 \u043f\u043e\u0431\u0435\u0436\u0434\u0435\u043d. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, <code>offset = grid_basis.x+grid_basis.y*2<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0443\u0442 \u043e\u043f\u044f\u0442\u044c \u0438\u0433\u0440\u0430\u0435\u0442 \u0440\u043e\u043b\u044c \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0447\u0435\u0442\u043d\u0430 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441 \u044f\u0447\u0435\u0439\u043a\u0438. <\/p>\n<p>\u0411\u043e\u0441\u0441\u0430 \u0442\u043e \u0443\u0431\u0438\u043b\u0438, \u0430 \u0432\u043e\u0442 \u043b\u0443\u0442 \u0437\u0430\u0431\u044b\u043b\u0438. \u0421 \u043d\u0435\u0433\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u043e\u043a \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432:<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">func _draw_hor_hex_grid(surf:RID, color:Color, width=1.0, antialiasing=false): \tvar parity = int(hex_map_size.x)%2 \tvar offset = grid_basis.x+grid_basis.y*2 + grid_basis.x*(1-parity) \tvar start \tfor i in range(0, grid_map_size.y\/2, 3): # Drawing vertices \t\tstart = hex_map_size.x - i\/3 - 1 \t\tfor j in range(start, grid_map_size.x\/2): \t\t\tif abs(i%2 - j%2) != parity: \t\t\t\t# Down diagonal \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*(i+1)-offset, grid_basis.x*(j+1)+grid_basis.y*i-offset, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(i+1)-offset, grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*i-offset, color)  \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*(grid_map_size.y-i-1)-offset, grid_basis.x*(j+1)+grid_basis.y*(grid_map_size.y-i)-offset, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(grid_map_size.y-i-1)-offset, grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(grid_map_size.y-i)-offset, color) \t\t\telse: \t\t\t\t# Top diagonal \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j)+grid_basis.y*(i)-offset, grid_basis.x*(j+1)+grid_basis.y*(i+1)-offset, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(i)-offset, grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(i+1)-offset, color)  \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j)+grid_basis.y*(grid_map_size.y-i)-offset, grid_basis.x*(j+1)+grid_basis.y*(grid_map_size.y-i-1)-offset, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(grid_map_size.y-i)-offset, grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(grid_map_size.y-i-1)-offset, color)  \tfor i in range(1, grid_map_size.y, 3): \t\tif i &lt;= grid_map_size.y\/2: \t\t\tstart = hex_map_size.x-1 - i\/3 \t\telse: \t\t\tstart = (i-grid_map_size.y\/2)\/3  \t\tfor j in range(abs(parity-i%2), grid_map_size.x+1, 2): \t\t\tif j &gt;= start and j &lt;= grid_map_size.x-start: \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*j+grid_basis.y*i-offset, grid_basis.x*j+grid_basis.y*(i+2)-offset, color, width, antialiasing) <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca6\/6c2\/59e\/ca66c259e0cc224c12c3809676e39c6b.gif\" width=\"463\" height=\"424\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">func _draw_vert_hex_grid(surf:RID, color:Color, width=1.0, antialiasing=false): \tvar parity = int(hex_map_size.x)%2 \tvar offset = grid_basis.x*2+grid_basis.y + (1-parity)*grid_basis.y \tvar start \tfor j in range(0, grid_map_size.x\/2, 3): # Drawing vertices \t\tstart = hex_map_size.x - j\/3 - 1 \t\tfor i in range(start, grid_map_size.y\/2): \t\t\tif abs(i%2 - j%2) != parity: \t\t\t\t# Down diagonal \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j+1)+grid_basis.y*(i)-offset, grid_basis.x*(j)+grid_basis.y*(i+1)-offset, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(i)-offset, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(i+1)-offset, color)  \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j+1)+grid_basis.y*(grid_map_size.y-i)-offset, grid_basis.x*(j)+grid_basis.y*(grid_map_size.y-i-1)-offset, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(grid_map_size.y-i)-offset, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(grid_map_size.y-i-1)-offset, color) \t\t\telse: \t\t\t\t# Top diagonal \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j)+grid_basis.y*(i)-offset, grid_basis.x*(j+1)+grid_basis.y*(i+1)-offset, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(i)-offset, grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(i+1)-offset, color)  \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(j)+grid_basis.y*(grid_map_size.y-i)-offset, grid_basis.x*(j+1)+grid_basis.y*(grid_map_size.y-i-1)-offset, color) \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*(grid_map_size.x-j)+grid_basis.y*(grid_map_size.y-i)-offset, grid_basis.x*(grid_map_size.x-j-1)+grid_basis.y*(grid_map_size.y-i-1)-offset, color)  \tfor i in range(1, grid_map_size.x, 3): \t\tif i &lt;= grid_map_size.x\/2: \t\t\tstart = hex_map_size.x-1 - i\/3 \t\telse: \t\t\tstart = (i-grid_map_size.x\/2)\/3  \t\tfor j in range(abs(parity-i%2), grid_map_size.y+1, 2): \t\t\tif j &gt;= start and j &lt;= grid_map_size.y-start: \t\t\t\tVisualServer.canvas_item_add_line(surf, grid_basis.x*i+grid_basis.y*j-offset, grid_basis.x*(i+2)+grid_basis.y*(j)-offset, color, width, antialiasing) <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a1d\/b4e\/e04\/a1db4ee0450a079e186f48a3226c66f2.gif\" width=\"463\" height=\"424\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<h3>\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432<\/h3>\n<p>\u0422\u0443\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0441\u0441\u043b\u0430\u0431\u0438\u0442\u044c\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u0436\u0435\u0441\u0442\u0438 \u0441 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u0443\u0436\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0414\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0448\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u0432\u044b\u0448\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0435\u0434\u0435\u043d\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0435\u0440\u0448\u0438\u043d \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u043b\u0438\u043d\u0438\u044f\u043c\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0448\u0438\u043d, \u0435\u0441\u043b\u0438 \u043b\u0435\u043d\u044c \u043c\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u0430\u0432\u0435\u0440\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">func _get_vert_hex_vertices(hex): \tvar pixel = hex2pixel(hex) \treturn PoolVector2Array([ \t\tpixel+2*grid_basis.x, \t\tpixel+grid_basis.x+grid_basis.y, \t\tpixel-grid_basis.x+grid_basis.y, \t\tpixel-2*grid_basis.x, \t\tpixel-grid_basis.x-grid_basis.y, \t\tpixel+grid_basis.x-grid_basis.y \t]) \t func _get_hor_hex_vertices(hex): \tvar pixel = hex2pixel(hex) \treturn PoolVector2Array([ \t\tpixel+grid_basis.x-grid_basis.y, \t\tpixel+grid_basis.x+grid_basis.y, \t\tpixel+2*grid_basis.y, \t\tpixel-grid_basis.x+grid_basis.y, \t\tpixel-grid_basis.x-grid_basis.y, \t\tpixel-2*grid_basis.y, \t])<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0418 \u0440\u0438\u0441\u0443\u0435\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432 \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044c \u0446\u0435\u043f\u044c:<\/p>\n<pre><code class=\"cpp\">func _draw_hor_hex(hex, surf, color, width=1.0, antialiasing=false): \tvar points = _get_hor_hex_vertices(hex) \tpoints.append(points[0]) # \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u043c \tVisualServer.canvas_item_add_polyline(surf, points, [color], width, antialiasing) \t func _draw_vert_hex(hex, surf, color, width=1.0, antialiasing=false): \tvar points = _get_vert_hex_vertices(hex) \tpoints.append(points[0]) # \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u043c \tVisualServer.canvas_item_add_polyline(surf, points, [color], width, antialiasing)<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c, \u0440\u0438\u0441\u0443\u0435\u043c \u043f\u043e\u043b\u0438\u0433\u043e\u043d:<\/p>\n<pre><code class=\"cpp\">func _fill_hor_hex(hex, surf, color, antialiasing=false): \tvar points = _get_hor_hex_vertices(hex) \tVisualServer.canvas_item_add_polygon(surf, points, [color], [], RID(), RID(), antialiasing) \t func _fill_vert_hex(hex, surf, color, antialiasing=false): \tvar points = _get_vert_hex_vertices(hex) \tVisualServer.canvas_item_add_polygon(surf, points, [color], [], RID(), RID(), antialiasing)<\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0441\u0435 \u044d\u0442\u043e \u043a\u0430\u043a \u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/084\/88a\/b23\/08488ab232be3e99cf9fb2e0e89fcd40.png\" width=\"500\" height=\"207\"><figcaption><\/figcaption><\/figure>\n<h2>\u0428\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u043a\u0438 \u0432 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0438<\/h2>\n<p>\u0427\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432? \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0441\u0435\u0442\u043a\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0432 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0412\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0447\u0438\u0441\u043b\u0430 &#8212; \u0432\u0435\u0437\u0434\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0432 \u0431\u0430\u0437\u0438\u0441, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8212; \u0442\u0430\u043a \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0432 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u044f \u0432\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b? \u0422\u0430\u043a \u0432\u043e\u0442, \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0442\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043f\u043e\u043d\u044f\u043b\u0438, \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439, \u0432\u0435\u0434\u044c \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0430\u0437\u0438\u0441\u0430\u043c\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u0439 \u0437\u0430 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c:<\/p>\n<pre><code class=\"cpp\">... const iso_scale = 2.0<\/code><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0430 \u0434\u0435\u043b\u0438\u043c <code>y<\/code>-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u043d\u0430 \u044d\u0442\u043e \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\"># \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f grid_basis.x = Vector2(long, 0) grid_basis.y = Vector2(0, short\/iso_scale) \t\t\t # \u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f\t grid_basis.x = Vector2(short, 0) grid_basis.y = Vector2(0, long\/iso_scale)<\/code><\/pre>\n<p>\u0418 \u0432\u0441\u0435, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0431\u0430\u0437\u0438\u0441\u044b \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u0432\u0435\u0434\u044c \u043c\u044b \u0438\u0445 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0431\u0430\u0437\u0438\u0441\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u041a\u0430\u043a \u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u0430 \u044d\u0442\u0430 \u0432\u0430\u0448\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430&#8230; \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4d3\/2ac\/67d\/4d32ac67dd3177fb7e127c45a6ff1e4a.gif\" width=\"463\" height=\"424\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0431\u0430\u0437\u0438\u0441\u0430\u043c\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0438 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0435\u0442\u043a\u0443 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u0430 \u0435\u0449\u0435 \u0438 \u043f\u043e\u0432\u0435\u0440\u043d\u0435\u043c \u0435\u0435 \u043d\u0430 45\u00b0, \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<pre><code class=\"cpp\"># \u0434\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 var pw = int(long*cos(PI\/4)) var ph = int(short*cos(PI\/4))  grid_basis.x = Vector2(pw, pw\/iso_scale) grid_basis.y = Vector2(-ph, ph\/iso_scale)  # \u0434\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 var pw = int(short*cos(PI\/4)) var ph = int(long*cos(PI\/4))  grid_basis.x = Vector2(pw, pw\/iso_scale) grid_basis.y = Vector2(-ph, ph\/iso_scale)<\/code><\/pre>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0431\u0430\u0437\u0438\u0441\u044b \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u043c\u044b \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u043c, \u0432\u0435\u0434\u044c \u043e\u043d\u0438 \u0432\u0441\u0435 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u0434\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u0431\u0430\u0437\u0438\u0441\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0441\u044f \u044d\u0442\u0430 \u043c\u0430\u0433\u0438\u044f \u043a\u0430\u043a \u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/272\/c1e\/d4c\/272c1ed4ce60855848b9618da03b11b1.gif\" width=\"537\" height=\"349\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0440\u0430\u0441\u0438\u0432\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0438\u0433\u0440\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0443\u043c\u0435\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u0430 \u044d\u0442\u0438\u0445 \u0441\u0435\u0442\u043a\u0430\u0445 \u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<h3>\u0418\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>\u0421 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0442\u043e\u0436\u0435 \u043c\u0443\u0434\u0440\u0438\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u0432\u0435\u0434\u044c, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 &#8212; \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u043e\u0431\u044b\u0447\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0448\u0442\u0430\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u043b\u0435\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0443\u0433\u043e\u043b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0442\u043e, \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0438 \u0431\u0430\u0437\u0438\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0439 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u0412\u043e\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0438\u0437 \u043f\u043e\u0447\u0442\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043e\u0435\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f02\/395\/8b8\/f023958b8465345e02ed18945adcd320.png\" width=\"611\" height=\"256\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043d\u0430 \u043d\u0435\u0435, \u0432\u0441\u0435 \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u044f\u0441\u043d\u043e. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u043e <code>x<\/code> \u043d\u0430 \u0448\u0435\u0441\u0442\u0438\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u043c\u044b \u0434\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439, \u0430 \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u043f\u043e <code>y<\/code> \u043c\u044b \u0434\u0432\u0438\u0436\u0435\u043c\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u0443 \u044f\u0447\u0435\u0439\u043a\u0443 \u0432\u043f\u0440\u0430\u0432\u043e \u0438 \u043d\u0430 \u0442\u0440\u0438 \u0432\u043d\u0438\u0437. \u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u044d\u0442\u0430 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0430. \u041f\u043e \u044d\u0442\u0438\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"cpp\"># \u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 func get_center_cell(hex:Vector2): \t\treturn Vector2(hex.x*3, hex.y*2+hex.x)  # \u0434\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 func get_center_cell(hex:Vector2): \t\treturn Vector2(hex.x*2+hex.y, hex.y*3)<\/code><\/pre>\n<p>\u0412 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0431\u043b\u0438\u0436\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435 \u0434\u0430\u043b\u044c\u043d\u0438\u0445, \u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0432 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u0442\u043a\u0430\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0443\u043c\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0417\u0434\u0435\u0441\u044c \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u0443\u043c\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u0443\u044e \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0432\u044b\u0448\u0435.<\/p>\n<h3>\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u0442\u043a\u0435<\/h3>\n<p>\u0427\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0437 \u0442\u0440\u0435\u0445, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0422\u043e\u0433\u0434\u0430 \u0441\u0443\u043c\u043c\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043b\u0438\u0431\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430, \u043b\u0438\u0431\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u0432\u043e\u0432\u0441\u0435. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0442\u043e\u0447\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0441\u0443\u043c\u043c\u044b \u043c\u043e\u0434\u0443\u043b\u0435\u0439 <strong>\u0442\u0440\u0435\u0445<\/strong> \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0448\u0435\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0430 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">func hex_distance(hex1:Vector2, hex2:Vector2): \tvar dif = (hex2-hex1) \treturn (abs(dif.x) + abs(dif.y) + abs(-dif.x-dif.y))\/2 # z = -x-y<\/code><\/pre>\n<h2>\u0421\u0435\u0442\u043e\u0447\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e &#8212; \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u041a\u0442\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043e \u0447\u0435\u043c \u0440\u0435\u0447\u044c, \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u0442 \u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0442\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043c\u0438\u0440\u0430\u0445. \u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u0433\u0434\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0442\u0440\u0435\u0442\u044c\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0441\u0435\u0442\u043a\u0443 \u043f\u043e \u0442\u0440\u0435\u043c \u043e\u0441\u044f\u043c \u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0435\u0442\u043a\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc1\/561\/405\/cc1561405646e50ecabfd9c278f9e054.png\" width=\"1149\" height=\"805\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u044d\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0438, \u0441\u0440\u0430\u0432\u043d\u0438\u0432 \u043c\u043e\u0434\u0443\u043b\u0438 \u043d\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u0432\u044b\u0434\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u043e\u0441\u0435\u0432\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u041f\u0440\u044f\u043c\u043e \u043d\u0430 \u043e\u0441\u044f\u0445 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u0430 \u043d\u0443\u043b\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u043c \u0438\u0445 \u043a\u0430\u043a \u043e\u0441\u043e\u0431\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438. \u0414\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0434\u043e\u043b\u044c \u043e\u0441\u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u043a \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043d\u0430 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u043c\u043e\u0434\u0443\u043b\u0438 \u043d\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0440\u0430\u0432\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u043b\u044e\u0431\u0443\u044e \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u0441\u0435\u0439. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043e\u0441\u0438 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435, \u0432 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u043e\u0441\u0442\u044c\u044e \u0437\u043d\u0430\u043a\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e. \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">func direct_hex(hex1:Vector2, hex2:Vector2): \tvar dx = hex2.x - hex1.x \tvar dy = hex2.y - hex1.y \tvar dz = -hex2.x-hex2.y + hex1.x+hex1.y \tif dx == 0: # \u041e\u0441\u044c y \t\treturn Vector2(0, sign(dy)) # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0441\u044c y \telif dy == 0: # \u041e\u0441\u044c x \t\treturn Vector2(sign(dx), 0) # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0441\u044c x \telif dz == 0: # \u041e\u0441\u044c z \t\treturn Vector2(sign(dx), sign(dy)) # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0441\u044c z \telse: \t\tif abs(dz) &gt; abs(dx) and abs(dz) &gt; abs(dy): # \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u043f\u043e z \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \t\t\tif abs(dx) &gt; abs(dy): # \u0442.\u043a. \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u043f\u043e x \u0431\u043e\u043b\u044c\u0448\u0435, \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u044b \u043e\u0442\u043e\u0448\u043b\u0438 \u043f\u043e x \u0434\u0430\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e y, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u044b\u0434\u0430\u0435\u043c \u043e\u0441\u044c x \t\t\t\treturn Vector2(sign(dx), 0) # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0441\u044c x \t\t\telse: # \u0442.\u043a. \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u043f\u043e y \u0431\u043e\u043b\u044c\u0448\u0435, \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u044b \u043e\u0442\u043e\u0448\u043b\u0438 \u043f\u043e y \u0434\u0430\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e x, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u044b\u0434\u0430\u0435\u043c \u043e\u0441\u044c y \t\t\t\treturn Vector2(0, sign(dy)) # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0441\u044c y          \t\telif abs(dy) &gt; abs(dx): # \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u043f\u043e y \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \t\t\tif abs(dz) &gt; abs(dx): # \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \t\t\t\treturn Vector2(0, sign(dy)) # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c y. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e \u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c z-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \t\t\telse: # \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \t\t\t\treturn Vector2(sign(dx), sign(dy)) # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c z          \t\telse: # \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u043f\u043e x \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \t\t\tif abs(dy) &gt; abs(dz): # \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \t\t\t\treturn Vector2(sign(dx), sign(dy)) # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c z \t\t\telse: # \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \t\t\t\treturn Vector2(sign(dx), 0) # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c x<\/code><\/pre>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0442\u043e\u043c\u0443 \u043a\u0442\u043e \u0447\u0438\u0442\u0430\u043b \u043c\u043e\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u043a\u0438, \u043f\u043e\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435, \u0432\u0435\u0434\u044c \u0432 \u043d\u0435\u0439 \u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u043e\u0434\u043d\u0430\u043a\u043e, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u043d\u044f\u0442\u0435\u043d. \u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0430\u0442\u0435\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/212\/567\/e8f\/212567e8f4d3f525a461e2d6cb8261dc.gif\" width=\"670\" height=\"608\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0432\u0435\u0434\u044c \u0440\u0430\u0431\u043e\u0442\u0430 \u0438\u0434\u0435\u0442 \u0441 \u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438, \u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0442\u043a\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043b\u0435\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.<\/p>\n<h2>\u041f\u043e\u0438\u0441\u043a \u043f\u0443\u0442\u0438<\/h2>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0443\u0442\u0438 \u0442\u043e\u0442 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0443 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0441\u0435\u0434\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0440\u0442\u044b. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c &#8212; A*, \u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u043c \u0441\u043e\u0432\u0441\u0435\u043c. <\/p>\n<p>\u0421\u043e\u0441\u0435\u0434\u0438 \u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/21d\/25b\/f77\/21d25bf77caca216cc5d836180d1c089.png\" width=\"675\" height=\"303\"><figcaption><\/figcaption><\/figure>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u043a\u0430\u0440\u0442\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u0430 \u0438\u043c. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0439 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043e\u043d\u0438 \u043f\u043e\u0445\u043e\u0436\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u044f\u0441\u043d\u044f\u0442\u044c \u044f \u0431\u0443\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u0430 \u0434\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b. \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u043a\u0430\u043a \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca5\/86e\/719\/ca586e71938a5ef0c42a09c11417d07d.png\" width=\"493\" height=\"397\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0438\u043d\u0438\u043c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u0430\u0440\u0442\u044b. \u041e\u0441\u0438 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u0438\u0434\u0443\u0442 \u043d\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0438\u0445 \u043d\u0443\u043b\u0435\u043c \u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442. \u0422\u0430\u043a \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <code>Y<\/code> \u043e\u0441\u0438 \u0441\u0435\u0442\u043a\u0438, \u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e <code>Y<\/code>. \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044f\u0441\u044c \u0432\u0434\u043e\u043b\u044c \u043e\u0441\u0438 <code>Y<\/code>, \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u043b\u0435\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441 \u043f\u0440\u0430\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439, \u0442\u043e\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u043d\u0435\u0435 \u0440\u0430\u0441\u0442\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0438 \u043b\u0435\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>floor<\/code>, \u0442.\u043a. \u043a\u043e\u0433\u0434\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0440\u043e\u0432\u043d\u043e \u043c\u0435\u0436\u0434\u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438, \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u043e\u0442, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438. \u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>ceil<\/code> \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b:<\/p>\n<pre><code class=\"cpp\">func _in_rect_grid_hor(hex): \treturn hex.x &gt;= -floor(hex.y\/2) and hex.x &lt; hex_map_size.x-ceil(hex.y\/2) and hex.y &lt; hex_map_size.y and hex.y &gt;= 0<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0436\u0435. \u0412\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043d\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">func _in_rect_grid_vert(hex): \treturn hex.x &gt;= 0 and hex.x &lt; hex_map_size.x and hex.y &gt;= -floor(hex.x\/2) and hex.y &lt; hex_map_size.y-ceil(hex.x\/2)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443. \u0415\u0435 \u0432\u0438\u0434:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d87\/154\/962\/d8715496211f57c5d77a6bdd77b33d3f.png\" width=\"726\" height=\"617\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043a\u0430\u0440\u0442\u044b. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u044b\u043a\u0430\u0432 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043d\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044f \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u0432:<\/p>\n<pre><code class=\"cpp\"># \u0434\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 func _get_hor_hex_map_center(): \treturn Vector2(int((hex_map_size.x-1)\/2), hex_map_size.x-1)  # \u0434\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 func _get_vert_hex_map_center(): \treturn Vector2(hex_map_size.x-1, int((hex_map_size.x-1)\/2))<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u043f\u043e <code>Y<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u044b \u0440\u044f\u0434\u0430 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0442\u0430\u043a \u0438 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e x. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u043a\u0430\u0440\u0442\u0443, \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c. \u041a\u0430\u043a \u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0440\u0430\u043d\u0435\u0435. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e <code>Y<\/code> \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u044d\u0442\u0438\u0445 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0435\u0439, \u0430 \u043f\u043e <code>X<\/code> \u043e\u0434\u043d\u0430 \u0438\u0437 \u0433\u0440\u0430\u043d\u0435\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430 \u043e\u0441\u0438 <code>Y<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0431\u043e \u043f\u0440\u0430\u0432\u0430\u044f \u043b\u0438\u0431\u043e \u043b\u0435\u0432\u0430\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430. \u041a\u0430\u043a\u0430\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u0439, \u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043b\u0435\u0432\u0430\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 (\u0442.\u043a. \u043f\u0440\u0430\u0432\u0430\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430 \u043e\u0441\u0438 <code>Y<\/code>), \u0435\u0441\u043b\u0438 \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 (\u0442.\u043a. \u043b\u0435\u0432\u0430\u044f \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0430 \u043e\u0441\u0438 <code>Y<\/code>). \u0410 \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u0442\u043e \u043d\u0430\u043c \u043f\u043b\u0435\u0432\u0430\u0442\u044c, \u0432\u0435\u0434\u044c \u043d\u0430 \u043d\u0435\u0439 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e <code>Y<\/code> \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e.<\/p>\n<p>\u0412\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u043e\u0431\u0435\u0438\u0445 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0439:<\/p>\n<pre><code class=\"cpp\"># \u0434\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 func _in_hex_grid_hor(hex):     var center = _get_hor_hex_map_center()     var diag = int(hex_map_size.x*2 - 1)     hex -= center # Vector2 passed by value; getting hex regarding map center     if hex.y &lt; 0:         return hex.x &gt;= -diag\/2+abs(hex.y) and hex.x &lt;= diag\/2 and hex.y &gt;= -diag\/2 and hex.y &lt;= diag\/2     else:         return hex.x &gt;= -diag\/2 and hex.x &lt;= diag\/2-abs(hex.y) and hex.y &gt;= -diag\/2 and hex.y &lt;= diag\/2  # \u0434\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 func _in_hex_grid_vert(hex):     var center = _get_vert_hex_map_center()     var diag = int(hex_map_size.x*2 - 1)     hex -= center # Vector2 passed by value; getting hex regarding map center     if hex.x &lt; 0:         return hex.y &gt;= -diag\/2+abs(hex.x) and hex.y &lt;= diag\/2 and hex.x &gt;= -diag\/2 and hex.x &lt;= diag\/2     else:         return hex.y &gt;= -diag\/2 and hex.y &lt;= diag\/2-abs(hex.x) and hex.x &gt;= -diag\/2 and hex.x &lt;= diag\/2<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u043f\u043e\u0434 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ad8\/f03\/b34\/ad8f03b3478fe9e49465451eabb6fc78.gif\" width=\"450\" height=\"443\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0443\u0442\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0449\u0435\u043c \u043f\u0443\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u0439<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">class PriorityStack: \t \tvar items:Array \t \tfunc _init(): \t\titems = Array() \t\t \tfunc empty() -&gt; bool: \t\treturn items.size() == 0 \t\t \tfunc put(item, priority:int) -&gt; void: \t\tif empty(): \t\t\titems.append([item, priority]) \t\telif priority &lt;= items[0][1]: \t\t\titems.insert(0, [item, priority]) \t\telif priority &gt; items[-1][1]: \t\t\titems.append([item, priority]) \t\telse: \t\t\tfor i in range(len(items)): \t\t\t\tif priority &lt;= items[i][1]: \t\t\t\t\titems.insert(i, [item, priority]) \t\t\t\t\tbreak \t\t\t\t\t \tfunc take(): \t\treturn items.pop_front()[0]  func in_map(hex): \tmatch grid_type: \t\tGridTypes.hex: \t\t\tif hex_type == HexTypes.hor: \t\t\t\treturn _in_hex_grid_hor(hex) \t\t\telse: # Vertical \t\t\t\treturn _in_hex_grid_vert(hex) \t\tGridTypes.rect: \t\t\tif hex_type == HexTypes.vert: \t\t\t\treturn _in_rect_grid_vert(hex) \t\t\telse: # Hor orientation \t\t\t\treturn _in_rect_grid_hor(hex)  func can_stand(hex:Vector2, obsts:PoolVector2Array): \treturn in_map(hex) and not (hex in obsts) \t func neighbors(hex_pos:Vector2, obsts:PoolVector2Array): \tvar res:PoolVector2Array = [] \tvar _neighbors = PoolVector2Array([Vector2(-1, 0), Vector2(1, -1), Vector2(0, -1), Vector2(1, 0), Vector2(0, 1), Vector2(-1, 1)]) \tfor i in _neighbors: \t\tif can_stand(i+hex_pos, obsts): \t\t\tres.append(i+hex_pos) \treturn res \t func find_path(start:Vector2, goal:Vector2, obsts:PoolVector2Array): \tvar frontier = PriorityStack.new() \tfrontier.put(start, 0) \tvar came_from = {} \tvar cost_so_far = {} \tcame_from[start] = start \tcost_so_far[start] = 0 \t \tvar current:Vector2 \tvar new_cost:int \t \tif not can_stand(goal, obsts): \t\treturn PoolVector2Array() \t\t \twhile not frontier.empty(): \t\tcurrent = frontier.take() \t\t \t\tif current == goal: \t\t\tbreak \t\t\t \t\tfor next in neighbors(current, obsts): \t\t\tnew_cost = cost_so_far[current] + 1 \t\t\t\t \t\t\tif not (next in cost_so_far) or new_cost &lt; cost_so_far[next]: \t\t\t\tcost_so_far[next] = new_cost \t\t\t\tfrontier.put(next, new_cost+hex_distance(goal, next)) \t\t\t\tcame_from[next] = current \t\t\t\t \tif frontier.empty() and current != goal: \t\treturn PoolVector2Array() \t\t \tcurrent = goal \tvar path = PoolVector2Array([current]) \t \twhile current != start: \t\tcurrent = came_from[current] \t\tpath.append(current) \t \tpath.invert() \tpath.remove(0) # removes first position \treturn path  func hex_distance(hex1:Vector2, hex2:Vector2): \tvar dif = (hex2-hex1) \treturn (abs(dif.x) + abs(dif.y) + abs(-dif.x-dif.y))\/2<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u044f \u0432\u0437\u044f\u043b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0441\u0432\u043e\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u044b, \u0437\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e. \u041f\u043e\u0433\u043b\u0430\u0437\u0435\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u043b\u0438\u043a\u043d\u0443\u0432 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u0422\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/436\/337\/643\/43633764315312101a4d4e17c044db0d.gif\" width=\"450\" height=\"443\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<h2>\u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u0440\u0435\u0437\u043a\u0430<\/h2>\n<p>\u0412\u043e\u0442 \u0441 \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0447\u0442\u043e \u043d\u0438\u0431\u0443\u0434\u044c \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0431\u0440\u0435\u0437\u0435\u043d\u0445\u0435\u043c\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432, \u043e\u0434\u043d\u0430\u043a\u043e \u044f \u043d\u0435 \u0434\u0443\u043c\u0430\u044e \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e 1000 \u043e\u0442\u0440\u0435\u0437\u043a\u043e\u0432 \u0437\u0430 \u043a\u0430\u0434\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043c \u0441\u0435\u0431\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0437\u0430\u0431\u0438\u0442\u044c \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D0%BE%D0%BB%D1%8F%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0435\u0439<\/a>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e, \u043a\u0441\u0442\u0430\u0442\u0438, \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0440 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0414\u0443\u043c\u0430\u044e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0437\u043d\u0430\u044e\u0442 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0442\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u043c \u043d\u0435\u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u043c\u043e\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">func rast_line(hex1, hex2): \tvar N = hex_distance(hex1, hex2) \tif N == 0: return PoolVector2Array([hex1]) \tvar res = PoolVector2Array() \tfor i in range(N+1): \t\tres.append(round_hex(lerp(hex1, hex2, i\/N))) \treturn res<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/be7\/e35\/144\/be7e3514400cf6099e81c0bdd68df267.gif\" width=\"598\" height=\"526\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<h2>\u041f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u043e\u0442 \u0438 \u043f\u043e\u0434\u043e\u0448\u0435\u043b \u0441\u0442\u043e\u043b\u044c \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043a \u043a\u043e\u043d\u0446\u0443. \u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u043d\u0435 \u0437\u0440\u044f. \u041d\u0438\u043a\u0430\u043a\u0443\u044e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0438\u0433\u0440\u0443 \u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0441\u0442\u0430\u043b, \u0438\u0431\u043e \u0442\u0443\u0442 \u0438 \u0442\u0430\u043a \u0445\u0430\u0432\u0430\u0442\u0430\u0435\u0442 \u043d\u0430\u0434 \u0447\u0435\u043c \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044e <a href=\"https:\/\/pastebin.com\/dizyJV9N\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0430<\/a> \u043d\u0430 \u043f\u043e\u0447\u0442\u0438 500 \u0441\u0442\u0440\u043e\u043a. \u042f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0430\u0432\u0442\u043e\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u043a\u0430\u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044f \u0438 \u0434\u0435\u043b\u0430\u043b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u043d\u0438\u043c. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u044f \u0437\u0430\u0431\u044b\u043b \u043f\u0440\u043e \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043b\u0438 \u0443\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0438\u043b\u0438 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0448\u0438\u0431\u0430\u044e\u0441\u044c, \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438.<\/p>\n<p>\u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0432\u043d\u0438\u0435 \u043c\u0435\u0447\u0442\u044b \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e &#171;\u0443\u0431\u0438\u0439\u0446\u044b \u0433\u0435\u0440\u043e\u0435\u0432&#187; \u0438\u043b\u0438 \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0432\u0435\u0447\u0435\u0440. \u0414\u043e \u0441\u043a\u043e\u0440\u043e\u0433\u043e!<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/557496\/\"> https:\/\/habr.com\/ru\/post\/557496\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0422\u0430\u0439\u043b\u043e\u0432\u043e\u0441\u0442\u044c \u0432 \u0438\u0433\u0440\u0430\u0445 \u2013 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0435 \u044f\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0438\u0433\u0440\u0430\u0445 \u0438\u043d\u0434\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u0442\u0430\u0439\u043b\u044b \u2013 \u0432 \u043d\u0438\u0445 \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0431\u0443\u0434\u044c \u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u0443\u0440\u043e\u0432\u043d\u044f \u0438\u043b\u0438 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0438 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f. <\/p>\n<p>\u0412 \u0442\u043e\u043f\u043e\u0432\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u043a\u043e\u043d\u0446\u0430 \u0434\u0435\u0432\u044f\u043d\u043e\u0441\u0442\u044b\u0445 &#8212; \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0447\u0430\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0437\u0430\u043c\u0435\u0441\u0442\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0439 \u2013 \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u043e\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439. \u0418\u043c\u0435\u043d\u043d\u043e \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0435\u0442\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0447\u0438\u0442\u0430\u043b\u0438 \u043c\u043e\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e <a href=\"https:\/\/habr.com\/ru\/post\/554960\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u043a\u0438<\/a>, \u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0443 \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438, \u0441\u0441\u044b\u043b\u0430\u044f\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0435. \u0414\u0430\u0431\u044b \u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u044f \u0432\u0437\u044f\u043b \u0441 <a href=\"https:\/\/www.redblobgames.com\/grids\/hexagons\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 <\/a>\u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c. \u041a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0438\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439, \u0435\u0441\u0442\u044c \u0435\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 <a href=\"https:\/\/habr.com\/ru\/post\/319644\/\" rel=\"noopener noreferrer nofollow\">\u0445\u0430\u0431\u0440\u0435<\/a>. \u0412\u0441\u0435 \u0434\u0435\u043c\u043a\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u043d\u0430 \u0434\u0432\u0438\u0436\u043a\u0435 <a href=\"https:\/\/godotengine.org\/\" rel=\"noopener noreferrer nofollow\">Godot Engine<\/a> v 3.2.3 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0435\u0433\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430.<\/p>\n<p>\u0414\u0443\u043c\u0430\u044e \u0432 \u0446\u0435\u043b\u043e\u043c \u0435\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044f\u0441\u0435\u043d, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.godotengine.org\/ru\/latest\/classes\/class_visualserver.html?highlight=VisualServer#class-visualserver-method-canvas-item-add-line\" rel=\"noopener noreferrer nofollow\">VisualServer.canvas_item_add_line<\/a> &#8212; \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.godotengine.org\/ru\/latest\/classes\/class_visualserver.html?highlight=VisualServer#class-visualserver-method-canvas-item-add-rect\" rel=\"noopener noreferrer nofollow\">VisualServer.canvas_item_add_rect<\/a> &#8212; \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043b\u0438\u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u043e\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.godotengine.org\/ru\/latest\/classes\/class_visualserver.html?highlight=VisualServer#class-visualserver-method-canvas-item-add-polyline\" rel=\"noopener noreferrer nofollow\">VisualServer.canvas_item_add_polyline<\/a> &#8212; \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043b\u0438\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.godotengine.org\/ru\/latest\/classes\/class_visualserver.html?highlight=VisualServer#class-visualserver-method-canvas-item-add-polygon\" rel=\"noopener noreferrer nofollow\">VisualServer.canvas_item_add_polygon<\/a> &#8212; \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043b\u0438\u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u043e\u043c \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/h2>\n<p>\u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438, \u0443 \u043d\u0438\u0445 \u0432\u0441\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0430\u0432\u043d\u044b. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438 \u043b\u0438\u0448\u0435\u043d\u0430 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b \u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u043e\u043a, \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445:<\/p>\n<ul>\n<li>\n<p>\u0422\u0430\u043a\u0438\u0435 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 (\u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0439 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043e\u0441\u0435\u0434):<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<\/li>\n<li>\n<p>\u0410 \u0442\u0430\u043a\u0438\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 (\u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0439 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043e\u0441\u0435\u0434):<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<\/li>\n<\/ul>\n<p>\u0423\u0436\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0438\u043f\u0438\u0447\u043d\u0443\u044e \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 &#8212; \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u044c, \u0432\u0434\u043e\u043b\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u0435\u0442\u043e\u043a. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u044f\u0445. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0435 \u0431\u0443\u0434\u0443, \u0432\u0441\u0435 \u0442\u0430\u043a\u0438 \u043f\u043e\u0441\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u043e\u043a, \u0430 \u043d\u0435 \u0438\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435. <\/p>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u044d\u0442\u043e \u0442\u0430\u043a\u0438 \u0432\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b \u043e\u0441\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043c\u0435\u0449\u0430\u0442\u044c:<\/p>\n<figure class=\"\"><figcaption> <\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <em>\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. <\/em>\u0411\u044b\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f &#8212; \u0447\u0435\u0442\u043d\u044b\u0435 \u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435. \u041e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0441\u043e\u0441\u0435\u0434\u0430 \u0434\u043b\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u0412 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b <em>\u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 <\/em>\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0442.\u0435. \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0438\u0436\u043d\u0435\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043a \u043f\u0440\u0430\u0432\u043e\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439<em>.<\/em><\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u044d\u0442\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u0431\u0430\u0437\u0438\u0441\u043e\u0432. \u0414\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0431\u0430\u0437\u0438\u0441 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u043a \u043d\u0435\u0439 \u043f\u0435\u0440\u0435\u0448\u043b\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0439\u043b\u044b, \u0442\u0430\u043c \u043c\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438\u0437 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u043b\u0438 \u043d\u0430 \u043d\u0435\u0435 \u0440\u0430\u0434\u0438\u0443\u0441-\u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438. \u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0432 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443. <\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0443 \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u044f\u0440\u043a\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0441\u0438:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e-\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442, \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435? \u0422\u0443\u0442 \u0442\u0440\u0438 \u043e\u0441\u0438, \u043f\u0440\u044f\u043c \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0433\u0435\u043d\u0438\u0439 \u0442\u043e\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a &#8212; \u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u043a\u0443\u0431 \u043f\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u0430 \u0435\u0449\u0435 \u0438 \u0434\u043e\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041f\u0440\u0430\u0432\u0434\u0430 \u0432\u043e\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0432 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435, \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u043a\u0438\u043f\u0435\u0442\u044c \u043c\u043e\u0437\u0433\u0438, \u0432\u0435\u0434\u044c \u0442\u0440\u0435\u0442\u044c\u044f \u043e\u0441\u044c \u0442\u0443\u0442 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0435\u0439 \u0438 \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0448\u0430\u0435\u0442. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u043a\u0443\u0431\u044b:<\/p>\n<p><iframe id=\"60a0fd8b0f3ebbcaeba0bde9\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/60a0fd8b0f3ebbcaeba0bde9\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043d\u0430\u0434\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043d\u0430 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u043a\u0443, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0443\u0431\u0438\u043a\u043e\u0432 \u0432 \u0440\u044f\u0434\u0443 \u043d\u0430 \u043e\u0434\u0438\u043d. \u0412\u043a\u043b\u044e\u0447\u0438\u0432 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u044e, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0443\u0431\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a. \u0412\u043a\u043b\u044e\u0447\u0438\u0432 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043b\u0435\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u0412\u043a\u043b\u044e\u0447\u0438\u0432 \u043b\u043e\u0433\u0438\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u044d\u0442\u0438\u0445 \u0441\u0430\u043c\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u043a\u0441\u0442\u0430\u0442\u0438 \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c, \u0432\u0435\u0434\u044c \u043c\u044b \u0441\u0430\u043c\u0438 \u0440\u0435\u0448\u0430\u0435\u043c, \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e 15, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430). \u041d\u0430\u043c \u043d\u0435\u0437\u0430\u0447\u0435\u043c \u0442\u0430\u0441\u043a\u0430\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043b\u0438\u0448\u043d\u044e\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0435\u0435 \u0437\u0430 \u043d\u043e\u043b\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0443\u043c\u043c\u0430 \u0442\u0440\u0435\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0432\u0435\u0437\u0434\u0435 \u0440\u0430\u0432\u043d\u0430 \u043d\u0443\u043b\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0435\u0442\u044c\u044f \u043d\u0430\u043c \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u0432\u0435\u0434\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0434\u0440\u0443\u0433\u0438\u0445. \u0422\u0435\u043f\u0435\u0440\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e &#171;\u043c\u0435\u0448\u0430\u044e\u0449\u0430\u044f&#187; \u0442\u0440\u0435\u0442\u044c\u044f \u043e\u0441\u044c \u0443\u0445\u043e\u0434\u0438\u0442. \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u0438\u0441\u044b \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043e\u0441\u0435\u0434, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432\u0434\u043e\u043b\u044c \u043e\u0441\u0438:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422.\u043a. \u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u043d\u0435\u0442 \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043f\u043e \u0441\u0443\u0442\u0438 \u0432 \u043b\u044e\u0431\u0443\u044e \u0442\u043e\u0447\u043a\u0443. \u0421\u0430\u043c\u044b\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0446\u0435\u043d\u0442\u0440 \u0444\u0438\u0433\u0443\u0440\u044b, \u0432\u0435\u0434\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0433\u043e \u043e\u043d\u0430 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0430.<\/p>\n<h2>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/h2>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439 \u044d\u0442\u043e \u0442\u043e, \u043d\u0430 \u0447\u0435\u043c \u0437\u0430\u043f\u0430\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0435. \u042f \u0441\u043b\u044b\u0448\u0430\u043b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432, \u043f\u043e\u0440\u043e\u0439 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431, \u0433\u0434\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u0435\u0442\u043a\u043e\u0439, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043e\u043a\u0440\u0430\u0448\u0435\u043d\u0430 \u0432 \u0441\u0432\u043e\u0439 \u0446\u0432\u0435\u0442, \u0430 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0446\u0432\u0435\u0442\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u041f\u0440\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u043c\u0430\u0441\u043a\u0443 \u0438 \u043f\u043e \u0446\u0432\u0435\u0442\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u0421\u043b\u043e\u0436\u043d\u043e, \u0441 \u043a\u043e\u0441\u0442\u044b\u043b\u044f\u043c\u0438, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u043e\u0436\u0435\u0442. \u0410 \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440? \u041f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c? \u0412\u044b \u0442\u0443\u0442 \u044f\u0432\u043d\u043e \u043d\u0435 \u0437\u0430 \u044d\u0442\u0438\u043c.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u0432\u0435\u0434\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0442\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435 \u043a\u0430\u043a \u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c, \u0447\u0442\u043e \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043c\u0430\u0442\u0440\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043c \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 (\u0430 &#8212; \u0441\u0442\u043e\u0440\u043e\u043d\u0430):<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0435 (\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435) \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043f\u043e\u043f\u043e\u043b\u0430\u043c \u0437\u0435\u043b\u0435\u043d\u044b\u043c\u0438 (\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438), \u0430 \u0437\u0435\u043b\u0435\u043d\u044b\u0435 \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0423\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043d\u0430 4 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0433\u0434\u0435 \u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u0443\u0433\u043b\u0430\u043c\u0438 \u0441\u0435\u0442\u043a\u0438, \u0430 \u0432\u0435\u0434\u044c \u043d\u0430\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438 \u0440\u043e\u0432\u043d\u043e \u0432 \u0443\u0433\u043b\u044b. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 &#171;\u0433\u0434\u0435 \u0442\u043e&#187;, \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u043f\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0449\u0435 \u043d\u0430 \u043f\u043e\u043f\u043e\u043b\u0430\u043c, \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u0432 \u0443\u0433\u043b\u044b \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0416\u0435\u043b\u0442\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u0414\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0435\u0435 \u0431\u0430\u0437\u0438\u0441\u043e\u0432 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\"># \u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 var hex_size = 32  var short = int(size*sqrt(3)\/2) # 1\/2 from short hex diagonal var long = int(size\/2) # 1\/4 from long hex diagonal<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0431\u0430\u0437\u0438\u0441\u044b \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0430\u0437\u0438\u0441\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0435 \u0431\u0430\u0437\u0438\u0441\u044b \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">...  # Transorm2D \u0432 godot - \u044d\u0442\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0430 3x2, \u0433\u0434\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u043a\u0430\u0437\u044b\u0430\u0435\u0442 # \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0432\u0441\u0435\u043c,  # \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 2x2. \u0421\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, # \u043d\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442. # \u0423 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 - x \u0438 y. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440. X - \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 # \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043c\u0430\u0442\u0440\u0438\u0446\u044b 2x2 (\u043a\u0440\u0430\u0439\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f), Y - \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446.    var grid_basis = Transform2D() # \u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0431\u0430\u0437\u0438\u0441\u043e\u0432 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 var hex_basis = Transform2D() # \u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0431\u0430\u0437\u0438\u0441\u043e\u0432 \u0433\u0435\u043a\u0441\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438  ...    # \u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 grid_basis.x = Vector2(long, 0) grid_basis.y = Vector2(0, short)  hex_basis.x = grid_basis.x*3 + grid_basis.y hex_basis.y = grid_basis.y*2  # \u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438 grid_basis.x = Vector2(short, 0) grid_basis.y = Vector2(0, long) \t\t\t hex_basis.x = grid_basis.x*2 hex_basis.y = grid_basis.x+grid_basis.y*3<\/code><\/pre>\n<p>\u042f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Godot \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0446\u0435\u043b\u043e\u043c. \u0412\u0441\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u044f\u0441\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435, \u043a\u0430\u043a \u0431\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. <\/p>\n<h3>\u0428\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044c<\/h3>\n<p>\u0412\u043e\u0442 \u0437\u0430 \u0447\u0442\u043e \u044f \u043b\u044e\u0431\u043b\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443, \u0442\u0430\u043a \u044d\u0442\u043e \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0437\u0434\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043d\u0442\u0440\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 \u0438\u0437 \u0435\u0433\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0430 \u0441\u0435\u0442\u043a\u0435 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0431\u0430\u0437\u0438\u0441\u044b \u043d\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b:<\/p>\n<pre><code class=\"cpp\">func hex2pixel(hex): \treturn hex.x*hex_basis.x + hex.y*hex_basis.y<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u0431\u0430\u0437\u0438\u0441\u0430\u043c:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 (\u0441\u043c. \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432\u044b\u0448\u0435) \u043a \u0446\u0435\u043d\u0442\u0440\u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u0435\u0440\u0448\u0438\u043d, \u0438\u0431\u043e \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043d\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">func _get_vert_hex_vertices(hex): \tvar pixel = hex2pixel(hex) \treturn PoolVector2Array([ \t\tpixel+2*grid_basis.x, \t\tpixel+grid_basis.x+grid_basis.y, \t\tpixel-grid_basis.x+grid_basis.y, \t\tpixel-2*grid_basis.x, \t\tpixel-grid_basis.x-grid_basis.y, \t\tpixel+grid_basis.x-grid_basis.y \t])<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">func _get_hor_hex_vertices(hex): \tvar pixel = hex2pixel(hex) \treturn PoolVector2Array([ \t\tpixel+grid_basis.x-grid_basis.y, \t\tpixel+grid_basis.x+grid_basis.y, \t\tpixel+2*grid_basis.y, \t\tpixel-grid_basis.x+grid_basis.y, \t\tpixel-grid_basis.x-grid_basis.y, \t\tpixel-2*grid_basis.y, \t])<\/code><\/pre>\n<h3>\u041f\u0438\u043a\u0441\u0435\u043b\u044c \u0432 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a<\/h3>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e \u0441\u0430\u043c\u0430\u044f \u0438\u043d\u0442\u0440\u0438\u0433\u0443\u044e\u0449\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0432\u0435\u0434\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 \u043d\u0435\u0435 \u0440\u0430\u0434\u0438\u0443\u0441-\u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0438\u043a\u0441\u0435\u043b\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">func pixel2hex(pixel): \tvar x = pixel.x\/(2*cw) - pixel.y\/(6*ch) \tvar y = pixel.y\/(3*ch) \treturn round_hex(Vector2(x, y))<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">func pixel2hex(pixel): \tvar x = pixel.x\/(3*cw) \tvar y = pixel.y\/(2*ch) - pixel.x\/(6*cw) \treturn round_hex(Vector2(x, y))<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0431\u0443\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>affine_inverse<\/code> \u0443 <code>Transform2D<\/code>, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439, \u043f\u043e\u0437\u0436\u0435 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0430\u0434\u043e. \u0412\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 <s>(\u0438 \u0437\u0440\u044f)<\/s>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u041a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f, \u0438\u043b\u0438 \u0437\u0430\u0431\u044b\u043b, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/function-x.ru\/return_matrix.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>, \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u0432\u043e\u0439 \u044f\u0437\u044b\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0443\u043d\u043a\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">func invert_basis(basis:Transform2D): # \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \tvar det = basis.x.x*basis.y.y - basis.y.x*basis.x.y \tvar idet = <\/code><\/pre>\n<\/div>\n<\/details>\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-323629","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/323629","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=323629"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/323629\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=323629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=323629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=323629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}