рдкрд╣рд▓реА рдмрд╛рд░ рдХрдВрдХрд╛рд▓ рдПрдиреАрдореЗрд╢рди

рдкрд░рд┐рдЪрдп



рд╢реБрдн рджрд┐рдиред рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣рд╛рдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдореИрдВ рдХрдВрдХрд╛рд▓ рдПрдиреАрдореЗрд╢рди рдХреЗ рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЖрд▓реЛрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдорджрдж рдХрд░рдиреЗ рдХреА рдмрд╣реБрдд рдЗрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдВрдкреВрд░реНрдг рдирд┐рд░реНрдорд╛рдг рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реБрдЖ рдерд╛, рдореБрдЭреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдкреБрд╕реНрддрдХ рдирд╣реАрдВ рдорд┐рд▓реАред рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдПрдХ рдореГрдд рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реВрдВ, рдореИрдВ рдпрд╣рд╛рдВ рд╕реЗ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред



рдореИрдВрдиреЗ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛?






рдХрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?



рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдирд╛ # рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рдКрдВрдЧрд╛:

#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 10 #define MAX_KEYFRAME_COUNT 20
      
      







рдФрд░ рдореИрдВ рдЖрдЦрд┐рд░рдХрд╛рд░ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЖрдпрд╛:

рд╕рдВрдпреБрдХреНрдд рдПрдХ рд╕рдВрдпреБрдХреНрдд рд╣реИ


  typedef struct _Joint { //inheritanse _Joint* root; /* Pointer to root element. All elements have it. */ _Joint* parent; /* Pointer to parent */ //simple joints variables float x, y; /* Position */ float angle; /* Angle of rotate. In radians!!! */ uint8_t level; /* Level of hierarchy. Root have 0, next level +1 */ float dX, dY; /* Default Position */ float dAngle; /* Default Angle */ float aX, aY; /* Animation Position */ float aAngle; /* Animation Angle */ //children uint8_t childCount; /* Number of children */ _Joint* child[MAX_CHILDREN_COUNT]; /* Array of children */ //index uint16_t indexCount; /* Last number for index. Only Root have the var. */ uint16_t index; /* Unique index of joint */ } S_Joint;
      
      







dX, dY, dAngle - рдпреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИрдВред рдореИрдВрдиреЗ рдХреЛрдгреЛрдВ рдХреЛ рд░реЗрдбрд┐рдпрдВрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, 0 рд╕реЗ 6.28 рддрдХред рдФрд░ рддрдм рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рд╕рдорд╕реНрдпрд╛рдПрдБ рдереАрдВред рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВред

aX, aY, aAngle - рдпреЗ рдПрдиреАрдореЗрд╢рди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рд╡реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдлреНрд░реЗрдо рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдкрд┐рдЫрд▓реЗ рдПрдиреАрдореЗрд╢рди рдЙрдирдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдиреАрдореЗрд╢рди 900 рдПрдордПрд╕ ( TIME ), 450 рдПрдордПрд╕ ( рдЕрдм ) рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдиреАрдореЗрд╢рди рдХреЛ рд╣рд░ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 400 рдПрдордПрд╕ рдкрд╣рд▓реЗ рдерд╛, рд▓реЗрдХрд┐рди рдЕрднреА 450 рд╣реИ, рдПрдХреНрд╕ рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рдПрдХреНрд╕ рдореЗрдВ 2 рдХреБрдВрдЬреА рд╣реИрдВред = 50 ( KEY1 ), рджреВрд╕рд░реЗ 100 ( KEY2 ) рдореЗрдВ, рддрдм X рдХрд╛ рдЕрдВрддрд┐рдо рдорд╛рди рдирд┐рдореНрди рд╣реИ:

_Joint.x += (KEY2 - KEY1) / TIME * NOW - _Joint.aX;





_Joint.aX = (KEY2 - KEY1) / TIME * NOW;





22,3 += (100-50) / 900 * 450 - 22,3





22.3 - рдпрд╣ рдПрдХреНрд╕ рдкрд╛рд╕рд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЬрдм рд╕рдордп ( рдЕрдм ) 0 рдерд╛, рддрдм рдПрдХреНрд╕ рднреА рд╢реВрдиреНрдп рдерд╛



рдХреАрдбрд╛рдЯрд╛ рдФрд░ рдХреАрдлреНрд░реЗрдо рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ


 typedef struct _KeyData { float x, y, angle; } S_KeyData; typedef struct _Keyframe { S_KeyData data; /* data of Joint */ uint16_t time; /* ~32 sec.(32768 ms) is maximum time for animation. Only Root have it */ uint16_t index; /* Index of joint, which we want interpolate */ _Keyframe* parent; uint8_t childCount; /* Number of children */ _Keyframe* child[MAX_CHILDREN_COUNT]; } S_Keyframe;
      
      







рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рд▓рд┐рдП рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рдЦреЛрдЬ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд▓реНрдХрд┐ рдЕрд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ 2 рдлреИрд╕рд▓реЗ рдереЗред рдкрд╣рд▓рд╛ рдЙрдкрд╛рдп рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЦреЛрдЬ рдХреЛ рдереЛрдбрд╝рд╛ рдЧрддрд┐ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдмреЛрдзрди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рджреВрд╕рд░рд╛ рдЙрдкрд╛рдп рдЪреБрдирд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЙрд╕рдХреЗ рдХрд┐рд╕реА рднреА рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬ рд╣реИред рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореБрдЦреНрдп рд╣рдбреНрдбреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 10 рдмрдЪреНрдЪреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ 5 рдФрд░ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 51 рд╣рдбреНрдбреА рд╣реИрдВ (рд╡реИрд╕реЗ, рдореИрдВ рд░реВрдЯ рд╕рдВрдпреБрдХреНрдд рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ x рдФрд░ y рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рд╕рдВрдкреВрд░реНрдг рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐)ред

рд╣рдореЗрдВ 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ 10 рдЪрдХреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЕрд░реНрдерд╛рддреН рдХреЗрд╡рд▓ 50 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВред рдФрд░ рдЕрдВрдд рдореЗрдВ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ 51 рдкреНрд░рдХреНрд╖реЗрдк рдорд┐рд▓рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рд╣рдо рд╣рдбреНрдбреА рдХреА рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдВрддрд┐рдо рд╣рдбреНрдбреА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП 50 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, 49 рдПрдХ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрддрдиреЗ рдкрд░, рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ред _Keyframe рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ 0 , рдЗрд╕ рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рдордп рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдХрд╛ рдЯрд╛рдЗрдо рдкреИрд░рд╛рдореАрдЯрд░ 0 рд╣реИред



рдПрдиреАрдореЗрд╢рди - рдХреБрдВрдЬреА рдХреА рдПрдХ рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ


  typedef struct _Animation { uint8_t keyNumber; uint8_t keyCount; S_Keyframe* key[MAX_KEYFRAME_COUNT]; } S_Animation;
      
      





KeyNumber рд╢реВрдиреНрдп рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреАрдореЗрд╢рди рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдо рдореЗрдВ рд╕рднреА рдРрдирд┐рдореЗрд╢рди рдХреБрдВрдЬрд┐рдпрд╛рдБ рдХреБрдВрдЬреА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рднреА рддрд░реАрдХреЗ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЙрдирдореЗрдВ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЫрд┐рдкрд╛рдКрдВрдЧрд╛ рддрд╛рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдпрд╣рд╛рдВ рдвреЗрд░ рди рд╣реЛрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

 bool doAnimation(S_Joint *root, S_Animation *anim, uint16_t time) { if (!root) return false; if (!anim) return false; bool timeOut = true; for (int i = 0; i < anim->keyCount; i++) { if (time < anim->key[i]->time) //search keyframes for interpolation { //  1200,  2400, 2400-1200=1200 uint16_t mtime = anim->key[i]->time - anim->key[i - 1]->time; //nowTime is 1560, mtime = 1200(ERROR), 1560 - 1200(last key)=360(realtime) uint16_t nowTime = time - anim->key[i - 1]->time; if (i != anim->keyNumber) //    keyNumber,        { setDefaultAnimTree(root); //set to 0.0 animation changes(aX,yX,aAngle) } anim->keyNumber = i; //   doInterpolate(root, anim->key[i - 1], anim->key[i], mtime, nowTime); timeOut = false; break; } } if (timeOut == true) { setDefaultTree(root); //          } return timeOut; }
      
      







рдЬрдм рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯрд╛рдЗрдорд░ рд╢реВрдиреНрдп рдкрд░ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред (рдмреВрд╕реНрдЯ :: рдЯрд╛рдЗрдорд░)



рдФрд░ рдЕрдВрддрд┐рдо рд╕рдорд╛рд░реЛрд╣:

 void doInterpolate(S_Joint* root, S_Keyframe* key1, S_Keyframe* key2, uint16_t time, uint16_t nowTime) { if (root->index != key2->index) return; float x = (key2->data.x - key1->data.x) / time * nowTime; //        float y = (key2->data.y - key1->data.y) / time * nowTime; float angle = (key2->data.angle - key1->data.angle) / time * nowTime; root->x += x - root->aX; //root->aX -        ,        root->y += y - root->aY; root->angle += angle - root->aAngle; root->aX = x; //     ,     x,y,angle root->aY = y; root->aAngle = angle; //     for (int i = 0; i < root->childCount; i++) { doInterpolate(root->child[i], key1->child[i], key2->child[i], time, nowTime); } }
      
      







рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХрдВрдХрд╛рд▓ рдПрдиреАрдореЗрд╢рди рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпреВрдЯреА рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ, рдФрд░ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рд╣рдбреНрдбрд┐рдпреЛрдВ рдХрд╛ рдЖрдВрджреЛрд▓рди рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХрд╛ рдЖрдВрджреЛрд▓рди рд╣реИред 6.28 рдХреЗ рд╕рд░реНрдХрд▓ рдореЗрдВ рд╣рдбреНрдбреА рдХреА рд░реЛрдЯреЗрд╢рди рдХреА рд▓рдВрдмрд╛рдИ, рдпрд╛рдиреА 2 * рдкрд╛рдИ рдпрд╛ 360 рдбрд┐рдЧреНрд░реАред рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдореА рдЖрдВрджреЛрд▓рди рдХреЗрд╡рд▓ рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧрдгрдирд╛ 4.47 рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╣рдо рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

4,47-6.28=-1,81





рдпрд╣ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рд░реЛрдЯреЗрд╢рди рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдкрде рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрджрд┐ рд╣рдо рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ 1.57 (рдП) рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп 5.57 (рдмреА) рд╣реИ, рддрдм:

 negAngle = BA; posAngle = (B-6.28)-A; if(fabs(posAngle) > fabs(negAngle)) { /* */ }
      
      







рд▓реЗрдХрд┐рди рдЗрд╖реНрдЯрддрдо рдкрде рдХреА рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рднреА рдХрд╛рдлреА рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреВрдВрдЧрд╛ред рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╕рдЦреНрдд рдкреНрд░рдХреНрд╖реЗрдк рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдПрдиреАрдореЗрд╢рди рдореЗрдВ рдХреБрдВрдЬреА рд╣рдбреНрдбреА рд╣реЛрдЧреАред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдВрдЬреА рдХреЛ рдХреЗрд╡рд▓ рдЖрдВрджреЛрд▓рди рд╕реЗ рдкреВрдЫрд╛ рдЬрд╛рдП, рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рд╕рдЪ рдореЗрдВ, рдореИрдВ рдПрдХ рдард╣рд░рд╛рд╡ рдкрд░ рд╣реВрдВ рдФрд░ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдХреНрдпреВрдЯреА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдиреАрдореЗрд╢рди рдЦреБрдж рдХреЛ рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЬреАрдпреВрдЖрдИ рд╕рдВрдкрд╛рджрдХ рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛ рддреЛ рдореИрдВ рдЗрд╕рдХреА рдЕрдХреНрд╖рдорддрд╛ рдФрд░ рдмреЛрдЭрд┐рд▓рддрд╛ рдХреЛ рд╕рдордЭ рдЧрдпрд╛ рдерд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдХрдВрдХрд╛рд▓ рдПрдиреАрдореЗрд╢рди рдХреЛ рднреМрддрд┐рдХреА рдореЗрдВ рдХреИрд╕реЗ рд╕реАрдорд┐рдд рдХрд░реЗрдВ (рдореИрдВ Box2d рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╕реЗ рдЬрд▓ рд░рд╣рд╛ рд╣реВрдВ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдореЗрдВ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдЧрд▓рдд рдХрд┐рдпрд╛, рдХреА рд╕рд▓рд╛рд╣, рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдпрд╣ рдореЗрд░реА рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдпрд╣ рдХрдВрдХрд╛рд▓ рдПрдиреАрдореЗрд╢рди рдХрд╛ рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдХрдбрд╝рд╛рдИ рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!



All Articles