{"id":219509,"date":"2014-04-16T08:11:02","date_gmt":"2014-04-16T04:11:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=219509"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=219509","title":{"rendered":"<span class=\"post_title\">\u0421\u043a\u0435\u043b\u0435\u0442\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0443\u0442\u043e\u043a. \u042f \u043f\u0438\u0448\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0442\u0443\u0442 \u0432\u043f\u0435\u0440\u0432\u044b\u0435, \u0438 \u0446\u0435\u043b\u044c \u043c\u043e\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430, \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u0432\u0438\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u0435\u043b\u0435\u0442\u043d\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438 \u0438\u043c\u0435\u044e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u043a\u0443 \u0438 \u043f\u043e\u043c\u043e\u0448\u044c. \u0412\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u044b\u043b\u043e \u043f\u0443\u0442\u0451\u043c \u043f\u0440\u043e\u0431 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043d\u0438\u0433 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0437\u0430\u0448\u0451\u043b \u0432 \u0442\u0443\u043f\u0438\u043a, \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0442.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h5>\u0427\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b?<\/h5>\n<p>  <\/p>\n<ul>\n<li> <b>MSVS 2013 Professional <\/b> \u2014 \u044d\u0442\u043e \u043c\u043e\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f IDE<\/li>\n<li> <b>Qt Creator <\/b> \u2014 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u0442\u043e\u0433\u043e \u044f \u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/li>\n<li> <b>Qt 5.1 <\/b> \u2014 \u043a\u0430\u043a GUI \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/li>\n<li> <b>SDL 2 <\/b> \u2014 \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435(\u0433\u0434\u0435 \u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f)<\/li>\n<li> <b>OpenGL 2.1<\/b> \u2014 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438<\/li>\n<li> <b>GLEW<\/b> \u2014 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 OpenGL<\/li>\n<li> <b>Boost<\/b> \u2014 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430<\/li>\n<li> <b>Protobuf Google<\/b> \u2014 \u0414\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/li>\n<li> <b>\u0421++<\/b> \u2014 \u042f\u041f \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0432\u0441\u0435 \u0438 \u0434\u0435\u043b\u0430\u043b<\/li>\n<\/ul>\n<h4>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c?<\/h4>\n<p>  \u042f \u0440\u0435\u0448\u0438\u043b \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0438 \u043c\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a \u043b\u0435\u0433\u0447\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043a\u0430\u0436\u0443 \u043c\u043e\u0438 #define&#8217;\u044b:  <\/p>\n<pre><code class=\"cpp\">#define M_PI 3.1415926535 #define M_PI_2 M_PI\/2 #define M_PI_3 M_PI\/3 #define M_PI_4 M_PI\/4 #define RAD1 M_PI\/180.0f #define DEG1 180.0f\/M_PI #define RAD2DEG(rad) rad*DEG1 #define DEG2RAD(deg) deg*RAD1  #define MAX_CHILDREN_COUNT\t\t10 #define MAX_KEYFRAME_COUNT\t\t20 <\/code><\/pre>\n<p>  \u0438 \u0432\u043e\u0442 \u043a \u0442\u0430\u043a\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c \u044f \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0448\u0451\u043b:  <\/p>\n<h5>Joint \u2014 \u044d\u0442\u043e \u0441\u0443\u0441\u0442\u0430\u0432<\/h5>\n<p>  <\/p>\n<pre><code class=\"cpp\">\ttypedef struct _Joint \t{ \t\t\/\/inheritanse \t\t_Joint*\t\troot;\t\t\/* Pointer to root element. All elements have it. *\/ \t\t_Joint*\t\tparent;\t\t\/* Pointer to parent *\/  \t\t\/\/simple joints variables \t\tfloat\t\tx, y;\t\t\t\/* Position *\/ \t\tfloat\t\tangle;\t\t\/* Angle of rotate. In radians!!! *\/ \t\tuint8_t\t\tlevel;\t\/* Level of hierarchy. Root have 0, next level +1 *\/  \t\tfloat\t\tdX, dY;\t\t\/* Default Position *\/ \t\tfloat\t\tdAngle;\t\t\/* Default Angle *\/  \t\tfloat\t\taX, aY;\t\t\/* Animation Position *\/ \t\tfloat\t\taAngle;\t\t\/* Animation Angle *\/  \t\t\/\/children \t\tuint8_t\t\tchildCount;      \/* Number of children *\/ \t\t_Joint*\t\tchild[MAX_CHILDREN_COUNT];\t\/* Array of children *\/  \t\t\/\/index \t\tuint16_t\tindexCount;\t\t\/* Last number for index. Only Root have the var. *\/ \t\tuint16_t\tindex;\t\t\t\/* Unique index of joint *\/  \t} S_Joint; <\/code><\/pre>\n<p>  <b>dX, dY, dAngle<\/b> \u2014 \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0423\u0433\u043b\u044b \u044f \u0440\u0435\u0448\u0438\u043b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u0430\u0445, \u043e\u0442 0 \u0434\u043e 6.28. \u0418 \u0441 \u044d\u0442\u0438\u043c \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u0442\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u043a\u0443\u0447\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435.<br \/>  <b>aX, aY, aAngle<\/b> \u2014 \u042d\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u041e\u043d\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u043d\u0430\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0434\u0440 \u0443\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f. \u0422\u043e\u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0438\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u0438\u0442\u0441\u044f 900 ms(<b>TIME<\/b>), \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 450 ms(<b>NOW<\/b>), \u043d\u043e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c 400 ms, \u0430 \u0449\u0430\u0441 450, \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u0435\u043c X \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c 2 \u043a\u043b\u044e\u0447\u0430 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c X = 50(<b>KEY1<\/b>), \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c 100(<b>KEY2<\/b>), \u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <b>X<\/b> \u0441\u0447\u0438\u0442\u0430\u044e \u0442\u0430\u043a:<br \/>  <code>_Joint.x += (KEY2 - KEY1) \/ TIME * NOW - _Joint.aX;<\/code><br \/>  <code>_Joint.aX = (KEY2 - KEY1) \/ TIME * NOW;<\/code><br \/>  <code>22,3 += (100-50) \/ 900 * 450 - 22,3<\/code><br \/>  22,3 \u2014 \u042d\u0442\u043e X \u043a\u043e\u0441\u0442\u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0440\u0435\u043c\u044f (<b>NOW<\/b>) \u0431\u044b\u043b\u043e \u0440\u0430\u0432\u043d\u043e 0, \u0442\u043e <b>X<\/b>, \u0442\u043e\u0436\u0435 \u0431\u044b\u043b \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e<\/p>\n<h5>KeyData \u0438 Keyframe \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/h5>\n<p>  <\/p>\n<pre><code class=\"cpp\"> \ttypedef struct _KeyData \t{ \t\tfloat x, y, angle; \t} S_KeyData;  \ttypedef struct _Keyframe \t{ \t\tS_KeyData\tdata;\t\/* data of Joint *\/ \t\tuint16_t\ttime;\t\t\/* ~32 sec.(32768 ms) is maximum time for animation. Only Root have it *\/ \t\tuint16_t\tindex;\t\t\/* Index of joint, which we want interpolate *\/  \t\t_Keyframe*\tparent; \t\tuint8_t\t\tchildCount;\t\t\/* Number of children *\/ \t\t_Keyframe*\tchild[MAX_CHILDREN_COUNT];  \t} S_Keyframe; <\/code><\/pre>\n<p>  \u042f \u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u043b, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438. \u041f\u043e\u0438\u0441\u043a \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434. \u0423 \u043c\u0435\u043d\u044f \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0431\u044b\u043b\u043e 2 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041f\u0435\u0440\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0442\u0432\u0435\u0439 \u0438 \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u043e \u043f\u043e\u0438\u0441\u043a, \u0442.\u043a. \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u0431\u044b \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f. \u041d\u043e \u0432\u044b\u0431\u0440\u0430\u043b \u044f \u0432\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0447\u0435\u043c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u044f\u0435\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438. \u041e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043a\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u043f\u043e 10 \u0434\u0435\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u043c\u0435\u044e\u0442 \u0435\u0449\u0451 \u043f\u043e 5. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u043e 51 \u043a\u043e\u0441\u0442\u044c(\u043a\u0441\u0442\u0430\u0442\u0438 \u0440\u0443\u0442\u043e\u0432\u044b\u0439 \u0441\u0443\u0441\u0442\u0430\u0432 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0432\u0438\u0434\u0438\u043c \u0432\u043e\u043e\u0431\u0449\u0435, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0435\u0433\u043e x \u0438 y \u043f\u0440\u0438\u0432\u0434\u0438\u0442 \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0431\u044c\u0435\u043a\u0442\u0430).<br \/>  \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f 10 \u0446\u0438\u043a\u043b\u043e\u0432 \u043f\u043e 5 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0442\u043e\u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e 50 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u0418 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c 51 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u0441\u0442\u0438, \u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u0441\u0442\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 50 \u0438\u0442\u0435\u0440\u0430\u0438\u0439, \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 49 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0432 \u0441\u0443\u043c\u043c\u0435 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430. <b>_Keyframe<\/b> \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 <b>0<\/b>, \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e\u0439 \u0430\u043d\u043c\u0430\u0446\u0438\u0438, \u0432\u0441\u0435 \u0435\u0433\u043e \u0434\u0435\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 0.<\/p>\n<h5>Animation \u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u044e\u0447\u0435\u0439<\/h5>\n<p>  <\/p>\n<pre><code class=\"cpp\">\ttypedef struct _Animation \t{ \t\tuint8_t keyNumber; \t\tuint8_t keyCount; \t\tS_Keyframe* key[MAX_KEYFRAME_COUNT]; \t} S_Animation; <\/code><\/pre>\n<p>  <b>keyNumber <\/b> \u2014 \u044d\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e. \u0412\u0441\u0435 \u043a\u043b\u044e\u0447\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <b>key<\/b>, \u0432 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0412\u0441\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u0438\u0445 \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u044c\u0435\u043a\u0442\u043e\u0432 \u044f \u0441\u043a\u0440\u043e\u044e \u0447\u0442\u043e\u0431 \u0431\u044b \u043d\u0435 \u043d\u0430\u0433\u0440\u043e\u043c\u043e\u0436\u0434\u0430\u0442\u044c \u0442\u0443\u0442 \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041d\u043e \u043f\u043e\u043a\u0430\u0436\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438.  <\/p>\n<pre><code class=\"cpp\">bool  doAnimation(S_Joint *root, S_Animation *anim, uint16_t time) { \tif (!root) return false; \tif (!anim) return false;  \tbool timeOut = true;  \tfor (int i = 0; i &lt; anim-&gt;keyCount; i++) \t{ \t\tif (time &lt; anim-&gt;key[i]-&gt;time)\t\/\/search keyframes for interpolation \t\t{                         \/\/\u043f\u0435\u0440\u0432\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f 1200, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f 2400, 2400-1200=1200 \t\t\tuint16_t mtime = anim-&gt;key[i]-&gt;time - anim-&gt;key[i - 1]-&gt;time;                        \/\/nowTime is 1560, mtime = 1200(ERROR), 1560 - 1200(last key)=360(realtime) \t\t\tuint16_t nowTime = time - anim-&gt;key[i - 1]-&gt;time;   \t\t\tif (i != anim-&gt;keyNumber)\t\/\/\u0432\u043e\u0442 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u0435\u043d keyNumber, \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0448\u0435\u043c\u0443 \u043a\u043b\u044e\u0447\u0443 \t\t\t{ \t\t\t\tsetDefaultAnimTree(root);\t\t\/\/set to 0.0 animation changes(aX,yX,aAngle) \t\t\t} \t\t\tanim-&gt;keyNumber = i;\t\t\t\/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438  \t\t\tdoInterpolate(root, anim-&gt;key[i - 1], anim-&gt;key[i], mtime, nowTime); \t\t\ttimeOut = false; \t\t\tbreak; \t\t} \t} \t \tif (timeOut == true) \t{ \t\tsetDefaultTree(root);\t\/\/\u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e \u0442\u043e \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u0441\u0442\u0435\u0439 \u0434\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0445 \t}  \treturn timeOut; } <\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 true, \u0442\u043e \u0442\u0430\u0439\u043c\u0435\u0440 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u043b\u044c.(boost::timer)<\/p>\n<p>  \u0418 \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">void doInterpolate(S_Joint* root, S_Keyframe* key1, S_Keyframe* key2, uint16_t time, uint16_t nowTime) { \tif (root-&gt;index != key2-&gt;index) return;  \tfloat x = (key2-&gt;data.x - key1-&gt;data.x) \/ time * nowTime; \/\/\u0442\u0430\u043a \u0430\u043d\u0438\u043c\u0446\u0438\u044f \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \tfloat y = (key2-&gt;data.y - key1-&gt;data.y) \/ time * nowTime; \tfloat angle = (key2-&gt;data.angle - key1-&gt;data.angle) \/ time * nowTime;  \troot-&gt;x += x - root-&gt;aX;\t\/\/root-&gt;aX - \u044d\u0442\u043e \u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u043c, \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0445 \u0438\u0437 \u0442\u0435\u0445 \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \troot-&gt;y += y - root-&gt;aY; \troot-&gt;angle += angle - root-&gt;aAngle;  \troot-&gt;aX = x;\t\/\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u0442\u044c, \u043e\u043d\u0438 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 x,y,angle \troot-&gt;aY = y; \troot-&gt;aAngle = angle; \t         \/\/\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043e\u0431\u043d\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0435 \u043a\u043e\u0441\u0442\u0438 \tfor (int i = 0; i &lt; root-&gt;childCount; i++)\t \t{ \t\tdoInterpolate(root-&gt;child[i], key1-&gt;child[i], key2-&gt;child[i], time, nowTime); \t} } <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0441\u043a\u0435\u043b\u0435\u0442\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043b\u043e\u0445\u043e. \u0422\u0443\u0447\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 Qt, \u0438 \u0441\u0430\u043c\u0430\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u044d\u0442\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u0441\u0442\u0435\u0439 \u043c\u044b\u0448\u044c\u044e, \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u0441\u0442\u0435\u0439. \u0414\u043b\u0438\u043d\u0430 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0441\u0442\u0438 \u043f\u043e \u043a\u0440\u0443\u0433\u0443 6.28, \u0442\u043e\u0435\u0441\u0442\u044c 2*Pi \u0438\u043b\u0438 360 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u041d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043b\u0438\u0448\u044c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u0430\u0445 4.47, \u043d\u043e \u0445\u043e\u0442\u0438\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438 \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:<br \/>  <code>4,47-6.28=-1,81<\/code><br \/>  \u0412\u0440\u043e\u0434\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u041d\u043e \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e. \u0442\u0430\u043a \u0436\u0435 \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043e \u0446\u0435\u043b\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f 1,57(A), \u0446\u0435\u043b\u044c \u043d\u0430\u0448\u0430 5.57(B), \u0442\u043e:  <\/p>\n<pre><code class=\"cpp\">negAngle = B-A; posAngle = (B-6.28)-A; if(fabs(posAngle) &gt; fabs(negAngle)) { \/*\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435\u0435*\/ } <\/code><\/pre>\n<p>  \u041d\u043e, \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043d\u0443\u0436\u0435\u043d \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u042f \u0432\u043e\u0442 \u043f\u043e\u0434\u0443\u043c\u0430\u044e \u043d\u0430\u0434 \u0434\u0432\u0443\u043c\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u044d\u0442\u043e \u0440\u0430\u0441\u0447\u0438\u0442\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e. \u0422\u043e\u0435\u0441\u0442\u044c \u043a\u043b\u044e\u0447\u0451\u043c \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u0441\u0442\u044c \u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435, \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435. \u041d\u043e \u043f\u043e \u043f\u0440\u0430\u0432\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u044f \u043f\u043e\u043f\u0430\u043b \u0432 \u0442\u0443\u043f\u0438\u043a \u0438 \u043d\u0435 \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 Qt \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u043f\u0435\u0445\u043e\u043c, \u043d\u043e \u0441\u0430\u043c\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0432\u0440\u043e\u0434\u0435 \u043d\u0435 \u043f\u043b\u043e\u0445\u0430, \u043d\u043e \u043f\u043e\u043a\u0430 \u044f \u043f\u0438\u0441\u0430\u043b GUI \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b \u0435\u0451 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e\u0441\u0442\u044c. \u041a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0435\u043b\u0435\u0442\u043d\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u043a \u0444\u0438\u0437\u0438\u043a\u0435(\u044f \u0433\u043e\u0440\u044e \u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a Box2d), \u043d\u043e \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u044e \u043d\u0438 \u043c\u0430\u043b\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0440\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u0445\u043e\u0447\u0443 \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0442\u044b, \u043a\u0440\u0438\u0442\u0438\u043a\u0443, \u0447\u0442\u043e \u0438 \u043a\u0430\u043a \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0415\u0449\u0451 \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044e, \u044d\u0442\u043e \u043c\u043e\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u043d\u0435 \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u044d\u0442\u043e \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 \u0441\u043a\u0435\u043b\u0435\u0442\u043d\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0438\u044e, \u043d\u0435 \u0441\u0443\u0434\u0438\u0442\u0435 \u0441\u0442\u0440\u043e\u0433\u043e. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/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=\"http:\/\/habrahabr.ru\/post\/219509\/\"> http:\/\/habrahabr.ru\/post\/219509\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0443\u0442\u043e\u043a. \u042f \u043f\u0438\u0448\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0442\u0443\u0442 \u0432\u043f\u0435\u0440\u0432\u044b\u0435, \u0438 \u0446\u0435\u043b\u044c \u043c\u043e\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430, \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u0432\u0438\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u0435\u043b\u0435\u0442\u043d\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438 \u0438\u043c\u0435\u044e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u043a\u0443 \u0438 \u043f\u043e\u043c\u043e\u0448\u044c. \u0412\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u044b\u043b\u043e \u043f\u0443\u0442\u0451\u043c \u043f\u0440\u043e\u0431 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043d\u0438\u0433 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0437\u0430\u0448\u0451\u043b \u0432 \u0442\u0443\u043f\u0438\u043a, \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0442.  <\/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-219509","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/219509","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=219509"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/219509\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=219509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=219509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=219509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}