{"id":408085,"date":"2024-06-29T19:56:50","date_gmt":"2024-06-29T19:56:50","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=408085"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=408085","title":{"rendered":"<span>\u0420\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u0432 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 2D-\u0434\u0432\u0438\u0436\u043a\u0430\u0445<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/tm\/rb\/vp\/tmrbvpygkzfu1oiwp9_axrl3l6k.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/tm\/rb\/vp\/tmrbvpygkzfu1oiwp9_axrl3l6k.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u2014 \u0432\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u043d\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f, \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e \u043d\u0435\u0439 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435, \u043b\u0435\u0436\u0430\u0449\u0435\u0439 \u0432 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0441 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0433\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0432\u0441\u0435\u0445 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u0445 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0445\u044d\u0448-\u043a\u0430\u0440\u0442\u044b. \u0415\u0449\u0451 \u044f \u043d\u0430\u043f\u0438\u0448\u0443 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0434\u0435\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0439\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u0438\u0445 \u043a\u043e\u0434 \u0443\u0440\u043e\u0432\u043d\u044f \u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u0430 \u2014 \u043c\u044b \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u0441\u0430\u043c\u0443 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e, \u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433?<\/h3>\n<p>  <\/p>\n<blockquote><p>\u00ab\u0420\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 (ray casting, \u201e\u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439\u201c) \u2014 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043b\u0443\u0447\u0435\u0439 (ray tracing). \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043b\u0443\u0447\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0445 \u0441\u0446\u0435\u043d \u0432 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u2026<\/p>\n<p>  \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b <i>\u043f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0435 \u0438\u0437 \u0433\u043b\u0430\u0437\u0430 \u043b\u0443\u0447\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0443\u0442\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043b\u0443\u0447\u0430<\/i> \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u043e\u043b\u043e\u0447\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430, \u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u0441\u0435\u0442\u043a\u0438 \u2014 \u044d\u0442\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0438\u0434\u0438\u0442 \u0433\u043b\u0430\u0437 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044c.\u00bb \u2014 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/p><\/blockquote>\n<p>  \u041d\u0443, \u0437\u0432\u0443\u0447\u0438\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u0440\u0430\u0432\u0434\u0430? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435. \u0420\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u2014 \u044d\u0442\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432) \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043b\u0443\u0447\u0435\u0439 \u0438\u0437 \u0433\u043b\u0430\u0437\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0438\u0433\u0440\u043e\u043a\u0430) \u0434\u043e \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f (\u043d\u0443, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0430\u043a, \u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435) \u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u0430\u043c\u044b\u0445 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<h3>\u0413\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433?<\/h3>\n<p>  \u0420\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u042f \u0432\u044b\u0434\u0435\u043b\u044e \u0442\u0440\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 2D-\u0434\u0432\u0438\u0436\u043a\u0430\u0445:<\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 3D-\u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u044b \u043d\u0430 2D-\u043a\u0430\u0440\u0442\u0435<\/h4>\n<p>  \u0421\u0430\u043c\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0438\u0433\u0440\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0439 \u044d\u0442\u0443 \u0442\u0435\u0445\u043d\u0438\u043a\u0443, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Wolfenstein 3D. \u041b\u0443\u0447\u0438 \u0432 \u043d\u0435\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0430 \u0438\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e7b\/077\/52a\/e7b07752abe1a72221344fbbbeee75e3.gif\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e7b\/077\/52a\/e7b07752abe1a72221344fbbbeee75e3.gif\"\/><\/div>\n<p>  <i><a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:Simple_raycasting_with_fisheye_correction.gif\" rel=\"nofollow noopener noreferrer\">\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u0441 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0435\u0439 \u0444\u0438\u0448\u0430\u0439<\/a> <a href=\"https:\/\/commons.wikimedia.org\/wiki\/User:LucasVB\" rel=\"nofollow noopener noreferrer\">\u041b\u0443\u043a\u0430\u0441\u0430 \u0412\u0438\u0435\u0439\u0440\u0430<\/a><\/i><\/p>\n<h4>\u0417\u0430\u0434\u0430\u0447\u0430 \u0442\u043e\u0447\u043a\u0438 \u0432 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435<\/h4>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 PIP (point-in-polygon) \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0442\u043e\u0433\u043e, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438, \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0442\u043e\u0447\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442 \u043a\u0440\u0430\u044f \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u0447\u0451\u0442\u043d\u043e, \u0442\u043e \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u0447\u0451\u0442\u043d\u043e, \u0442\u043e \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/b2f\/bb4\/fdf\/b2fbb4fdf939bd74c176f0d1ee9b9969.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b2f\/bb4\/fdf\/b2fbb4fdf939bd74c176f0d1ee9b9969.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u043e\u0447\u043a\u0438 \u0432 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433\u0430<\/i><\/p>\n<h4>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u0430<\/h4>\n<p>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0438\u0433\u0440\u043e\u043a\u0430 \u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/705\/187\/4fc\/7051874fcaf08c725e5f3b74095da460.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/705\/187\/4fc\/7051874fcaf08c725e5f3b74095da460.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u0430<\/i><\/p>\n<h2>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u0430 \u0432 2D-\u0438\u0433\u0440\u0430\u0445<\/h2>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f, \u043a\u0430\u043a \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u043e\u0447\u0435\u043a \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432 \u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043a\u0440\u0443\u0433\u0430\u0445. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u0430\u043f\u043e\u0432 \u044f \u0431\u0443\u0434\u0443 \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0434\u0435\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043d\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u043b\u0438\u0441\u044c \u0438 \u043c\u043e\u0433\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<h3>\u0422\u043e\u0447\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u0435\u0437\u043a\u0430 \u0438 \u043b\u0443\u0447\u0430<\/h3>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u0447\u043a\u0430\u0445 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0438\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0439, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0443\u044e \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<h4>\u0412\u044b\u0432\u043e\u0434 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u044f\u043c\u043e\u0439<\/h4>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043f\u0440\u044f\u043c\u044b\u0445 \u0438 \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/f35\/f77\/fbd\/f35f77fbd2caa312cdff87bed99b8dc3.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f35\/f77\/fbd\/f35f77fbd2caa312cdff87bed99b8dc3.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u044f\u043c\u043e\u0439 \u043b\u0438\u043d\u0438\u0438<\/i><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d77\/894\/af2\/d77894af2afc65d116de966d89db0077.svg\" alt=\"$\\overrightarrow{AP}$\" data-tex=\"inline\"\/> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/62b\/2a3\/7f8\/62b2a37f8283aec5040971690dd61d1d.svg\" alt=\"$\\overrightarrow{AP} = t\\overrightarrow{AB}$\" data-tex=\"inline\"\/>, \u0433\u0434\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/915\/acb\/b16\/915acbb16ed63f15541d3e0bda30d453.svg\" alt=\"$t$\" data-tex=\"inline\"\/> \u2014 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/45b\/0ff\/c9f\/45b0ffc9fe4a814905021de2cf9a5eb7.svg\" alt=\"$(|t| > 1)$&#187; data-tex=&#187;inline&#187;\/> \u0438\u043b\u0438 \u0441\u0436\u0438\u043c\u0430\u0435\u043c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/da1\/c40\/d9f\/da1c40d9f1480cfbc456e49eed84fe88.svg\" alt=\"$(|t| &lt; 1)$\" data-tex=\"inline\"\/>, \u0438 \u043c\u0435\u043d\u044f\u0435\u043c \u043b\u0438 \u043c\u044b \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f75\/27d\/311\/f7527d311321a7fff602bed1676885cf.svg\" alt=\"$(t &lt; 0)$\" data-tex=\"inline\"\/> \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d77\/894\/af2\/d77894af2afc65d116de966d89db0077.svg\" alt=\"$\\overrightarrow{AP}$\" data-tex=\"inline\"\/> \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/22f\/a09\/06c\/22fa0906c23ca7a75d1359f25627e6bc.svg\" alt=\"$\\overrightarrow{AB}$\" data-tex=\"inline\"\/>.<\/p>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/f71\/411\/66d\/f7141166d1efa7fc4e25cfe65a18172c.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f71\/411\/66d\/f7141166d1efa7fc4e25cfe65a18172c.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u044f\u043c\u043e\u0439<\/i><\/p>\n<p>  \u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/915\/acb\/b16\/915acbb16ed63f15541d3e0bda30d453.svg\" alt=\"$t$\" data-tex=\"inline\"\/> \u043a\u0430\u043a \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0a1\/f8a\/4ac\/0a1f8a4ac3fe6bb233167c09c360a783.svg\" alt=\"$|AP| = |t||AB|$\" data-tex=\"inline\"\/>. \u041c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043d\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u043d\u0430:<\/p>\n<ul>\n<li>\u043f\u0440\u044f\u043c\u043e\u0439: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e1d\/b9e\/3af\/e1db9e3af5f03094ab955a83c23b1bf7.svg\" alt=\"$t \\in \\mathbb{R}$\" data-tex=\"inline\"\/>,<\/li>\n<li>\u043b\u0443\u0447\u0435: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/ceb\/8d1\/625\/ceb8d1625734eb9f6e6b019643ab28cf.svg\" alt=\"$t \\geq 0$\" data-tex=\"inline\"\/>,<\/li>\n<li>\u043e\u0442\u0440\u0435\u0437\u043a\u0435 \u043f\u0440\u044f\u043c\u043e\u0439: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/475\/8be\/99c\/4758be99c34a538e9c8f57c7072684b4.svg\" alt=\"$0 \\leq t \\leq 1$\" data-tex=\"inline\"\/>.<\/li>\n<\/ul>\n<p>  \u0412\u044b\u044f\u0441\u043d\u0438\u0432 \u0432\u0441\u0451 \u044d\u0442\u043e, \u043c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f78\/1fd\/9b5\/f781fd9b5f6e24c9af8c49ad2b689841.svg\" alt=\"$\\begin{align} \\overrightarrow{AP} &amp;= t \\overrightarrow{AB} \\\\ P - A &amp;= t (B - A) \\\\ P &amp;= t(B - A) + A \\\\ \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0430\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0443\u044e \u043a\u043e\u0440\u043e\u0442\u043a\u0443\u044e \u043b\u0435\u043a\u0446\u0438\u044e \u041d\u043e\u0440\u043c\u0430 \u041f\u0440\u043e\u043a\u0443\u043f\u0430: <a href=\"https:\/\/www.brightstorm.com\/math\/precalculus\/vectors-and-parametric-equations\/parametrizing-a-line-segment\/\" rel=\"nofollow noopener noreferrer\">Parametrizing a Line Segment \u2014 Concept<\/a>.<\/p>\n<h4>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0442\u043e\u0447\u043a\u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/cf7\/59a\/0df\/cf759a0dfface7fb52b8231eb4fa9e47.svg\" alt=\"$P$\" data-tex=\"inline\"\/> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u0435\u0437\u043a\u0430 \u043f\u0440\u044f\u043c\u043e\u0439, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u0447\u043a\u0430\u043c\u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f6b\/9aa\/2bb\/f6b9aa2bb612b936cf731b846ed495d6.svg\" alt=\"$A$\" data-tex=\"inline\"\/> \u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3da\/707\/00e\/3da70700ecb803cfa36f4c3fca1c0b6f.svg\" alt=\"$B$\" data-tex=\"inline\"\/>, \u0438 \u043b\u0443\u0447\u0430, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u0447\u043a\u0430\u043c\u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/876\/bac\/332\/876bac33233ad5994df33138c2e2653b.svg\" alt=\"$C$\" data-tex=\"inline\"\/> \u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2e2\/3b0\/ca7\/2e23b0ca7b48e0096c7d8eb2d3c3d0ca.svg\" alt=\"$D$\" data-tex=\"inline\"\/>. \u0422\u043e\u0433\u0434\u0430 \u0442\u043e\u0447\u043a\u0443 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/cf7\/59a\/0df\/cf759a0dfface7fb52b8231eb4fa9e47.svg\" alt=\"$P$\" data-tex=\"inline\"\/> \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/671\/b1c\/ed9\/671b1ced972f0c6ebf7c2ea801ac8e4b.svg\" alt=\"$\\left\\{\\begin{align} P &amp;= s(B - A) + A\\text {, where } 0 \\leq s \\leq 1 \\text{, and} \\\\ P &amp;= r(D - C) + C\\text {, where } r \\geq 0 \\text{.} \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0412\u044b\u0447\u0438\u0441\u043b\u0438\u043c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8bc\/837\/5dc\/8bc8375dc6b8abeff08d6da9da469b5d.svg\" alt=\"$s$\" data-tex=\"inline\"\/> \u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b88\/ce3\/99f\/b88ce399fda6c8123ab168cb507210f2.svg\" alt=\"$r$\" data-tex=\"inline\"\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/796\/9a2\/1d0\/7969a21d096cd974766320e8f24d3bb5.svg\" alt=\"$\\begin{align} s(B_x - A_x) + A_x &amp;= r(D_x - C_x) + C_x \\Rightarrow s = \\tfrac{r(D_x - C_x) + (C_x - A_x)}{B_x - A_x} \\\\ s(B_y - A_y) + A_y &amp;= r(D_y - C_y) + C_y \\Rightarrow r = \\tfrac{s(B_y - A_y) + (A_y - C_y)}{D_y - C_y} \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>.<br \/>  \u041f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8bc\/837\/5dc\/8bc8375dc6b8abeff08d6da9da469b5d.svg\" alt=\"$s$\" data-tex=\"inline\"\/> \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/946\/f0e\/467\/946f0e467c908bb8711609d9933ef367.svg\" alt=\"$\\begin{align} &amp;\\tfrac{r(D_x - C_x) + (C_x - A_x)}{B_x - A_x} (B_y - A_y) + A_y = r(D_y - C_y) + C_y \\\\[10pt] &amp;r \\tfrac{(D_x - C_x)(B_y - A_y)}{B_x - A_x} + \\tfrac{(C_x - A_x)(B_y - A_y)}{B_x - A_x} + A_y = r(D_y - C_y) + C_y \\\\[10pt] &amp;r (\\tfrac{(D_x - C_x)(B_y - A_y)}{B_x - A_x} - (D_y - C_y)) = (C_y - A_y) - \\tfrac{(C_x - A_x)(B_y - A_y)}{B_x - A_x} \\\\[10pt] &amp;r \\tfrac{(D_x - C_x)(B_y - A_y) - (D_y - C_y)(B_x - A_x)}{B_x - A_x} = \\tfrac{(C_y - A_y)(B_x - A_x) - (C_x - A_x)(B_y - A_y)}{B_x - A_x} \\\\[10pt] &amp;r = \\tfrac{(C_y - A_y)(B_x - A_x) - (C_x - A_x)(B_y - A_y)}{(D_x - C_x)(B_y - A_y) - (D_y - C_y)(B_x - A_x)} \\\\[10pt] &amp;r = \\tfrac{(B_x - A_x)(C_y - A_y) - (C_x - A_x)(B_y - A_y)}{(D_x - C_x)(B_y - A_y) - (B_x - A_x)(D_y - C_y)} \\\\[10pt] \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u041f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b88\/ce3\/99f\/b88ce399fda6c8123ab168cb507210f2.svg\" alt=\"$r$\" data-tex=\"inline\"\/> \u0432 \u043f\u0435\u0440\u0432\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9ed\/ae6\/c68\/9edae6c68d4d45e11bbf50ab8d9bef12.svg\" alt=\"$\\begin{align} &amp;s(B_x - A_x) + A_x = \\tfrac{s(B_y - A_y) + (A_y - C_y)}{D_y - C_y} (D_x - C_x) + C_x \\\\[10pt] &amp;s(B_x - A_x) + A_x = s \\tfrac{(B_y - A_y)(D_x - C_x)}{D_y - C_y} + \\tfrac{(A_y - C_y)(D_x - C_x)}{D_y - C_y} + C_x \\\\[10pt] &amp;s (\\tfrac{(B_y - A_y)(D_x - C_x)}{D_y - C_y} - (B_x - A_x)) = (A_x - C_x) - \\tfrac{(A_y - C_y)(D_x - C_x)}{D_y - C_y} \\\\[10pt] &amp;s \\tfrac{(B_y - A_y)(D_x - C_x) - (B_x - A_x)(D_y - C_y)}{D_y - C_y} = \\tfrac{(A_x - C_x)(D_y - C_y) - (A_y - C_y)(D_x - C_x)}{D_y - C_y} \\\\[10pt] &amp;s = \\tfrac{(A_x - C_x)(D_y - C_y) - (A_y - C_y)(D_x - C_x)}{(B_y - A_y)(D_x - C_x) - (B_x - A_x)(D_y - C_y)} \\\\[10pt] &amp;s = \\tfrac{(A_x - C_x)(D_y - C_y) - (D_x - C_x)(A_y - C_y)}{(D_x - C_x)(B_y - A_y) - (B_x - A_x)(D_y - C_y)} \\\\[10pt] \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0432 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8bc\/837\/5dc\/8bc8375dc6b8abeff08d6da9da469b5d.svg\" alt=\"$s$\" data-tex=\"inline\"\/> \u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b88\/ce3\/99f\/b88ce399fda6c8123ab168cb507210f2.svg\" alt=\"$r$\" data-tex=\"inline\"\/>, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/cf7\/59a\/0df\/cf759a0dfface7fb52b8231eb4fa9e47.svg\" alt=\"$P$\" data-tex=\"inline\"\/> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/o4\/84\/mb\/o484mbmsntsghda1mdyp_ckj9c8.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/o4\/84\/mb\/o484mbmsntsghda1mdyp_ckj9c8.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo1.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 1<\/a> \u2014 \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f<\/i><\/p>\n<p>  <i>[\u041f\u0440\u0438\u043c. \u043f\u0435\u0440.: \u0432 <a href=\"https:\/\/sszczep.github.io\/ray-casting-in-2d-game-engines\/\" rel=\"nofollow noopener noreferrer\">\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0435<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0441\u0435 \u0434\u0435\u043c\u043e \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b.]<\/i><\/p>\n<h4>\u041f\u043e\u0438\u0441\u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u0438\u0432\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u043e\u0439 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430 \u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <i>\u0442\u0435\u043e\u0440\u0435\u043c\u044b \u041f\u0438\u0444\u0430\u0433\u043e\u0440\u0430<\/i>: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8a1\/65f\/04f\/8a165f04f3c74cbe5b95c64855904c93.svg\" alt=\"$\\sqrt{(C_x - P_x) ^ 2 + (C_y - P_y) ^ 2}$\" data-tex=\"inline\"\/>. \u041d\u043e \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u044f\u043c\u043e\u0439? \u042f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0430 \u043b\u0443\u0447\u0435, \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b88\/ce3\/99f\/b88ce399fda6c8123ab168cb507210f2.svg\" alt=\"$r$\" data-tex=\"inline\"\/>: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/592\/09a\/742\/59209a7421fcc35b746318d69f8be4b9.svg\" alt=\"$|\\overrightarrow{CP_1}| &lt; |\\overrightarrow{CP_2}| \\Leftrightarrow |r_1| &lt; |r_2|$\" data-tex=\"inline\"\/>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/1u\/tz\/ua\/1utzua6cflv4jzt7pzqu1j98uao.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/1u\/tz\/ua\/1utzua6cflv4jzt7pzqu1j98uao.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo2.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 2<\/a> \u2014 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f<\/i><\/p>\n<h3>\u0418\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439<\/h3>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043b\u0443\u0447\u0435\u0439. \u041c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0438\u0445 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e\u0431 \u0438\u0445 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430\u0445 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445.<\/p>\n<h4>\u0418\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u043f\u043e \u0443\u0433\u043b\u0443 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u044d\u0442\u043e \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0432\u043e \u0432\u0441\u0435\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u0443\u0441\u0442\u0438\u0442\u044c 30 \u043b\u0443\u0447\u0435\u0439, \u0441\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u043d\u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b09\/71f\/ed0\/b0971fed0341cb97c5310065dea8a550.svg\" alt=\"$12^\\circ$\" data-tex=\"inline\"\/>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043b\u0443\u0447\u0438.<\/p>\n<p>  \u041f\u0443\u0441\u0442\u044c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2f9\/8c7\/f9a\/2f98c7f9ab62ca73c530fb5b6d9112bf.svg\" alt=\"$P_1 = (x_1, y_1)$\" data-tex=\"inline\"\/> \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0441\u0435\u0445 \u043b\u0443\u0447\u0435\u0439, \u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1d3\/489\/541\/1d3489541f70f5a1fa10259e81551a42.svg\" alt=\"$P_2 = (x_2, y_2)$\" data-tex=\"inline\"\/> \u2014 \u043d\u0435\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u0439, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/195\/a53\/799\/195a5379914fc395e9e04214b48e547e.svg\" alt=\"$P_1$\" data-tex=\"inline\"\/> \u043f\u043e\u0434 \u0443\u0433\u043b\u043e\u043c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/118\/1c5\/7c0\/1181c57c06a9ddf2571de8c4b6efbe4c.svg\" alt=\"$\\phi$\" data-tex=\"inline\"\/>:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/85e\/4cd\/e20\/85e4cde20b74870710c6907e764b4e66.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/85e\/4cd\/e20\/85e4cde20b74870710c6907e764b4e66.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i>\u041b\u0438\u043d\u0438\u044f \u0438\u0437 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u0434 \u043d\u0435\u043a\u0438\u043c \u0443\u0433\u043b\u043e\u043c<\/i><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u0442\u044c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/305\/222\/c13\/305222c1343fb7aa2b5f93e3809a3059.svg\" alt=\"$x_2$\" data-tex=\"inline\"\/> \u043a\u0430\u043a <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c71\/a52\/b23\/c71a52b23e334b5184059015fcc83596.svg\" alt=\"$x_1 + dx$\" data-tex=\"inline\"\/>, \u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f3c\/091\/897\/f3c0918974b82c78cca36b772677d731.svg\" alt=\"$y_2$\" data-tex=\"inline\"\/> \u043a\u0430\u043a <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/cea\/00b\/b1b\/cea00bb1b6598bc7fb056cbdcffa4107.svg\" alt=\"$y_1 - dy$\" data-tex=\"inline\"\/> (\u043d\u0430\u0448\u0430 \u043e\u0441\u044c Y \u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u0430, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043c\u0438\u043d\u0443\u0441).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0434\u043b\u044f <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/ae3\/ca5\/c31\/ae3ca5c319e924d763b807bf39e8a8ee.svg\" alt=\"$dx$\" data-tex=\"inline\"\/> \u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/063\/be9\/19e\/063be919eded8aa0c0e1c5db87e14264.svg\" alt=\"$dy$\" data-tex=\"inline\"\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/219\/b05\/d88\/219b05d888a67e0b50566282c4427317.svg\" alt=\"$\\left\\{\\begin{align} \\sin(\\phi) &amp;= \\tfrac{dy}{\\mathit{dist}} \\Rightarrow dy = \\mathit{dist} * \\sin(\\phi) \\\\ \\cos(\\phi) &amp;= \\tfrac{dx}{\\mathit{dist}} \\Rightarrow dx = \\mathit{dist} * \\cos(\\phi) \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9ef\/798\/749\/9ef7987494fcd0c5232817a8ffd15037.svg\" alt=\"$\\mathit{dist}$\" data-tex=\"inline\"\/> \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f (\u043c\u044b \u0438\u0449\u0435\u043c \u043b\u044e\u0431\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u0439), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0447\u0442\u043e <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e43\/53c\/e21\/e4353ce21a44c89764c59fe6b899299a.svg\" alt=\"$\\mathit{dist} = 1$\" data-tex=\"inline\"\/>. \u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/405\/c59\/a7b\/405c59a7b6361024a864544d125fe966.svg\" alt=\"$P_2 = (x_1 + \\sin(\\phi), y_1 - \\cos(\\phi))$\" data-tex=\"inline\"\/>, \u0433\u0434\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/118\/1c5\/7c0\/1181c57c06a9ddf2571de8c4b6efbe4c.svg\" alt=\"$\\phi$\" data-tex=\"inline\"\/> \u2014 \u044d\u0442\u043e \u0443\u0433\u043b\u043e\u0432\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/zb\/u3\/zn\/zbu3znsnelwslfplbn-1jghncjy.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/zb\/u3\/zn\/zbu3znsnelwslfplbn-1jghncjy.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo3.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 3<\/a> \u2014 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u043d\u0430 \u0443\u0433\u043e\u043b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f<\/i><\/p>\n<h4>\u0418\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u044b<\/h4>\n<p>  \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043b\u0443\u0447\u0435\u0439 \u0432\u043e \u0432\u0441\u0435\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0445 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0440\u0448\u0438\u043d \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043d\u0435 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u044f \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043b\u0443\u0447\u0438. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/6f\/6x\/bf\/6f6xbfs_edzkpkvlkslvn2ebq3y.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/6f\/6x\/bf\/6f6xbfs_edzkpkvlkslvn2ebq3y.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo4.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 4<\/a> \u2014 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u044b<\/i><\/p>\n<h3>\u041e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438<\/h3>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u041c\u044b \u043e\u0441\u0432\u0435\u0442\u0438\u043c \u0432\u0438\u0434\u0438\u043c\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0437\u0430\u043b\u0438\u0432\u043a\u043e\u0439 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<h4>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u043e\u0447\u0435\u043a \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u043e \u0443\u0433\u043b\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7f9\/b27\/900\/7f9b27900cdd4593a66c1a65beaa2e3e.svg\" alt=\"$atan2(y, x)$\" data-tex=\"inline\"\/>. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Atan2\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u043e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043b\u0443\u0447\u0435\u0439:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ho\/1f\/hp\/ho1fhpgmljifhvp1ci7xeylkahq.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/ho\/1f\/hp\/ho1fhpgmljifhvp1ci7xeylkahq.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo5.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 5<\/a> \u2014 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0441 \u0443\u0433\u043b\u0430\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0430\u044f \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c)<\/i><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/v-\/di\/j0\/v-dij0vnmyglk1l9hgl1m1xxqk4.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/v-\/di\/j0\/v-dij0vnmyglk1l9hgl1m1xxqk4.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo6.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 6<\/a> \u2014 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u044b (\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0430\u044f \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c)<\/i><\/p>\n<p>  \u041e\u0431\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u043c\u0438, \u0441\u043a\u0430\u0447\u0443\u0449\u0438\u043c\u0438 \u0438 \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u043c\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<h4>\u0418\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c<\/h4>\n<p>  \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043b\u0443\u0447\u0438 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u2014 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0434\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u043d\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/696\/e28\/e7c\/696e28e7cf11f74e0e91ecd38f2968db.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/696\/e28\/e7c\/696e28e7cf11f74e0e91ecd38f2968db.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043b\u0443\u0447\u0435\u0439 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u0445<\/i><\/p>\n<p>  \u0421\u0430\u043c\u044b\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043b\u0443\u0447\u0435\u0439 \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0443\u0433\u043e\u043b (\u0432 \u043e\u0431\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445) \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0441\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043b\u0443\u0447 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/785\/87c\/ea9\/78587cea9d68e93678392d15a4b1ee9b.svg\" alt=\"$AB$\" data-tex=\"inline\"\/>, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5be\/5ec\/fa8\/5be5ecfa8a6753cb8605acbff84716f4.svg\" alt=\"$A = (A_x, A_y)$\" data-tex=\"inline\"\/> \u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/eb1\/a14\/d18\/eb1a14d188586db27ab0c87fa7db3034.svg\" alt=\"$B = (B_x, B_y)$\" data-tex=\"inline\"\/>. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0442\u043e\u0447\u043a\u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b0a\/d2b\/bc3\/b0ad2bbc35af6a302f970acfc9aa9f06.svg\" alt=\"$C = (C_x, C_y)$\" data-tex=\"inline\"\/>, \u0447\u0442\u043e\u0431\u044b \u043b\u0443\u0447 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/20c\/c43\/51d\/20cc4351dc40a88706a9591f20083fc3.svg\" alt=\"$AC$\" data-tex=\"inline\"\/> \u0431\u044b\u043b \u043f\u043e\u0432\u0451\u0440\u043d\u0443\u0442 \u043d\u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/118\/1c5\/7c0\/1181c57c06a9ddf2571de8c4b6efbe4c.svg\" alt=\"$\\phi$\" data-tex=\"inline\"\/> \u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f6b\/9aa\/2bb\/f6b9aa2bb612b936cf731b846ed495d6.svg\" alt=\"$A$\" data-tex=\"inline\"\/>. <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/876\/bac\/332\/876bac33233ad5994df33138c2e2653b.svg\" alt=\"$C$\" data-tex=\"inline\"\/> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6be\/a15\/0cb\/6bea150cb043098b5925039eabf1ddc0.svg\" alt=\"$\\{\\begin{align} C_x &amp;= (B_x - A_x)\\cos(\\phi) - (B_y - A_y)\\sin(\\phi) + A_x \\\\ C_y &amp;= (B_y - A_y)\\cos(\\phi) + (B_x - A_x)\\sin(\\phi) + A_y \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u2014 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043b\u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u0443\u0433\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/academo.org\/demos\/rotation-about-point\/\" rel=\"nofollow noopener noreferrer\">\u044d\u0442\u043e\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/6c3\/590\/ffc\/6c3590ffc1737002922b082cd8032b67.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6c3\/590\/ffc\/6c3590ffc1737002922b082cd8032b67.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043b\u0443\u0447\u0435\u0439 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u0445 \u0440\u0435\u0448\u0435\u043d\u0430<\/i><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/cl\/da\/yk\/cldaykcxy76enx_-khlv9scppui.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/cl\/da\/yk\/cldaykcxy76enx_-khlv9scppui.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo7.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 7<\/a> \u2014 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0441 \u0443\u0433\u043b\u043e\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0430\u044f \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043b\u0443\u0447\u0430\u043c\u0438)<\/i><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/n8\/qq\/lz\/n8qqlzdh_ifbbu00i3k6hkvuu80.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/n8\/qq\/lz\/n8qqlzdh_ifbbu00i3k6hkvuu80.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo8.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 8<\/a> \u2014 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u044b (\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0430\u044f \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043b\u0443\u0447\u0430\u043c\u0438)<\/i><\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u044d\u0442\u043e \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0443\u0433\u043b\u043e\u0432 (\u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u0443\u0447\u0435\u0439), \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043b\u043e\u0445\u0438\u043c. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u0430\u0432\u043d\u044b\u043c \u0438 \u0442\u043e\u0447\u043d\u044b\u043c. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435.<\/p>\n<h4>\u041a\u0440\u0443\u0433 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0444\u043e\u043d\u0430\u0440\u0438\u043a<\/h4>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0438\u0433\u0440\u043e\u043a\u0430. \u042d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c, \u0441\u043e\u0437\u0434\u0430\u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0443\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b. \u0412 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0434\u0435\u043c\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043c\u0435\u0442\u043e\u0434 <i><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/CanvasRenderingContext2D\/clip\" rel=\"nofollow noopener noreferrer\">CanvasRenderingContext2D.clip()<\/a><\/i>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/b_\/7d\/37\/b_7d37gfezqsqrxsjhpxj2yyugi.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/b_\/7d\/37\/b_7d37gfezqsqrxsjhpxj2yyugi.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo9.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 9<\/a> \u2014 \u043a\u0440\u0443\u0433 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/i><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/pt\/q5\/mb\/ptq5mbvhig2bumxo_4ryhbzrpjs.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/pt\/q5\/mb\/ptq5mbvhig2bumxo_4ryhbzrpjs.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo10.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 10<\/a> \u2014 \u0444\u043e\u043d\u0430\u0440\u0438\u043a<\/i><\/p>\n<p>  \u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u2014 \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f. \u041c\u044b \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0437\u043d\u0430\u0435\u043c \u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0445\u044d\u0448-\u043a\u0430\u0440\u0442\u0430\u0445.<\/p>\n<h3>\u0410 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0435\u0439?<\/h3>\n<p>  \u042f \u0440\u0435\u0434\u043a\u043e \u0432\u0438\u0434\u0435\u043b \u0441\u043b\u0443\u0447\u0430\u0438 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043b\u0443\u0447\u0435\u0439 \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438. \u0421\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043e \u043d\u0438\u0445 \u0443\u043f\u043e\u043c\u044f\u043d\u0443. \u042f \u043f\u043e\u043a\u0430\u0436\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0434\u0435\u043c\u043e, \u0430 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432\u0430\u043c.<\/p>\n<h4>\u0422\u043e\u0447\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u043b\u0443\u0447\u0430<\/h4>\n<p>  \u041f\u0443\u0441\u0442\u044c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/cf7\/59a\/0df\/cf759a0dfface7fb52b8231eb4fa9e47.svg\" alt=\"$P$\" data-tex=\"inline\"\/> \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0447\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f, <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f6b\/9aa\/2bb\/f6b9aa2bb612b936cf731b846ed495d6.svg\" alt=\"$A$\" data-tex=\"inline\"\/> \u2014 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043b\u0443\u0447\u0430, <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3da\/707\/00e\/3da70700ecb803cfa36f4c3fca1c0b6f.svg\" alt=\"$B$\" data-tex=\"inline\"\/> \u2014 \u0442\u043e\u0447\u043a\u043e\u0439 \u043d\u0430 \u043b\u0443\u0447\u0435, <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/876\/bac\/332\/876bac33233ad5994df33138c2e2653b.svg\" alt=\"$C$\" data-tex=\"inline\"\/> \u2014 \u0442\u043e\u0447\u043a\u043e\u0439 \u0446\u0435\u043d\u0442\u0440\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438, \u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b88\/ce3\/99f\/b88ce399fda6c8123ab168cb507210f2.svg\" alt=\"$r$\" data-tex=\"inline\"\/> \u2014 \u0435\u0451 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6df\/3df\/36f\/6df3df36fe2c7fb438f206951ca5d08b.svg\" alt=\"$ \\left\\{\\begin{align} P_x &amp;= t(B_x - A_x) + A_x \\\\ P_y &amp;= t(B_y - A_y) + A_y \\\\ r ^ 2 &amp;= (P_x - C_x) ^ 2 + (P_y - C_y) ^ 2 \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0420\u0435\u0448\u0430\u0435\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/915\/acb\/b16\/915acbb16ed63f15541d3e0bda30d453.svg\" alt=\"$t$\" data-tex=\"inline\"\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1fa\/fe1\/f43\/1fafe1f4375939765022be8c772ba98f.svg\" alt=\"$ \\begin{align} r ^ 2 &amp;= P_x ^ 2 - 2P_xC_x + C_x ^ 2 + P_y ^ 2 - 2P_yC_y + C_y ^ 2 \\\\ r ^ 2 &amp;= (t(B_x - A_x) + A_x) ^ 2 - 2(t(B_x - A_x) + A_x)C_x + C_x ^ 2 \\\\ &amp;+ (t(B_y - A_y) + A_y) ^ 2 - 2(t(B_y - A_y) + A_y)C_y + C_y ^ 2 \\\\ r ^ 2 &amp;= t ^ 2 (B_x - A_x) ^ 2 + 2t(B_x - A_x)A_x + A_x ^ 2 - 2t(B_x - A_x)C_x - 2A_xC_x + C_x ^ 2 \\\\ &amp;+ t ^ 2 (B_y - A_y) ^ 2 + 2t(B_y - A_y)A_y + A_y ^ 2 - 2t(B_y - A_y)C_y - 2A_yC_y + C_y ^ 2 \\\\ 0 &amp;= t ^ 2 ((B_x - A_x) ^ 2 + (B_y - A_y) ^ 2) \\\\ &amp;+ 2t((B_x - A_x)A_x - (B_x - A_x)C_x + (B_y - A_y)A_y - (B_y - A_y)C_y) \\\\ &amp;+ A_x ^ 2 - 2A_xC_x + C_x ^ 2 + A_y ^ 2 - 2A_yC_y + C_y ^ 2 - r ^ 2 \\\\ 0 &amp;= t ^ 2 ((B_x - A_x) ^ 2 + (B_y - A_y) ^ 2) \\\\ &amp;+ 2t((B_x - A_x)(A_x - C_x) + (B_y - A_y)(A_y - C_y)) \\\\ &amp;+ (A_x - C_x) ^ 2 + (A_y - C_y) ^ 2 - r ^ 2 \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u0420\u0435\u0448\u0430\u0435\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d61\/ce3\/b06\/d61ce3b06598c8469139fb04ec26d86b.svg\" alt=\"$\\left\\{\\begin{align} a &amp;= (B_x - A_x) ^ 2 + (B_y - A_y) ^ 2 \\\\ b &amp;= 2((B_x - A_x)(A_x - C_x) + (B_y - A_y)(A_y - C_y)) \\\\ c &amp;= (A_x - C_x) ^ 2 + (A_y - C_y) ^ 2 - r ^ 2 \\\\ \\Delta &amp;= b ^ 2 - 4ac \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<ul>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5a9\/6ae\/ce1\/5a96aece133b0ea72b74ca0e78fcdaae.svg\" alt=\"$\\Delta &lt; 0$\" data-tex=\"inline\"\/>: \u043b\u0443\u0447 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c\u044e,<\/li>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/eec\/633\/76e\/eec63376eef8457b2f6be9adfee07d66.svg\" alt=\"$\\Delta = 0$\" data-tex=\"inline\"\/>: \u043b\u0443\u0447 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 (\u043f\u043e \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439),<\/li>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d5b\/fcd\/d72\/d5bfcdd721e6902536d1cedda0e2439e.svg\" alt=\"$\\Delta > 0$&#187; data-tex=&#187;inline&#187;\/>: \u043b\u0443\u0447 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u0434\u0432\u0443\u0445 \u0442\u043e\u0447\u043a\u0430\u0445.<\/li>\n<\/ul>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/eec\/633\/76e\/eec63376eef8457b2f6be9adfee07d66.svg\" alt=\"$\\Delta = 0$\" data-tex=\"inline\"\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a6d\/0a9\/96d\/a6d0a996d28db6a9f8f8a2f93fb814ee.svg\" alt=\"$ \\begin{align} t = \\tfrac{-b}{2a} \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/ceb\/8d1\/625\/ceb8d1625734eb9f6e6b019643ab28cf.svg\" alt=\"$t \\geq 0$\" data-tex=\"inline\"\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1b9\/bd5\/daf\/1b9bd5daf828933cda365f2d371b1e07.svg\" alt=\"$\\left\\{\\begin{align} P_x &amp;= t(B_x - A_x) + A_x \\\\ P_y &amp;= t(B_y - A_y) + A_y \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d5b\/fcd\/d72\/d5bfcdd721e6902536d1cedda0e2439e.svg\" alt=\"$\\Delta > 0$&#187; data-tex=&#187;inline&#187;\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/72b\/184\/33d\/72b18433d5c10bd07472de4dc56edfa2.svg\" alt=\"$\\left\\{\\begin{align} t_1 &amp;= \\tfrac{-b -\\sqrt{\\Delta}}{2a} \\\\ t_2 &amp;= \\tfrac{-b +\\sqrt{\\Delta}}{2a} \\\\ \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/81f\/d3c\/92e\/81fd3c92eb17466d7dba8ec500ef0fa3.svg\" alt=\"$t_i \\geq 0$\" data-tex=\"inline\"\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/66b\/b67\/4bd\/66bb674bdf2a137936fdd967841597ee.svg\" alt=\"$\\left\\{\\begin{align} P_{i_x} &amp;= t_i(B_x - A_x) + A_x \\\\ P_{i_y} &amp;= t_i(B_y - A_y) + A_y \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/rf\/fm\/pe\/rffmpe2piewypncu9tcwvfohcbe.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/rf\/fm\/pe\/rffmpe2piewypncu9tcwvfohcbe.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo11.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 11<\/a> \u2014 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0430 \u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438<\/i><\/p>\n<h4>\u0418\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438<\/h4>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0434\u0432\u0435 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0447\u043a\u0443 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430.<\/p>\n<p>  \u041f\u0443\u0441\u0442\u044c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2a6\/f7b\/b3d\/2a6f7bb3d055b48f0811a7b094276cdd.svg\" alt=\"$P_i$\" data-tex=\"inline\"\/> \u2014 \u0442\u043e\u0447\u043a\u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445, <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f6b\/9aa\/2bb\/f6b9aa2bb612b936cf731b846ed495d6.svg\" alt=\"$A$\" data-tex=\"inline\"\/> \u2014 \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430, <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/876\/bac\/332\/876bac33233ad5994df33138c2e2653b.svg\" alt=\"$C$\" data-tex=\"inline\"\/> \u2014 \u0446\u0435\u043d\u0442\u0440 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438, \u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b88\/ce3\/99f\/b88ce399fda6c8123ab168cb507210f2.svg\" alt=\"$r$\" data-tex=\"inline\"\/> \u2014 \u0435\u0451 \u0440\u0430\u0434\u0438\u0443\u0441. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7c2\/c0d\/9ee\/7c2c0d9ee42bdea91382b7816c4d4019.svg\" alt=\"$\\overrightarrow{v} = (-C_x, -C_y)$\" data-tex=\"inline\"\/>: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e9\/6d4\/6d2\/3e96d46d214532e0aaf4592f322fa61a.svg\" alt=\"$X^\\prime = X + \\overrightarrow{v}$\" data-tex=\"inline\"\/> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0446\u0435\u043d\u0442\u0440 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u0432 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5ba\/b66\/70e\/5bab6670eddad5666ca20ca7e64f1312.svg\" alt=\"$(0,0)$\" data-tex=\"inline\"\/>.<\/p>\n<p>  \u0418\u0437 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d2b\/b29\/477\/d2bb294771797e85be0f684e659ee7b1.svg\" alt=\"$P_x ^ {\\prime ^ 2} + P_y ^ {\\prime ^ 2} = r ^ 2$\" data-tex=\"display\"\/><\/p>\n<p>  \u0418\u0437 \u043b\u0438\u043d\u0438\u0438 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u0430 \u043a \u0440\u0430\u0434\u0438\u0443\u0441\u0443 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/cc7\/d40\/88d\/cc7d4088d0b408c2e0df8d5c8f8136b9.svg\" alt=\"$\\left\\{\\begin{align} &amp; P_x ^ {\\prime ^ 2} + P_y ^ {\\prime ^ 2} = r ^ 2 \\\\ &amp; P_x ^ {\\prime ^ 2} + P_y ^ {\\prime ^ 2} = P_x ^ \\prime A_x ^ \\prime + P_y ^ \\prime A_y ^ \\prime \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0420\u0435\u0448\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/cc7\/d40\/88d\/cc7d4088d0b408c2e0df8d5c8f8136b9.svg\" alt=\"$\\left\\{\\begin{align} &amp; P_x ^ {\\prime ^ 2} + P_y ^ {\\prime ^ 2} = r ^ 2 \\\\ &amp; P_x ^ {\\prime ^ 2} + P_y ^ {\\prime ^ 2} = P_x ^ \\prime A_x ^ \\prime + P_y ^ \\prime A_y ^ \\prime \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4ca\/ca9\/077\/4caca9077aaaa17c8f1696657351551b.svg\" alt=\"$\\begin{align} &amp; r ^ 2 = P_x ^ \\prime A_x ^ \\prime + P_y ^ \\prime A_y ^ \\prime \\\\ &amp; P_x ^ \\prime = \\tfrac{r ^ 2 - P_y ^ \\prime A_y ^ \\prime }{A_x ^ \\prime} \\text{, where } A_x ^ \\prime \\neq 0 \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u041f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/ab5\/4fb\/db8\/ab54fbdb8a7d4c4e6114fe4fb0667714.svg\" alt=\"$P_x ^ \\prime$\" data-tex=\"inline\"\/> \u0432 \u043f\u0435\u0440\u0432\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8b4\/a26\/73c\/8b4a2673c46034afd19b4cfb604e5f94.svg\" alt=\"$\\begin{align} &amp; (\\tfrac{r ^ 2 - P_y ^ \\prime A_y ^ \\prime }{A_x ^ \\prime}) ^ 2 + P_y ^ {\\prime ^ 2} = r ^ 2 \\\\ &amp; \\tfrac{r ^ 4 - 2 r ^ 2 P_y ^ \\prime A_y ^ \\prime + (P_y ^ \\prime A_y ^ \\prime) ^ 2}{A_x ^{\\prime ^ 2}} + P_y ^ {\\prime ^ 2} = r ^ 2 \\\\ &amp; r ^ 4 - 2 r ^ 2 P_y ^ \\prime A_y ^ \\prime + (P_y ^ \\prime A_y ^ \\prime) ^ 2 + P_y ^ {\\prime ^ 2} A_x ^{\\prime ^ 2} = r ^ 2 A_x ^{\\prime ^ 2} \\\\ &amp; P_y ^ {\\prime ^ 2} (A_x ^{\\prime ^ 2} + A_y ^{\\prime ^ 2}) - P_y ^ \\prime 2r ^ 2 A_y ^ \\prime + r ^ 4 - r ^ 2 A_x ^ {\\prime ^ 2} = 0 \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u0420\u0435\u0448\u0430\u0435\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/071\/52e\/6c9\/07152e6c94658e76427ddb7df2d32de1.svg\" alt=\"$\\left\\{\\begin{align} a &amp;= A_x ^{\\prime ^ 2} + A_y ^{\\prime ^ 2} \\\\ b &amp;= - 2r ^ 2 A_y ^ \\prime \\\\ c &amp;= r ^ 4 - r ^ 2 A_x ^ {\\prime ^ 2} \\\\ \\Delta &amp;= b ^ 2 - 4ac \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<ul>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5a9\/6ae\/ce1\/5a96aece133b0ea72b74ca0e78fcdaae.svg\" alt=\"$\\Delta &lt; 0$\" data-tex=\"inline\"\/>: \u0442\u043e\u0447\u0435\u043a \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043d\u0435\u0442 (\u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438),<\/li>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/eec\/633\/76e\/eec63376eef8457b2f6be9adfee07d66.svg\" alt=\"$\\Delta = 0$\" data-tex=\"inline\"\/>: \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0442\u043e\u0447\u043a\u0430 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 (\u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430),<\/li>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d5b\/fcd\/d72\/d5bfcdd721e6902536d1cedda0e2439e.svg\" alt=\"$\\Delta > 0$&#187; data-tex=&#187;inline&#187;\/>: \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445.<\/li>\n<\/ul>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/eec\/633\/76e\/eec63376eef8457b2f6be9adfee07d66.svg\" alt=\"$\\Delta = 0$\" data-tex=\"inline\"\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4e2\/8f1\/b7e\/4e28f1b7e8bc72f070ca97a60d0aafc4.svg\" alt=\"$\\left\\{\\begin{align} P_y ^ \\prime &amp;= \\tfrac{-b}{2a} \\\\ P_x ^ \\prime &amp;= \\tfrac{r ^ 2 - P_y ^ \\prime A_y ^ \\prime }{A_x ^ \\prime} \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b25\/769\/95f\/b2576995f296e6d945afac3cc0577f82.svg\" alt=\"$\\left\\{\\begin{align} P_x &amp;= P_x ^ \\prime + C_x \\\\ P_y &amp;= P_y ^ \\prime + C_y \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d5b\/fcd\/d72\/d5bfcdd721e6902536d1cedda0e2439e.svg\" alt=\"$\\Delta > 0$&#187; data-tex=&#187;inline&#187;\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/92e\/d7f\/38b\/92ed7f38b5b2aa68d5abe02f2e17a524.svg\" alt=\"$\\left\\{\\begin{align} P_{1_y} ^ \\prime &amp;= \\tfrac{-b -\\sqrt{\\Delta}}{2a} \\\\ P_{2_y} ^ \\prime &amp;= \\tfrac{-b +\\sqrt{\\Delta}}{2a} \\\\ P_{i_x} ^ \\prime &amp;= \\tfrac{r ^ 2 - P_{i_y} ^ \\prime A_y ^ \\prime }{A_x ^ \\prime} \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/857\/1d8\/acd\/8571d8acde2489553b10f2955a803dc8.svg\" alt=\"$\\left\\{\\begin{align} P_{i_x} &amp;= P_{i_x} ^ \\prime + C_x \\\\ P_{i_y} &amp;= P_{i_y} ^ \\prime + C_y \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u041d\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5fa\/e9e\/bc8\/5fae9ebc8b8859f35ad929a5116bc694.svg\" alt=\"$A_x ^ \\prime = 0$\" data-tex=\"inline\"\/>. \u041f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0438\u043c\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/27f\/460\/35b\/27f46035b101ffdbbfe1a3a079c69a2e.svg\" alt=\"$r ^ 2 = P_x ^ \\prime A_x ^ \\prime + P_y ^ \\prime A_y ^ \\prime$\" data-tex=\"inline\"\/>. \u0415\u0441\u043b\u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5fa\/e9e\/bc8\/5fae9ebc8b8859f35ad929a5116bc694.svg\" alt=\"$A_x ^ \\prime = 0$\" data-tex=\"inline\"\/>, \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434: <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3e9\/2e3\/369\/3e92e336981150bc91f36bb72a1f2fc9.svg\" alt=\"$r ^ 2 = P_y ^ \\prime A_y ^ \\prime$\" data-tex=\"inline\"\/> \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/ab5\/4fb\/db8\/ab54fbdb8a7d4c4e6114fe4fb0667714.svg\" alt=\"$P_x ^ \\prime$\" data-tex=\"inline\"\/>. \u0412\u043e\u0442 \u043a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f:<\/p>\n<p>  \u0420\u0435\u0448\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/998\/d66\/489\/998d6648916559bb6229a8dc989db3a3.svg\" alt=\"$\\left\\{\\begin{align} &amp; P_x ^ {\\prime ^ 2} + P_y ^ {\\prime ^ 2} = r ^ 2 \\\\ &amp; P_x ^ {\\prime ^ 2} + P_y ^ {\\prime ^ 2} = P_x ^ \\prime A_x ^ \\prime + P_y ^ \\prime A_y ^ \\prime \\\\ &amp; A_x ^ \\prime = 0 \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7b7\/bbd\/8b4\/7b7bbd8b4236b091123ace10a3ed6b60.svg\" alt=\"$\\begin{align} &amp; r ^ 2 = P_y ^ \\prime A_y ^ \\prime \\\\ &amp; P_y ^ \\prime = \\tfrac{r ^ 2}{A_y ^ \\prime} \\text{, where } A_y ^ \\prime \\neq 0 \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u041f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043c <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/368\/985\/774\/368985774c3aa2c31c794a9b893165e3.svg\" alt=\"$P_y ^ \\prime$\" data-tex=\"inline\"\/> \u0432 \u043f\u0435\u0440\u0432\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/dd6\/31f\/eb4\/dd631feb42956b3ae86a89919e8a8136.svg\" alt=\"$\\begin{align} &amp; P_x ^ {\\prime ^ 2} + (\\tfrac{r ^ 2}{A_y ^ \\prime}) ^ 2 = r ^ 2 \\\\ &amp; P_x ^ {\\prime ^ 2} + \\tfrac{r ^ 4}{A_y ^ {\\prime ^ 2}} = r ^ 2 \\\\ &amp; P_x ^ {\\prime ^ 2} A_y ^ {\\prime ^ 2} + r ^ 4 = r ^ 2 A_y ^ {\\prime ^ 2} \\\\ &amp; P_x ^ {\\prime ^ 2} A_y ^ {\\prime ^ 2} + r ^ 4 - r ^ 2 A_y ^ {\\prime ^ 2} = 0 \\end{align}$\" data-tex=\"display\"\/><\/p>\n<p>  \u0420\u0435\u0448\u0438\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c54\/2c0\/02a\/c542c002a7ccef26d55d011cbbcab60a.svg\" alt=\"$\\left\\{\\begin{align} a &amp;= A_y ^ {\\prime ^ 2} \\\\ b &amp;= 0 \\\\ c &amp;= r ^ 4 - r ^ 2 A_y ^ {\\prime ^ 2} \\\\ \\Delta &amp;= b ^ 2 - 4ac \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<ul>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5a9\/6ae\/ce1\/5a96aece133b0ea72b74ca0e78fcdaae.svg\" alt=\"$\\Delta &lt; 0$\" data-tex=\"inline\"\/>: \u0442\u043e\u0447\u043a\u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 (\u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438),<\/li>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/eec\/633\/76e\/eec63376eef8457b2f6be9adfee07d66.svg\" alt=\"$\\Delta = 0$\" data-tex=\"inline\"\/>: \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0442\u043e\u0447\u043a\u0430 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 (\u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430),<\/li>\n<li><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d5b\/fcd\/d72\/d5bfcdd721e6902536d1cedda0e2439e.svg\" alt=\"$\\Delta > 0$&#187; data-tex=&#187;inline&#187;\/>: \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445.<\/li>\n<\/ul>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/eec\/633\/76e\/eec63376eef8457b2f6be9adfee07d66.svg\" alt=\"$\\Delta = 0$\" data-tex=\"inline\"\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d1f\/943\/74a\/d1f94374aa696817b26c6e70e2f84e58.svg\" alt=\"$\\left\\{\\begin{align} P_x ^ \\prime &amp;= \\tfrac{-b}{2a} \\\\ P_y ^ \\prime &amp;= \\tfrac{r ^ 2}{A_y ^ \\prime} \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b25\/769\/95f\/b2576995f296e6d945afac3cc0577f82.svg\" alt=\"$\\left\\{\\begin{align} P_x &amp;= P_x ^ \\prime + C_x \\\\ P_y &amp;= P_y ^ \\prime + C_y \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d5b\/fcd\/d72\/d5bfcdd721e6902536d1cedda0e2439e.svg\" alt=\"$\\Delta > 0$&#187; data-tex=&#187;inline&#187;\/>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/78c\/d7e\/f4d\/78cd7ef4d53f81ddb41d7ff3a33daebf.svg\" alt=\"$\\left\\{\\begin{align} P_{1_x} ^ \\prime &amp;= \\tfrac{-b -\\sqrt{\\Delta}}{2a} \\\\ P_{2_x} ^ \\prime &amp;= \\tfrac{-b +\\sqrt{\\Delta}}{2a} \\\\ P_{i_y} ^ \\prime &amp;= \\tfrac{r ^ 2}{A_y ^ \\prime} \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/857\/1d8\/acd\/8571d8acde2489553b10f2955a803dc8.svg\" alt=\"$\\left\\{\\begin{align} P_{i_x} &amp;= P_{i_x} ^ \\prime + C_x \\\\ P_{i_y} &amp;= P_{i_y} ^ \\prime + C_y \\end{align}\\right.$\" data-tex=\"display\"\/><\/p>\n<p>  \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/175\/720\/b3d\/175720b3dd516e6690f72e4c8eea8c84.svg\" alt=\"$A_y ^ \\prime = 0$\" data-tex=\"inline\"\/>, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/40c\/b45\/b05\/40cb45b05dde327294c0b98c489b3b31.svg\" alt=\"$A_x ^ \\prime = A_y ^ \\prime = 0$\" data-tex=\"inline\"\/>, \u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043d\u0435\u0442.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/px\/as\/sq\/pxassqvv5vdshvumosr1rpckaqy.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/px\/as\/sq\/pxassqvv5vdshvumosr1rpckaqy.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo12.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 12<\/a> \u2014 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0435\u0439 \u043d\u0430 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438<\/i><\/p>\n<h2>\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0445\u044d\u0448-\u043a\u0430\u0440\u0442 \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0439 \u0411\u0440\u0435\u0437\u0435\u043d\u0445\u044d\u043c\u0430. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0448\u0438\u0440\u043e\u043a\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u044f \u043d\u0430\u043f\u0438\u0448\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0445 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0438\u0434\u0435\u0438 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0445\u044d\u0448-\u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u0433\u0440\u043e\u0432\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043a\u043d\u0430 \u043e\u0431\u0437\u043e\u0440\u0430. \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0445\u044d\u0448-\u043a\u0430\u0440\u0442 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043c\u043d\u043e\u0433\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0432\u0438\u0434\u043d\u044b \u0438\u0433\u0440\u043e\u043a\u0443 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0430 \u043c\u0435\u043d\u044c\u0448\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 (\u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430). \u041a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u0444\u0438\u0433\u0443\u0440\u044b (\u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u043e\u0442\u0440\u0435\u0437\u043a\u0438 \u043f\u0440\u044f\u043c\u044b\u0445). \u0415\u0441\u043b\u0438 \u043e\u0434\u043d\u0430 \u0444\u0438\u0433\u0443\u0440\u0430 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b\u0430\u0441\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f\u0447\u0435\u0435\u043a, \u0442\u043e \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<p>  \u0418\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0445\u044d\u0448-\u043a\u0430\u0440\u0442\u044b (\u0442.\u0435. \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0430 X+&#187;:&#187;+Y), \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 2D-\u043c\u0430\u0441\u0441\u0438\u0432.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0434\u0435\u043c\u043e, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/d9\/af\/rq\/d9afrq2osklbfs_lbdkoeotb3as.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/d9\/af\/rq\/d9afrq2osklbfs_lbdkoeotb3as.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo13.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 13<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0445\u044d\u0448-\u043a\u0430\u0440\u0442\u044b<\/i><\/p>\n<p>  \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u043e\u043a\u043e\u043d \u043e\u0431\u0437\u043e\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0444\u043e\u043d\u0430\u0440\u0438\u043a\u043e\u0432.<\/p>\n<h3>\u041b\u0438\u043d\u0438\u044f \u0441\u0432\u0435\u0440\u0445\u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0411\u0440\u0435\u0437\u0435\u043d\u0445\u044d\u043c\u0430<\/h3>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0445\u044d\u0448-\u043a\u0430\u0440\u0442 \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043b\u0438\u043d\u0438\u0439 \u0411\u0440\u0435\u0437\u0435\u043d\u0445\u044d\u043c\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0435\u0442\u043a\u0443, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0442\u043e\u0447\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043b\u0438\u043d\u0438\u0439 \u0411\u0440\u0435\u0437\u0435\u043d\u0445\u044d\u043c\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bresenham%27s_line_algorithm\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u0430 \u043e\u0431 \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u2014 <a href=\"https:\/\/playtechs.blogspot.com\/2007\/03\/raytracing-on-grid.html\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/cv\/cw\/mw\/cvcwmw6zogo7jknyruerfvzodj0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/cv\/cw\/mw\/cvcwmw6zogo7jknyruerfvzodj0.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\/blob\/main\/assets\/demos\/demo14.js\" rel=\"nofollow noopener noreferrer\">\u0414\u0435\u043c\u043e 14<\/a> \u2014 \u041b\u0438\u043d\u0438\u044f \u0441\u0432\u0435\u0440\u0445\u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0411\u0440\u0435\u0437\u0435\u043d\u0445\u044d\u043c\u0430<\/i><\/p>\n<h2>\u0412\u0441\u0451 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0435\u0446<\/h2>\n<p>  <i>\u041f\u0440\u043e\u0441\u0442\u0438\u0442\u0435, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u0433\u043e\u0432\u043e\u0440\u044e \u043e\u0431 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0430 \u043d\u0435 \u043e \u043b\u0443\u0447\u0430\u0445.<\/i><\/p>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u043c\u044b \u0440\u0430\u0441\u043a\u0440\u044b\u043b\u0438 \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0442\u0435. \u0415\u0441\u043b\u0438 \u044f \u043d\u0430\u0439\u0434\u0443 \u0447\u0442\u043e-\u0442\u043e, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0435\u0435 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u0441\u043e\u0437\u0434\u0430\u043b <a href=\"https:\/\/sszczep.github.io\/ray-casting-in-2d-game-engines\/cheatsheet.html\" rel=\"nofollow noopener noreferrer\">\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0443<\/a> \u0434\u043b\u044f \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0435\u043c\u0430\u0445 \u0438 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u0445.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u044f, \u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0443 \u0438 \u043f\u043e\u0434\u043f\u0438\u0448\u0438\u0442\u0435\u0441\u044c \u043d\u0430 <a href=\"https:\/\/github.com\/sszczep\/ray-casting-in-2d-game-engines\" rel=\"nofollow noopener noreferrer\">\u044d\u0442\u043e\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043d\u0430 GitHub<\/a>.<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/578110\/\"> https:\/\/habr.com\/ru\/articles\/578110\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/tm\/rb\/vp\/tmrbvpygkzfu1oiwp9_axrl3l6k.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/tm\/rb\/vp\/tmrbvpygkzfu1oiwp9_axrl3l6k.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  <\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u2014 \u0432\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u043d\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f, \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e \u043d\u0435\u0439 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435, \u043b\u0435\u0436\u0430\u0449\u0435\u0439 \u0432 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0441 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0433\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0432\u0441\u0435\u0445 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u0445 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0445\u044d\u0448-\u043a\u0430\u0440\u0442\u044b. \u0415\u0449\u0451 \u044f \u043d\u0430\u043f\u0438\u0448\u0443 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0434\u0435\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0439\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u0438\u0445 \u043a\u043e\u0434 \u0443\u0440\u043e\u0432\u043d\u044f \u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437\u0430 \u2014 \u043c\u044b \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u0441\u0430\u043c\u0443 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e, \u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-408085","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/408085","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=408085"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/408085\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=408085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=408085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=408085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}