{"id":299297,"date":"2020-02-26T15:00:25","date_gmt":"2020-02-26T15:00:25","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=299297"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=299297","title":{"rendered":"\u041e\u0436\u0438\u0432\u043b\u044f\u0435\u043c \u0433\u0435\u043a\u0441\u0430\u043f\u043e\u0434\u0430. \u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f"},"content":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/489672\/\">\n<h3>\u0412\u0438\u0434\u0435\u043e \u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0433\u0435\u043a\u0441\u0430\u043f\u043e\u0434\u0430<\/h3>\n<p>  \u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 <a href=\"https:\/\/habr.com\/ru\/post\/488810\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439<\/a> \u0435\u0435 <a href=\"https:\/\/habr.com\/ru\/post\/485856\/\">\u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u0446\u0430<\/a> \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u0437\u0440\u0435\u043b\u0438\u0449\u043d\u0430\u044f, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b \u0432 \u044d\u0442\u043e\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0435\u043e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u0441\u0442-\u0434\u0440\u0430\u0439\u0432 \u0440\u043e\u0431\u043e\u0442\u0430 \u043f\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/RmYl7Q_uSaM?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\" allow=\"encrypted-media; accelerometer; gyroscope; picture-in-picture\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p> <a name=\"habracut\"><\/a><br \/>  \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 Wi-Fi. \u041d\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u0435\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u043e\u0431\u043c\u0430\u043d\u0447\u0438\u0432\u043e\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0433\u0435\u043a\u0441\u0430\u043f\u043e\u0434 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0437\u0430\u0447\u0430\u0442\u043a\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0442\u0430\u043a\u2026<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/Jczoe6xWhUA?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\" allow=\"encrypted-media; accelerometer; gyroscope; picture-in-picture\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0440\u043e\u0431\u043e\u0442 \u0431\u044b\u043b \u0438\u0437\u0433\u043d\u0430\u043d \u0441 \u043c\u044f\u0433\u043a\u043e\u0433\u043e \u043a\u043e\u0432\u0440\u0430 \u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043a\u043e\u043b\u044c\u0437\u043a\u0438\u0439 \u043b\u0438\u043d\u043e\u043b\u0435\u0443\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/CchINXYR3pw?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\" allow=\"encrypted-media; accelerometer; gyroscope; picture-in-picture\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u0433\u0435\u043a\u0441\u0430\u043f\u043e\u0434\u0430<\/h3>\n<p>  \u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/488810\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u0437\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u0440\u043e\u0431\u043e\u0442\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 <i>MotionJob<\/i> \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <i>Motion<\/i>.<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441 <i>MotionJob<\/i> \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434 <i>execute<\/i>, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">int MotionJob::execute(Motion* pMotion)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int MotionJob::execute(Motion* pMotion) {   if(m_Status == NONE &amp;&amp; pMotion != NULL) {            m_pMotion = pMotion;      m_MotionTime = 0;      m_TotalTime = m_pMotion-&gt;totalTime();      m_Status = RUNING;   } else if(pMotion != NULL){          if(m_pMotion-&gt;m_pNext != NULL)        delete m_pMotion-&gt;m_pNext;            m_pMotion-&gt;m_pNext = pMotion;      m_Status = STOPING;   }   return S_OK; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0415\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c, \u0438 \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (<i>RUNING<\/i>). \u0412 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (<i>STOPING<\/i>), \u0430 \u043d\u043e\u0432\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432 \u043f\u043e\u043b\u0435 <i>m_pNext<\/i>.<\/p>\n<p>  <b>\u0412\u0410\u0416\u041d\u041e:<\/b> \u041f\u0440\u0438\u043d\u044f\u0442\u043e \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 <i>Motion <\/i>\u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0447\u0435\u0440\u0435\u0437 <i>new<\/i>)\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u043c <i>MotionJob<\/i> \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0435\u0433\u043e \u043e\u0442\u043c\u0435\u043d\u044b.<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441 <i>MotionJob<\/i>, \u0431\u0443\u0434\u0443\u0447\u0438 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043e\u0442 <i>AJob<\/i>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u044e \u043c\u0430\u0433\u0438\u044e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 <i>onRun<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">void MotionJob::onRun()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void MotionJob::onRun() {    Vector3D points[FOOTS_COUNT];   int pose[FOOTS_COUNT][3];   \/\/ \u0435\u0441\u043b\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u043e, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443   if(m_pMotion == NULL)     return;   \/\/ \u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u043e\u0431\u043e\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043e \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0443\u0433\u043b\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0443\u0441\u0442\u0430\u0432\u0430,   \/\/ \u0438\u043b\u0438 \u043a\u0430\u043a \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u043e\u0447\u0435\u043a \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0446\u044b \u043b\u0430\u043f \u0440\u043e\u0431\u043e\u0442\u0430.   \/\/ \u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d.   int res;   if(m_pMotion-&gt;getPose(min(m_MotionTime, m_pMotion-&gt;maxTime()), pose) == S_OK) {      res = m_pGeksapod-&gt;_setPose(pose);   } else if(m_pMotion-&gt;getPose(min(m_MotionTime, m_pMotion-&gt;maxTime()), points) == S_OK) {      res = m_pGeksapod-&gt;_setPose(points);   }   \/\/ \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f   m_MotionTime += MOTION_JOB_PERIOD;   \/\/ \u0435\u0441\u043b\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435,   \/\/ \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d:   \/\/ \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 m_TotalTime - \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f   if(m_TotalTime &gt; 0) {      m_TotalTime -= MOTION_JOB_PERIOD;     m_TotalTime = max(0,m_TotalTime);    }   \/\/ \u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0446\u0438\u043a\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e,    \/\/ \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438   if(m_TotalTime == 0 &amp;&amp; m_pMotion-&gt;isLooped()) {      m_Status = STOPING;   }   \/\/ \u041d\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438    \/\/ \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043e \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438.   if( (m_MotionTime - m_pMotion-&gt;maxTime() &gt;= MOTION_JOB_PERIOD &amp;&amp; (!m_pMotion-&gt;isLooped() || m_Status == STOPING)) ) { \/\/ \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e     \/\/ \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435     Motion* pNextMotion = m_pMotion-&gt;m_pNext;     m_pMotion-&gt;m_pNext = NULL;     delete m_pMotion;     m_pMotion = NULL;     \/\/ \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0435\u0433\u043e     m_Status = NONE;     execute(pNextMotion);   } else if(m_MotionTime - m_pMotion-&gt;maxTime() &gt;= MOTION_JOB_PERIOD) {     \/\/ \u0434\u043b\u044f \u0437\u0430\u0446\u0438\u043a\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438     \/\/ \u043c\u044b \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0446\u0438\u043a\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f     m_MotionTime = 0;    } }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043c\u0435\u0447\u0443 \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432:  <\/p>\n<ul>\n<li>\u041a\u043b\u0430\u0441\u0441 <i>Motion<\/i> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430 \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u043e\u0447\u0435\u043a \u043a\u043e\u043d\u0446\u043e\u0432 \u043b\u0430\u043f \u0433\u0435\u043a\u0441\u0430\u043f\u043e\u0434\u0430 (<i>Vector3D points[FOOTS_COUNT]<\/i>), \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u0431\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443\u0433\u043b\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0435\u0433\u043e \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432 (<i>int pose[FOOTS_COUNT][3]<\/i>). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434 <i>getPose<\/i> \u0432\u0435\u0440\u043d\u0443\u043b \u043e\u0448\u0438\u0431\u043a\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 <i>getPose<\/i>. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 \u043c\u0435\u0442\u043e\u0434 <i>_setPose<\/i>, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438 \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/li>\n<li>\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043d\u043e\u0441\u0438\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438\u043b\u0438 \u0446\u0438\u043a\u043b\u0438\u0447\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u041e\u0431\u044b\u0447\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0446\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <i>Motion::maxTime()<\/i>) \u0431\u0443\u0434\u0435\u0442 \u0442\u0443\u0442 \u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e.<br \/>  \u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 <i>execute<\/i> (\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c), \u0438\u043b\u0438 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <i>Motion::totalTime()<\/i>).<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">class TransPoseMotion<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class TransPoseMotion: public Motion {   Vector3D m_Pose0[FOOTS_COUNT];  \/\/ \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435   Vector3D m_Offset[FOOTS_COUNT];  \/\/ \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f public:     TransPoseMotion(Vector3D begPose[FOOTS_COUNT], Vector3D endPose[FOOTS_COUNT],         long maxTime, Motion* pNext = NULL);   int getPose(long time, Vector3D points[FOOTS_COUNT]); };<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">class TransAnglesMotion<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class TransAnglesMotion: public Motion {   char m_Pose0[FOOTS_COUNT][3];   char m_Offset[FOOTS_COUNT][3]; public:     TransAnglesMotion(int begPose[FOOTS_COUNT][3], int endPose[FOOTS_COUNT][3],         long maxTime, Motion* pNext = NULL);   int getPose(long actionTime, int pose[FOOTS_COUNT][3]); }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">class LinearMotion<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class LinearMotion: public Motion {   \/\/ \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 (\u0438 \u043a\u043e\u043d\u0446\u0435) \u0448\u0430\u0433\u0430   Vector3D m_Pose0[FOOTS_COUNT];   Vector3D m_Offset; \/\/ \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0448\u0430\u0433\u0430   int m_Heigth;          \/\/ \u0432\u044b\u0441\u043e\u0442\u0430 \u043f\u043e\u0434\u044a\u0435\u043c\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0435\u0439 public:     LinearMotion(int heigth, Vector3D pose0[FOOTS_COUNT], Vector3D speed,          long maxTime, long totalTime = -1, Motion* pNext = NULL);   int getPose(long time, Vector3D points[FOOTS_COUNT]); };<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">class RotateMotion<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">class RotateMotion: public Motion {   \/\/ \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 (\u0438 \u043a\u043e\u043d\u0446\u0435) \u0448\u0430\u0433\u0430   Vector3D m_Pose0[FOOTS_COUNT];    Vector3D m_Angles; \/\/ \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0448\u0430\u0433\u0430   int m_Heigth;           \/\/ \u0432\u044b\u0441\u043e\u0442\u0430 \u043f\u043e\u0434\u044a\u0435\u043c\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0435\u0439 public:     RotateMotion(int heigth, Vector3D pose0[FOOTS_COUNT], Vector3D rotor,          long maxTime, long totalTime = -1, Motion* pNext = NULL);   int getPose(long time, Vector3D points[FOOTS_COUNT]); };<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041a\u043b\u0430\u0441\u0441 TransPoseMotion<\/h4>\n<p>  \u041a\u043b\u0430\u0441\u0441 <i>TransPoseMotion<\/i> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0435. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u0435\u043a \u0438 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">TransPoseMotion::TransPoseMotion(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">TransPoseMotion::TransPoseMotion(Vector3D begPose[FOOTS_COUNT],   Vector3D endPose[FOOTS_COUNT], long maxTime, Motion* pNext) : Motion(maxTime, -1, pNext) {   for(int i = 0; i &lt; FOOTS_COUNT; i++) {     m_Pose0[i] = begPose[i];     m_Offset[i] = endPose[i] - begPose[i];   } }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u043d\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u0431\u0435\u0437 \u0442\u0440\u0443\u0434\u0430 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <i>getPose<\/i> \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043b\u0430\u043f \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442 <i>0<\/i> \u0434\u043e <i>maxTime<\/i>, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">int TransPoseMotion::getPose(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int TransPoseMotion::getPose(long time, Vector3D points[FOOTS_COUNT]) {   for(int i = 0; i &lt; FOOTS_COUNT; i++)     linearFunc(1.0, m_Offset[i], m_Pose0[i], 1.0*time\/m_MaxTime, points[i]); }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e linearFunc, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">void linearFunc(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void linearFunc(float a, Vector3D offset, Vector3D p0, float k,  Vector3D&amp; res) {   res = a*offset*k + p0; }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041a\u043b\u0430\u0441\u0441 TransAnglesMotion<\/h4>\n<p>  \u041b\u043e\u0433\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <i>TransAnglesMotion<\/i> \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0435\u0439 \u0433\u0435\u043a\u0441\u0430\u043f\u043e\u0434\u0430 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0443\u0433\u043b\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043e\u0433\u043d\u0443\u0442\u044b \u0435\u0433\u043e \u0441\u0443\u0441\u0442\u0430\u0432\u044b, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u043a\u043e\u043d\u0446\u043e\u0432 \u043b\u0430\u043f \u0440\u043e\u0431\u043e\u0442\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">TransAnglesMotion::TransAnglesMotion(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">TransAnglesMotion::TransAnglesMotion(int begPose[FOOTS_COUNT][3],   int endPose[FOOTS_COUNT][3], long maxTime, Motion* pNext) : Motion(maxTime, -1, pNext) {   for(int i = 0; i &lt; FOOTS_COUNT; i++) {     for(int j = 0; j &lt; 3; j++) {       m_Pose0[i][j] = begPose[i][j];       m_Offset[i][j] = endPose[i][j] - begPose[i][j];     }   } }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">int TransAnglesMotion::getPose(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int TransAnglesMotion::getPose(long time, int pose[FOOTS_COUNT][3]) {   for(int i = 0; i &lt; FOOTS_COUNT; i++) {     for(int j = 0; j &lt; 3; j++)        pose[i][j] = m_Pose0[i][j] + (int)(1.0*m_Offset[i][j]*time\/m_MaxTime);   }   return S_OK; }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041a\u043b\u0430\u0441\u0441 LinearMotion<\/h4>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u044f\u043c\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u043a\u043e\u0434\u0430 \u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0433\u0435\u043a\u0441\u0430\u043f\u043e\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0442\u044c \u0442\u0440\u0438 \u0442\u043e\u0447\u043a\u0438 \u043e\u043f\u043e\u0440\u044b, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0446\u0435\u043d\u0442\u0440\u0430 \u043c\u0430\u0441\u0441 \u0440\u043e\u0431\u043e\u0442\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0430\u0441\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u042d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430 \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u044f\u043c\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0448\u0430\u0433\u043e\u0432. \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0430\u043a\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0432\u0435 \u0444\u0430\u0437\u044b. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0444\u0430\u0437\u0435 \u043e\u0434\u043d\u0430 \u0442\u0440\u0438\u0430\u0434\u0430 \u043d\u043e\u0433 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0438 \u0438\u0445 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0438\u0430\u0434\u0430 \u043b\u0430\u043f, \u043d\u0435 \u043a\u0430\u0441\u0430\u044f\u0441\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438, \u043f\u043e \u043a\u0440\u0438\u0432\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430. \u0412 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0438 \u0432\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0438\u0430\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043e\u043f\u0440\u0438\u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e. \u0412\u043e \u0432 \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0430\u0437\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u0442\u043e \u0440\u0430\u0437 \u0432\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0438\u0430\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430, \u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ut\/rv\/2k\/utrv2kzjrrigx19ickf04bduuqm.gif\"><\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043d\u0430 <a href=\"https:\/\/news.myseldon.com\/ru\/news\/index\/196900973\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a>, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u043d\u0435\u0439 \u044f \u0443\u0431\u0435\u0434\u0438\u043b\u0441\u044f, \u0447\u0442\u043e \u0435\u0435 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0431\u044b\u043b <a href=\"https:\/\/habr.com\/ru\/post\/426195\/\">habr<\/a>, \u0430 \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0439 <a href=\"https:\/\/habr.com\/ru\/users\/conKORD\/\">conKORD<\/a>.<\/p>\n<p>  \u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443 \u043e\u0442\u0440\u044b\u0432\u0430 \u043b\u0430\u043f \u043e\u0442 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 (<i>heigth<\/i>), \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 (\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435) \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f (<i>pose0<\/i>), \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 (<i>speed<\/i>), \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 (<i>maxTime<\/i>) \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u043e\u0431\u043e\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 (<i>totalTime<\/i>). \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>totalTime<\/i>, \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f \u0437\u0430\u0440\u044f\u0434 \u0440\u043e\u0431\u043e\u0442\u0430 \u0438\u043b\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">LinearMotion::LinearMotion(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">LinearMotion::LinearMotion(int heigth, Vector3D pose0[FOOTS_COUNT], Vector3D speed,   long maxTime, long totalTime, Motion* pNext = NULL)      : Motion(maxTime, true, totalTime, pNext) {   copyPose(m_Pose0, pose0);   m_Offset = 1.0*speed*maxTime\/1000;   m_Heigth = heigth; } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 <i>getPose<\/i> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0434\u0430, \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">int LinearMotion::getPose(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int LinearMotion::getPose(long time, Vector3D points[FOOTS_COUNT]) {   double k = 1.0*time\/m_MaxTime;    if(k &lt; 0.25) {  \/\/ \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0448\u0430\u0433\u0430     linearFunc(2.0, -m_Offset, m_Pose0[LEFT_FRONT_FOOT_IDX], k,       points[LEFT_FRONT_FOOT_IDX]);     linearFunc(2.0, -m_Offset, m_Pose0[LEFT_BACK_FOOT_IDX], k,       points[LEFT_BACK_FOOT_IDX]);     linearFunc(2.0, -m_Offset, m_Pose0[RIGTH_MIDLE_FOOT_IDX], k,       points[RIGTH_MIDLE_FOOT_IDX]);      linearFunc(2.0, m_Offset, m_Pose0[LEFT_MIDLE_FOOT_IDX], k,       points[LEFT_MIDLE_FOOT_IDX]);     linearFunc(2.0, m_Offset, m_Pose0[RIGTH_FRONT_FOOT_IDX], k,       points[RIGTH_FRONT_FOOT_IDX]);     linearFunc(2.0, m_Offset, m_Pose0[RIGTH_BACK_FOOT_IDX], k,       points[RIGTH_BACK_FOOT_IDX]);        int h = (int)m_Heigth*cos(M_PI*k*2);     points[LEFT_MIDLE_FOOT_IDX].z += h;     points[RIGTH_FRONT_FOOT_IDX].z += h;     points[RIGTH_BACK_FOOT_IDX].z += h;    } else if(k &lt; 0.5) { \/\/ \u0432\u0442\u043e\u0440\u0430\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0448\u0430\u0433\u0430          linearFunc(2.0, m_Offset, m_Pose0[LEFT_FRONT_FOOT_IDX], k - 0.5,       points[LEFT_FRONT_FOOT_IDX]);     linearFunc(2.0, m_Offset, m_Pose0[LEFT_BACK_FOOT_IDX], k - 0.5,       points[LEFT_BACK_FOOT_IDX]);     linearFunc(2.0, m_Offset, m_Pose0[RIGTH_MIDLE_FOOT_IDX], k - 0.5,       points[RIGTH_MIDLE_FOOT_IDX]);      linearFunc(2.0, -m_Offset, m_Pose0[LEFT_MIDLE_FOOT_IDX], k - 0.5,       points[LEFT_MIDLE_FOOT_IDX]);     linearFunc(2.0, -m_Offset, m_Pose0[RIGTH_FRONT_FOOT_IDX], k - 0.5,       points[RIGTH_FRONT_FOOT_IDX]);     linearFunc(2.0, -m_Offset, m_Pose0[RIGTH_BACK_FOOT_IDX], k - 0.5,       points[RIGTH_BACK_FOOT_IDX]);      int h = (int)m_Heigth*sin(M_PI*(k - 0.25)*2);     points[LEFT_FRONT_FOOT_IDX].z += h;     points[LEFT_BACK_FOOT_IDX].z += h;     points[RIGTH_MIDLE_FOOT_IDX].z += h;    } else if(k &lt; 0.75) { \/\/ \u0442\u0440\u0435\u0442\u044c\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0448\u0430\u0433\u0430          linearFunc(2.0, m_Offset, m_Pose0[LEFT_FRONT_FOOT_IDX], k - 0.5,       points[LEFT_FRONT_FOOT_IDX]);     linearFunc(2.0, m_Offset, m_Pose0[LEFT_BACK_FOOT_IDX], k - 0.5,       points[LEFT_BACK_FOOT_IDX]);     linearFunc(2.0, m_Offset, m_Pose0[RIGTH_MIDLE_FOOT_IDX], k - 0.5,       points[RIGTH_MIDLE_FOOT_IDX]);      linearFunc(2.0, -m_Offset, m_Pose0[LEFT_MIDLE_FOOT_IDX], k - 0.5,       points[LEFT_MIDLE_FOOT_IDX]);     linearFunc(2.0, -m_Offset, m_Pose0[RIGTH_FRONT_FOOT_IDX], k - 0.5,       points[RIGTH_FRONT_FOOT_IDX]);     linearFunc(2.0, -m_Offset, m_Pose0[RIGTH_BACK_FOOT_IDX], k - 0.5,       points[RIGTH_BACK_FOOT_IDX]);          int h = (int)m_Heigth*cos(M_PI*(k - 0.5)*2);     points[LEFT_FRONT_FOOT_IDX].z += h;     points[LEFT_BACK_FOOT_IDX].z += h;     points[RIGTH_MIDLE_FOOT_IDX].z += h;        } else {  \/\/ \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0448\u0430\u0433\u0430          linearFunc(2.0, m_Offset, m_Pose0[LEFT_FRONT_FOOT_IDX], 1 - k,       points[LEFT_FRONT_FOOT_IDX]);     linearFunc(2.0, m_Offset, m_Pose0[LEFT_BACK_FOOT_IDX], 1 - k,       points[LEFT_BACK_FOOT_IDX]);     linearFunc(2.0, m_Offset, m_Pose0[RIGTH_MIDLE_FOOT_IDX], 1 - k,       points[RIGTH_MIDLE_FOOT_IDX]);      linearFunc(2.0, -m_Offset, m_Pose0[LEFT_MIDLE_FOOT_IDX], 1 - k,       points[LEFT_MIDLE_FOOT_IDX]);     linearFunc(2.0, -m_Offset, m_Pose0[RIGTH_FRONT_FOOT_IDX], 1 - k,       points[RIGTH_FRONT_FOOT_IDX]);     linearFunc(2.0, -m_Offset, m_Pose0[RIGTH_BACK_FOOT_IDX], 1 - k,       points[RIGTH_BACK_FOOT_IDX]);          int h = (int)m_Heigth*sin(M_PI*(k - 0.75)*2);     points[LEFT_MIDLE_FOOT_IDX].z += h;     points[RIGTH_FRONT_FOOT_IDX].z += h;     points[RIGTH_BACK_FOOT_IDX].z += h;   }    return S_OK; }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u0435\u0441\u044c \u0448\u0430\u0433 \u043c\u044b \u0434\u0435\u043b\u0438\u043c \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438:<\/p>\n<ol>\n<li>\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438, \u043f\u0435\u0440\u0432\u0430\u044f \u0442\u0440\u0438\u0430\u0434\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0435\u0439 (\u043b\u0435\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u044f\u044f, \u043b\u0435\u0432\u0430\u044f \u0437\u0430\u0434\u043d\u044f\u044f \u0438 \u043f\u0440\u0430\u0432\u0430\u044f \u0441\u0440\u0435\u0434\u043d\u044f\u044f) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0442\u043e\u043b\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044e. \u0412\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0438\u0430\u0434\u0430 \u043b\u0430\u043f (\u043f\u0440\u0430\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u044f\u044f, \u043f\u0440\u0430\u0432\u0430\u044f \u0437\u0430\u0434\u043d\u044f\u044f \u0438 \u043b\u0435\u0432\u0430\u044f \u0441\u0440\u0435\u0434\u043d\u044f\u044f) \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0441\u043e\u0442\u0430 \u0438\u0445 \u043f\u043e\u0434\u044a\u0435\u043c\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b \u043f\u043e\u0434\u044a\u0435\u043c\u0430 \u043b\u0430\u043f (\u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438) \u0434\u043e \u043d\u0443\u043b\u044f (\u0432 \u043a\u043e\u043d\u0446\u0435 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438) \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0438\u043d\u0443\u0441\u0430.<\/li>\n<li>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u0440\u0438\u0430\u0434 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0438\u0430\u0434\u0430 \u043b\u0430\u043f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430, \u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0447\u0442\u043e \u0438 \u0440\u043e\u0431\u043e\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0441\u043e\u0442\u0430 \u043b\u0430\u043f \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0440\u0438\u0430\u0434\u044b \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0435 \u043e\u0442 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043b\u0430\u043f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f, \u0430 \u043a\u043e\u043d\u0446\u044b \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0440\u0438\u0430\u0434\u044b \u0438\u0434\u0443\u0442 \u043d\u0430 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438.<\/li>\n<li>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u0442\u0440\u0438\u0430\u0434\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u043f\u043e\u0440\u043d\u043e\u0439, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0435 \u0432\u0432\u0435\u0440\u0445, \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b \u043f\u043e\u0434\u044a\u0435\u043c\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438.<\/li>\n<\/ol>\n<p>  <\/p>\n<h4>\u041a\u043b\u0430\u0441\u0441 RotateMotion<\/h4>\n<p>  \u041f\u043e\u043d\u044f\u0432 \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043b\u0430\u0441\u0441\u0430 <i>LinearMotion<\/i>, \u043c\u044b \u0431\u0435\u0437 \u0442\u0440\u0443\u0434\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0430 <i>RotateMotion<\/i>.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">RotateMotion::RotateMotion(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">RotateMotion::RotateMotion(int heigth, Vector3D pose0[FOOTS_COUNT], Vector3D speed,   long maxTime, long totalTime = -1, Motion* pNext = NULL)      : Motion(maxTime, true, totalTime, pNext) {   copyPose(m_Pose0, pose0);   m_Angles = 0.001*maxTime*speed*M_PI\/180;   m_Heigth = heigth; }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u043e\u0431\u043e\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b \u043f\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u043e\u0442\u0430 <i>speed<\/i> \u2014 \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440 \u0443\u0433\u043b\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043e\u0441\u044c \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430.<\/p>\n<p>  \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 <i>getPose<\/i> \u043a\u043b\u0430\u0441\u0441\u0430 <i>RotateMotion<\/i> \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u044d\u0442\u0430\u043f\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043b\u0430\u043f \u0432\u043c\u0435\u0441\u0442\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>linearFunc<\/i> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>rotFunc<\/i>.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">int RotateMotion::getPose(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int RotateMotion::getPose(long time, Vector3D points[FOOTS_COUNT]) {   double k = 1.0*time\/m_MaxTime;   if(k &lt; 0.25) {  \/\/ \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0448\u0430\u0433\u0430      rotFunc(2.0, m_Angles, m_Pose0[LEFT_FRONT_FOOT_IDX], k,       points[LEFT_FRONT_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[LEFT_BACK_FOOT_IDX], k,       points[LEFT_BACK_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_MIDLE_FOOT_IDX], k,       points[RIGTH_MIDLE_FOOT_IDX]);            rotFunc(2.0, m_Angles, m_Pose0[LEFT_MIDLE_FOOT_IDX], -k,       points[LEFT_MIDLE_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_FRONT_FOOT_IDX], -k,       points[RIGTH_FRONT_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_BACK_FOOT_IDX], -k,       points[RIGTH_BACK_FOOT_IDX]);      int h = (int)m_Heigth*cos(M_PI*k*2);     points[LEFT_MIDLE_FOOT_IDX].z += h;     points[RIGTH_FRONT_FOOT_IDX].z += h;     points[RIGTH_BACK_FOOT_IDX].z += h;    } else if(k &lt; 0.5) {  \/\/ \u0432\u0442\u043e\u0440\u0430\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0448\u0430\u0433\u0430          rotFunc(2.0, m_Angles, m_Pose0[LEFT_FRONT_FOOT_IDX], 0.5 - k,       points[LEFT_FRONT_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[LEFT_BACK_FOOT_IDX], 0.5 - k,       points[LEFT_BACK_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_MIDLE_FOOT_IDX], 0.5 - k,       points[RIGTH_MIDLE_FOOT_IDX]);            rotFunc(2.0, m_Angles, m_Pose0[LEFT_MIDLE_FOOT_IDX], k - 0.5,       points[LEFT_MIDLE_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_FRONT_FOOT_IDX], k - 0.5,       points[RIGTH_FRONT_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_BACK_FOOT_IDX], k - 0.5,       points[RIGTH_BACK_FOOT_IDX]);        int h = (int)m_Heigth*sin(M_PI*(k - 0.25)*2);     points[LEFT_FRONT_FOOT_IDX].z += h;     points[LEFT_BACK_FOOT_IDX].z += h;     points[RIGTH_MIDLE_FOOT_IDX].z += h;    } else if(k &lt; 0.75) {  \/\/ \u0442\u0440\u0435\u0442\u044c\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0448\u0430\u0433\u0430        rotFunc(2.0, m_Angles, m_Pose0[LEFT_FRONT_FOOT_IDX], 0.5 - k,       points[LEFT_FRONT_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[LEFT_BACK_FOOT_IDX], 0.5 - k,       points[LEFT_BACK_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_MIDLE_FOOT_IDX], 0.5 - k,       points[RIGTH_MIDLE_FOOT_IDX]);            rotFunc(2.0, m_Angles, m_Pose0[LEFT_MIDLE_FOOT_IDX], k - 0.5,       points[LEFT_MIDLE_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_FRONT_FOOT_IDX], k - 0.5,       points[RIGTH_FRONT_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_BACK_FOOT_IDX], k - 0.5,       points[RIGTH_BACK_FOOT_IDX]);        int h = (int)m_Heigth*cos(M_PI*(k - 0.5)*2);     points[LEFT_FRONT_FOOT_IDX].z += h;     points[LEFT_BACK_FOOT_IDX].z += h;     points[RIGTH_MIDLE_FOOT_IDX].z += h;   } else { \/\/ \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0448\u0430\u0433\u0430     rotFunc(2.0, m_Angles, m_Pose0[LEFT_FRONT_FOOT_IDX], k - 1,       points[LEFT_FRONT_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[LEFT_BACK_FOOT_IDX], k - 1,       points[LEFT_BACK_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_MIDLE_FOOT_IDX], k - 1,       points[RIGTH_MIDLE_FOOT_IDX]);            rotFunc(2.0, m_Angles, m_Pose0[LEFT_MIDLE_FOOT_IDX], 1 - k,       points[LEFT_MIDLE_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_FRONT_FOOT_IDX], 1 - k,       points[RIGTH_FRONT_FOOT_IDX]);     rotFunc(2.0, m_Angles, m_Pose0[RIGTH_BACK_FOOT_IDX], 1 - k,       points[RIGTH_BACK_FOOT_IDX]);      int h = (int)m_Heigth*sin(M_PI*(k - 0.75)*2);     points[LEFT_MIDLE_FOOT_IDX].z += h;     points[RIGTH_FRONT_FOOT_IDX].z += h;     points[RIGTH_BACK_FOOT_IDX].z += h;   }   return S_OK; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u043b\u0435 \u0435\u0435 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u0446\u0435\u043d\u0442\u0440\u0430 \u0440\u043e\u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">void rotFunc(&#8230;)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void rotFunc(float a, Vector3D angles, Vector3D p0, float k, Vector3D&amp; res) {   Matrix3D m = rotMatrix2(a*angles*k);   res = m*p0; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043d\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0438 \u043c\u0430\u0442\u0440\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430\u043c\u0438. <\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c. \u041c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430. \u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0439\u0441\u044f \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430, \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f.<br \/>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442\u2026<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/489672\/\"> https:\/\/habr.com\/ru\/post\/489672\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/489672\/\">\n<h3>\u0412\u0438\u0434\u0435\u043e \u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0433\u0435\u043a\u0441\u0430\u043f\u043e\u0434\u0430<\/h3>\n<p>  \u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 <a href=\"https:\/\/habr.com\/ru\/post\/488810\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439<\/a> \u0435\u0435 <a href=\"https:\/\/habr.com\/ru\/post\/485856\/\">\u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u0446\u0430<\/a> \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u0437\u0440\u0435\u043b\u0438\u0449\u043d\u0430\u044f, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b \u0432 \u044d\u0442\u043e\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0435\u043e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u0441\u0442-\u0434\u0440\u0430\u0439\u0432 \u0440\u043e\u0431\u043e\u0442\u0430 \u043f\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0435.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/RmYl7Q_uSaM?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\" allow=\"encrypted-media; accelerometer; gyroscope; picture-in-picture\"><\/iframe><\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-299297","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/299297","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=299297"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/299297\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=299297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=299297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=299297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}