3 рдбреА рдЦреБрдж рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ 2: рдпрд╣ рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╣реИ



рдореЗрдВ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ, рд╣рдо рдкрддрд╛ рд▓рдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдФрд░ рдПрдХ рд▓рд╛рдЗрди (рдЦрдВрдб) рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рдЖрдпрд╛рдореА рд╡рд╕реНрддреБрдУрдВ, рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рддреБрдо рд╕рдЪ рдЬрд▓реНрджреА рд╕реЗ рдХреБрдЫ рддреАрди рдЖрдпрд╛рдореА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдкрд╣рд▓реА рдмрд╛рд░ рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ 3 рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдирдИ рдЧрдгрд┐рддреАрдп рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗрдХреНрдЯрд░ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕, рд╕рд╛рде рд╣реА рдЙрди рдкрд░ рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╡реЗ рдЬреЛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

  • рд╕рд┐рд╕реНрдЯрдо рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ
  • рдбреЙрдЯ рдФрд░ рд╡реЗрдХреНрдЯрд░
  • рд╕рд╛рдБрдЪрд╛
  • рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ
  • рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрдиреНрд╡реЗрдпрд░

рд╕рд┐рд╕реНрдЯрдо рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ


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

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


рдПрдХ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЧреЗрдо рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдпрд╛ рдЪрд░рд┐рддреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдпрджрд┐ рд╣рдо 2D рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЕрдХреНрд╖реЛрдВ рдХреА 2 рджрд┐рд╢рд╛рдПрдВ рд╣реИрдВ (рд╣рдо рдЙрдиреНрд╣реЗрдВ X, Y рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВрдЧреЗ)ред рдпрджрд┐ рд╣рдо 2 рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдбрд╝реЗ рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╛рдИ рдЕрдХреНрд╖ рдКрдкрд░ рдХреА рдУрд░ рд╣реИред рдпрджрд┐ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдмрдбрд╝рд╛ рдПрдХреНрд╕ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рджрд╛рдИрдВ рдУрд░ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЛ рджрд╛рдИрдВ рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рджрд┐рд╢рд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдЕрдХреНрд╖реЛрдВ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░ 90 рдбрд┐рдЧреНрд░реА рдХрд╛ рдХреЛрдг рдмрдирддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЖрдпрддрд╛рдХрд╛рд░ (рдЬрд┐рд╕реЗ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдКрдкрд░ рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВ)ред


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

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╛рдПрдВ рд╣рд╛рде рдХреА рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА (рд╡реЗ рднреА рдмрд╛рдПрдВ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╣рддреЗ рд╣реИрдВ) рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм Z рдЕрдХреНрд╖ рдХреЛ рд╣рдорд╕реЗ рджреВрд░ (рдмрдбрд╝реЗ Z, рд╡рд╕реНрддреБ рдХреЛ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЕрдЧрд░ Z рдЕрдХреНрд╖ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рджрд╛рдПрдВ рд╣рд╛рде рдХреА рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рд╣реИ (рд╡реЗ рдХрд╣рддреЗ рднреА рд╣реИрдВ рд╕рд╣реА рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА)ред рдЙрдиреНрд╣реЗрдВ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдмрд╛рдПрдВ рд╡рд╛рд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдмрд╛рдПрдВ рд╣рд╛рде рдХреЛ рд╣рдереЗрд▓реА рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреА рдУрд░ рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЕрдВрдЧреВрдареЗ рдЬреЗрдб рджрд┐рд╢рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛, рдЕрд░реНрдерд╛рдд, рдпрд╣ рдореЙрдирд┐рдЯрд░ рдХреА рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрджрд┐ рдПрдХреНрд╕ рджрд╛рдИрдВ рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИред рдЕрдкрдиреЗ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВ, рдФрд░ Z рдЕрдХреНрд╖ рдХреЛ X рд╕реЗ рджрд╛рдИрдВ рдУрд░ рдореЙрдирд┐рдЯрд░ рд╕реЗ рджреВрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдВрдЧреБрд▓рд┐рдпреЛрдВ рд╕реЗ рдЙрд▓рдЭрд╛ рд╣реБрдЖ? рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рджрд┐рд╢рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╣рд╛рде рдФрд░ рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред

3 рдбреА-рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Direct3D рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рдмрд╛рдПрдВ рд╣рд╛рде рдХреЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдУрдкрдирдЧреНрд▓ рдФрд░ WebGL рдореЗрдВ рджрд╛рдПрдВ рд╣рд╛рде рдХрд╛ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рд╣реИ, VulkanAPI рдореЗрдВ, Y рдЕрдХреНрд╖ рдиреАрдЪреЗ рд╣реИ (рдЫреЛрдЯреЗ Y, рдЙрдЪреНрдЪ рд╡рд╕реНрддреБ) рдФрд░ Z рд╣рдорд╕реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреЗ рд╕рд┐рд░реНрдл рдХрдиреНрд╡реЗрдВрд╢рди рд╣реИрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд╛рдирддреЗ рд╣реИрдВред

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

рдбреЙрдЯ рдФрд░ рд╡реЗрдХреНрдЯрд░


рдЕрдм рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢ рдХреНрдпрд╛ рд╣реИрдВред рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдФрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ [рдПрдХреНрд╕, рд╡рд╛рдИ, рдЬреЗрдб] рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рдмрд╣реБрдд рдореВрд▓ (рд╢рд╛рдпрдж рдЦрд┐рдбрд╝рдХреА рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ) рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ [0, 0, 0] рд╣реЛрдЧреА, рдпрд╛ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдмрд┐рдВрджреБ [0, 0, 0] рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдЕрдм, рд╣рдо рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХреЛ рдЦрд┐рд▓рд╛рдбрд╝реА 20 рдЗрдХрд╛рдЗрдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдХреНрд╕реЗрд▓) рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд╣ рдмрд┐рдВрджреБ [-20, 0, 0] рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ред рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред 

рд╡реЗрдХреНрдЯрд░ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рджрд┐рд╢рд╛ рд╣реИред 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ, рдпрд╣ 3 рдорд╛рдиреЛрдВ [рдПрдХреНрд╕, рд╡рд╛рдИ, рдЬреЗрдб] рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмрд┐рдВрджреБ рдХреА рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд░реНрдг рдХреЛ 5 рдЗрдХрд╛рдЗрдпреЛрдВ рддрдХ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо Y рдХреЛ рдмрджрд▓реЗрдВрдЧреЗ, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХрдВрдб рдореЗрдВ рдЗрд╕реЗ 5 рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо X рдФрд░ Z рдХреЛ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕ рдЖрдВрджреЛрд▓рди рдХреЛ рдПрдХ рд╡реЗрдХреНрдЯрд░ [0, 5, 0] рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░рд╛ рдЪрд░рд┐рддреНрд░ рд▓рдЧрд╛рддрд╛рд░ 2 рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рдФрд░ рджрд╛рдИрдВ рдУрд░ 1 рд╕реЗ рдиреАрдЪреЗ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдЖрдВрджреЛрд▓рди рдХрд╛ рд╡реЗрдХреНрдЯрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛: [1, -2, 0]ред рд╣рдордиреЗ рд▓рд┐рдЦрд╛ -2 рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рдИ рдбрд╛рдЙрди рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╡реЗрдХреНрдЯрд░ рдХреА рдХреЛрдИ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ [X, Y, Z] рджрд┐рд╢рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдирдП рдмрд┐рдВрджреБ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рд╣рд░ 5 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ 3 рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреЗрдо рдХреИрд░реЗрдХреНрдЯрд░) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛: [0, 5, 0]ред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ? 

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЪрд░рд┐рддреНрд░ рдмрд┐рдВрджреБ [5, 7, 0] рдкрд░ рд╣реИ, рдФрд░ рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ [0, 5, 0] рд╣реИред рдпрджрд┐ рд╣рдо рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдкрдж рдорд┐рд▓рддрд╛ рд╣реИред рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рдВрджреБ рдпрд╛ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рдВрджреБ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдмрд┐рдВрджреБ рдФрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг :

[ 5, 7, 0 ] + [ 0, 5, 0 ] = [ 5 + 0, 7 + 5 , 0 + 0 ] = [5, 12, 0] - рдпрд╣ рд╣рдорд╛рд░реЗ рдЪрд░рд┐рддреНрд░ рдХреА рдирдИ рд╕реНрдерд┐рддрд┐ рд╣реИред 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░рд╛ рдЪрд░рд┐рддреНрд░ 5 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдКрдкрд░ рд▓реЗ рдЧрдпрд╛, рдпрд╣рд╛рдВ рд╕реЗ рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ - рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИред рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ, рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ [0, 0, 0], рдЬрд┐рд╕реЗ рд╢реВрдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдРрд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХреА рднреА рдХреЛрдИ рджрд┐рд╢рд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП [0, 5, 0], рд▓рдВрдмрд╛рдИ 5 рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдмрд┐рдВрджреБ 5 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡реЗрдХреНрдЯрд░ [0, 0, 10] рдХреА рд▓рдВрдмрд╛рдИ 10 рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ Z рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ 10 рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реЗрдХреНрдЯрд░ [12, 3, -4] рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд▓рдВрдмрд╛рдИ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ, рд╣рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдЪрд░рд┐рддреНрд░ рдХрд┐рддрдирд╛ рдЖрдЧреЗ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдЙрди рдкрд╛рддреНрд░реЛрдВ рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЕрдм рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ рд╣реИ, рдЬреЛ рддреЗрдЬ рд╣реИред рд▓рдВрдмрд╛рдИ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╡реИрдХреНрдЯрд░ рдкрд░ рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдХреЗрд╡рд▓ Z рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛):

Length=X2+Y2+Z2


рдЪрд▓реЛ [6, 3, -8] рдХреЗ рдКрдкрд░ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ;

Length=6тИЧ6+3тИЧ3+тИТ8тИЧтИТ8=36+9+64=109тЙИ10.44


рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ [6, 3, -8] рд▓рдЧрднрдЧ 10.44 рд╣реИред

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдХреНрдпрд╛ рд╣реИ, рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреНрдпрд╛ рд╣реИ, рдПрдХ рдмрд┐рдВрджреБ рдФрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ (рдпрд╛ 2 рд╡реИрдХреНрдЯрд░) рдХреИрд╕реЗ рдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВред рдЖрдЗрдП рдПрдХ рд╕рджрд┐рд╢ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдпреЛрдЧ рдФрд░ рд▓рдВрдмрд╛рдИ рдЧрдгрдирд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗ, рдЕрдЧрд░ рд╣рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╡реЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдмрд┐рдВрджреБ рдФрд░ рд╡реЗрдХреНрдЯрд░ рд╕реНрдЯреЛрд░ X, Y, Z, рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╡реЗрдХреНрдЯрд░ рджрд┐рд╢рд╛ рдХреЗ рд▓рд┐рдПред

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ, рдЖрдк рдЗрд╕реЗ рджрд░рд╛рдЬ рд╡рд░реНрдЧ рдХреЗ рдиреАрдЪреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХрд╣рд╛ рдФрд░ рдЙрд╕рдореЗрдВ 3 рдЧреБрдг X, Y, Z рдЬреЛрдбрд╝ рджрд┐рдП:

class Vector {
  x = 0;
  y = 0;
  z = 0;

  constructor(x, y, z) {
    this.x = x;
    this.y = y;
    this.z = z;
  }
}

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "рдПрдХреНрд╕реЗрд╕рд░реНрд╕" рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдлрд╝реАрд▓реНрдб x, y, z, рдЗрд╕рд▓рд┐рдП рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рддреЗрдЬреА рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВред

рдЕрдм рд╣рдо рд╡реИрдХреНрдЯрд░ рдХреЗ рдпреЛрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди 2 рдпреЛрдЧреНтАНрдп рд╡реИрдХреНрдЯрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рдЙрдкрд░реЛрдХреНрдд рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдпреЛрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдирдпрд╛ рд╡реЗрдХреНрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд▓реМрдЯреЗрдВрдЧреЗ:

static add(v1, v2) {
    return new Vector(
        v1.x + v2.x,
        v1.y + v2.y,
        v1.z + v2.z,
    );
}

рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдлрд┐рд░, рд╣рдо рд╕рдм рдХреБрдЫ рдЙрди рд╕реВрддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзрд┐рдХ рдереЗ:

getLength() {
    return Math.sqrt(
        this.x * this.x + this.y * this.y + this.z * this.z
    );
}

рдЕрдм рд╡реЗрдХреНрдЯрд░ рдкрд░ рдПрдХ рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдмрд╛рдж рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ "рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЦреЗрд▓ рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рддреАрд░ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡реЗрдХреНрдЯрд░ [0, 1, 0] рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдиреАрдЪреЗ рд╣реИ, рддреЛ [0, -1, 0], рдмрд╛рдИрдВ рдУрд░ [-1, 0, 0] рдФрд░ рджрд╛рдИрдВ рдУрд░ [1, 0, 0]ред рдпрд╣рд╛рдБ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реИрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ 1 рд╣реИ, рдЕрд░реНрдерд╛рддреН рдЪрд░рд┐рддреНрд░ рдХреА рдЧрддрд┐ 1. рд╣реИ рдФрд░ рдЖрдЗрдП рддрд┐рд░рдЫреЗ рдЖрдиреНрджреЛрд▓рди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рддреАрд░ рдХреЛ рджрд╛рдпреАрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдореЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╡реЗрдХреНрдЯрд░ [1, 1, 0] рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ 1.414 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЪрд░рд┐рддреНрд░ рддреЗрдЬреА рд╕реЗ рддрд┐рд░рдЫреЗ рдЪрд▓реЗрдЧрд╛? рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЪрд░рд┐рддреНрд░ рдХреЗ рд▓рд┐рдП 1 рдХреА рдЧрддрд┐ рд╕реЗ рддрд┐рд░рдЫреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗрдХреНрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:[реж. [реж 0., реж.7реж,, реж]ред рдореБрдЭреЗ рдРрд╕рд╛ рд╡реЗрдХреНрдЯрд░ рдХрд╣рд╛рдВ рд╕реЗ рдорд┐рд▓рд╛? рдореИрдВрдиреЗ рд╡реЗрдХреНрдЯрд░ [1, 1, 0] рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореБрдЭреЗ [0.707, 0.707, 0] рдорд┐рд▓рд╛ред рдпрд╣реА рд╣реИ, рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреА рдХрдореА рдХреА рджрд┐рд╢рд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ 1 (рдЗрдХрд╛рдИ рд▓рдВрдмрд╛рдИ) рдХреА рд▓рдВрдмрд╛рдИ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡реИрдХреНрдЯрд░ [реж.7реж,, реж. theреж 0, реж] рдФрд░ [рез, рез, реж] рдПрдХ рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЪрд░рд┐рддреНрд░ рд╕рдЦреНрддреА рд╕реЗ рджрд╛рдИрдВ рдУрд░ рдмрдврд╝реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╡реЗрдХреНрдЯрд░ [реж.7реж,, реж.7реж,, реж] рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реИ рдФрд░ рдЪрд░рд┐рддреНрд░ рдХреА рдЧрддрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдЕрдм рдпрд╣ 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдЬреЛ рддреНрд╡рд░рд┐рдд рд╡рд┐рдХрд░реНрдг рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рде рдмрдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рднреА рдЧрдгрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдХреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ (X, Y, Z) рдХреЛ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓рдВрдмрд╛рдИ рдЦреЛрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, рдЖрдзрд╛ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ,рдЕрдм рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд╛рд░реНрдп (рд╡реЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░) рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

normalize() {
    const length = this.getLength();
    
    this.x /= length;
    this.y /= length;
    this.z /= length;
    
    return this;
}

рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ (рдпрд╣) рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗред

рдЕрдм рдЬрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреНрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рддреЛ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдпрдХрд░рдг рдПрдХ рдЗрдХрд╛рдИ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдХрдореА рд╣реИ, рдЕрд░реНрдерд╛рдд, рдПрдХ рд╡рд╕реНрддреБ (рдЪрд░рд┐рддреНрд░) рдХреЗ рдЖрдВрджреЛрд▓рди рдХреА рдЧрддрд┐ 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреА, рддреЛ рдЪрд░рд┐рддреНрд░ рдХреЛ рдХреИрд╕реЗ рдЧрддрд┐ рджреА рдЬрд╛рдП? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХрд┐рд╕реА рд╡рд░реНрдг рдХреЛ 1 рдХреА рдЧрддрд┐ рдкрд░ рддрд┐рд░рдЫреЗ / рджрд╛рдИрдВ рдУрд░ рдШреБрдорд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рд╡реЗрдХреНрдЯрд░ [0.707, 0.707, 0] рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рд╣рдо рдЪрд░рд┐рддреНрд░ рдХреЛ 6 рдмрд╛рд░ рддреЗрдЬреА рд╕реЗ рдШреБрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╡реЗрдХреНрдЯрд░ рд╣реЛрдЧрд╛? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ "рдПрдХ рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреЗрд▓рд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдХреЗрд▓рд░ 6 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рд╡реЗрдХреНрдЯрд░ 6 рдЧреБрдирд╛ рд▓рдВрдмрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдорд╛рд░рд╛ рдЪрд░рд┐рддреНрд░ рдХреНрд░рдорд╢рдГ 6 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред рдЕрджрд┐рд╢ рдЧреБрдгрди рдХреИрд╕реЗ рдХрд░реЗрдВ? рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡реЗрдХреНрдЯрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдПрдХ рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ,рдЬрдм рдПрдХ рд╕рджрд┐рд╢ [0.707, 0.707, 0] (рдЧрддрд┐ 1) рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдг рдХреЛ 6 рдмрд╛рд░ рддреНрд╡рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ 6. рд╡реЗрдХреНрдЯрд░ "V" рдХреЛ рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реВрддреНрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

VтИЧs=[VxтИЧsVyтИЧsVzтИЧs]


рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣реЛрдЧрд╛:
[0.707тИЧ60.707тИЧ60тИЧ6]=[4.2424.2420]- рдПрдХ рдирдпрд╛ рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ рдЬрд┐рд╕рдХреА рд▓рдВрдмрд╛рдИ 6. рд╣реИред

рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕реНрдХреЗрд▓рд░ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЕрдкрдиреА рджрд┐рд╢рд╛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдорд╛рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕реНрдХреЗрд▓рд░ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдХреЛ рднреА рдорд╛рдкрддрд╛ рд╣реИ (рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ) рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реЗрдХреНрдЯрд░ рдХреА рджрд┐рд╢рд╛ рд╡рд┐рдкрд░реАрдд рд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред

рдЖрдЗрдП multiplyByScalarрд╣рдорд╛рд░реЗ рд╡реЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ :

multiplyByScalar(s) {
    this.x *= s;
    this.y *= s;
    this.z *= s;
    
    return this;
}

рд╕рд╛рдБрдЪрд╛


рд╣рдордиреЗ рд╡реИрдХреНрдЯрд░ рдФрд░ рдЙрди рдкрд░ рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗред рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕рдмрд╕реЗ рдЖрдо рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╡реЗ "рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЧрдгрд┐рдд рдореЗрдВ рд╡реЗ "рдореИрдЯреНрд░рд┐рдХреНрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред 3D рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗ, рд╣рдо рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред 

рд╣рдо рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореИрдЯреНрд░рд┐рдХреНрд╕ (рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЕрдкрдирд╛ рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдХрд┐рд╕реА рднреА 2-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреА рддрд░рд╣)ред рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

M=[123456]


3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ 2

M=[2433445тИТ22]


3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ 3

M=[2305]


4 рдореЗрдВ 1 рдореИрдЯреНрд░рд┐рдХреНрд╕

M=[5072тИТ17928351]


3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ 4

рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдкрд░ рд╕рднреА рдСрдкрд░реЗрд╢рдиреЛрдВ рдореЗрдВ рд╕реЗ, рдЕрдм рд╣рдо рдХреЗрд╡рд▓ рдЧреБрдгрд╛ (рдмрд╛рдХреА рдмрд╛рдж рдореЗрдВ) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЧреБрдгрд╛ рдХреЗ рдЖрджреЗрд╢ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдЖрдк рд╕рдлрд▓ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ рд╣рдо рдХреЗрд╡рд▓ рдЧреБрдгрд╛ рдФрд░ рд╕рд╛рд░рд╛рдВрд╢ рдХрд░реЗрдВрдЧреЗред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдЧреБрдгрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдпрджрд┐ рд╣рдо рд╕рдВрдЦреНрдпрд╛ A рдХреЛ рд╕рдВрдЦреНрдпрд╛ B рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ B * A. рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрджрд┐ рд╣рдо рдСрдкрд░реЗрдВрдбреНрд╕ рдХреЛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд┐рд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рддрд╣рдд рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдСрдкрд░реЗрд╢рди рд╕рд░рд╛рд╣рдиреАрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг: a + b = b + a рдСрдкрд░реЗрд╢рди рд╕рдВрд╢реНрд▓рд┐рд╖реНрдЯ рд╣реИ, a - b a b - рдЕ рдСрдкрд░реЗрд╢рди рдиреЙрди-рдХрдореНрдпреВрдЯреЗрдЯрд┐рд╡ рд╣реИ, a * b = b * a рдирдВрдмрд░реЛрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХрд╛ рдСрдкрд░реЗрд╢рди рдХрдореНрдпреВрдЯреЗрдЯрд┐рд╡ рд╣реИред рддреЛ, рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЧреБрдгрди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдЧреИрд░-рдХрдореНрдпреВрдЯреЗрдЯрд┐рд╡ рд╣реЛрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрди рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдо рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдПрдо рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрди рдХреЗ рдЧреБрдгрди рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
  • рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рд╕рдВрднрд╡ рд╣реИ рдпрджрд┐ рдкрд╣рд▓реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЬреЛ рдмрд╛рдИрдВ рддрд░рдл рд╣реИ) рджреВрд╕рд░реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рдЬреЛ рджрд╛рдИрдВ рдУрд░ рд╣реИ)ред 

рдЕрдм рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХреА рджреВрд╕рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ (рдЬрдм рдЧреБрдгрд╛ рд╕рдВрднрд╡ рд╣реИ) рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЧреБрдгрди рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдХрдм рдирд╣реАрдВ:

M1=[12]


M2=[123456]


M1 M2 , .. 2 , 2 .

M1=[325442тИТ745794]


M2=[10456тИТ9]


1 2 , .. 3 , 3 .

M1=[5403]


M2=[730363]


1 2 , .. 2 , 3 .

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

рдЧреБрдгрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдХреЙрд▓рдо рдФрд░ рдкрдВрдХреНрддрд┐рдпрд╛рдБ 1 рд╕реЗ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ 0. рд╕реЗ рд╕рд░рдгреА рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рддрддреНрд╡ рдореЗрдВ рдкрд╣рд▓рд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рджреВрд╕рд░рд╛ рдХреЙрд▓рдо рдирдВрдмрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рддрддреНрд╡ (рд╕рд░рдгреА рддрддреНрд╡) рдлреЙрд░реНрдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ: m28, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдФрд░ рдЖрдард╡реЗрдВ рдХреЙрд▓рдо рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдо рдХреЛрдб рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕рднреА рдЕрдиреБрдХреНрд░рдордг 0 рдкрд░ рд╢реБрд░реВ рд╣реЛрдВрдЧреЗред

рдЖрдЗрдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдХрд╛рд░реЛрдВ рдФрд░ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде 2 рдП рдФрд░ рдмреА рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

A=[123456]


B=[78910]


рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдП рдХрд╛ рдЖрдХрд╛рд░ 3 рдмрд╛рдп 2 рд╣реИ, рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмреА рдХрд╛ рдЖрдХрд╛рд░ 2 рдмрд╛рдп 2 рдХрд╛ рд╣реИ, рдЧреБрдгрди рд╕рдВрднрд╡ рд╣реИ:

AтИЧB=[1тИЧ7+2тИЧ91тИЧ8+2тИЧ103тИЧ7+4тИЧ93тИЧ8+4тИЧ105тИЧ7+6тИЧ95тИЧ8+6тИЧ10]=[2528576489100]


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдмрд╛рдп 2 рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ, рдЧреБрдгрд╛ рд╢реБрд░реВ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ "рддрдирд╛рд╡ рдХреЗ рдмрд┐рдирд╛" рдХреИрд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛ рд╣реИ, рддреЛ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдореИрдЯреНрд░рд┐рд╕ рдП рдФрд░ рдмреА рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

A=[32]


B=[2тИТ3014тИТ2]


AтИЧB=[3тИЧ2+2тИЧ13тИЧтИТ3+2тИЧ43тИЧ0+2тИЧтИТ2]=[8тИТ1тИТ4]


рдпрджрд┐ рдЧреБрдгрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдкрддреНрддреА рд╕реЗ рдЧреБрдгрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рд╣рдо рдПрдХ рдмрд╛рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпреЗ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╕рдм рдХреБрдЫ рдЕрдкрдиреЗ рджрдо рдкрд░ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдФрд░ рд╢рдмреНрдж:

  • рдПрдХ рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИ, рдпрд╣рд╛рдВ рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

[2364]


2 рдмрд╛рдп 2 рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕

[56790тИТ2451]


3 рдмрд╛рдп 3 рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕

[5673902145131798]


4 рджреНрд╡рд╛рд░рд╛ 4 рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕

  • рдПрдХ рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдХрд░реНрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рд╕реНрддрдВрдн рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИред рд╡рд┐рдХрд░реНрдгреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореБрдЦреНрдп рд╡рд┐рдХрд░реНрдг рдиреАрдиреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ): 

[9339]


[933393339]


[9333393333933339]



  • рдПрдХ рдпреВрдирд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХ рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореБрдЦреНрдп рд╡рд┐рдХрд░реНрдг рдХреЗ рд╕рднреА рддрддреНрд╡ 1 рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рд╕рднреА 0. рдпреВрдирд┐рдЯ рдпреВрдирд┐рдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

[1001]


[100010001]


[1000010000100001]



рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдХрд┐рд╕реА рдЗрдХрд╛рдИ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдХрд╛рд░ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ I рдХрд╣реЗрдВ, рддреЛ рд╣рдореЗрдВ рдореВрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ M рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: M * I = M рдпрд╛ I * M = Mред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкрд╣рдЪрд╛рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдмрд╛рдж рдореЗрдВ рдкрд╣рдЪрд╛рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред 3 рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рд╣рдо рдЕрдХреНрд╕рд░ 4 рдмрд╛рдп 4 рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдЕрдм рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧреБрдгрд╛ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? 3 рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ 4 рдмрд╛рдп 4 рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдЧрд░ рд╡реЗрдХреНрдЯрд░ рдпрд╛ рдкреЙрдЗрдВрдЯ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ X рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╕реНрдерд╛рди рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдХреЛ рдШреБрдорд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ? рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░реЗрдВ, рдЬреЛ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдореВрд▓ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдШреБрдорд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рд╣реИ - рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди (рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ)ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЖрд╡реЗрджрди рдореЗрдВ 100 рдЕрдВрдХ (рд╡рд░реНрдЯрд┐рдХрд▓, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдереЛрдбрд╝рд╛ рдХрдо рд╣реЛрдЧрд╛) рд╡рд╛рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, 5 рдЧреБрдирд╛ рдмрдврд╝рд╛рдПрдВ, рдлрд┐рд░ 90 рдбрд┐рдЧреНрд░реА рдПрдХреНрд╕ рдХреЛ рдШреБрдорд╛рдПрдВ, рдлрд┐рд░ рдЗрд╕реЗ 30 рдЗрдХрд╛рдЗрдпреЛрдВ рддрдХ рд▓реЗ рдЬрд╛рдПрдВредрдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд╢реЗрд╖ рдореИрдЯреНрд░рд┐рд╕ рд╣реИрдВ рдЬреЛ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдКрдкрд░ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА 100 рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд╣рд▓реЗ рд╣рдо рд╡рд░реНрдг рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП 1 рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдПрдХреНрд╕ рдореЗрдВ 90 рдбрд┐рдЧреНрд░реА рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо 3 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ 30 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдВред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдФрд░ 100 рдЕрдВрдХ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ 300 рдЧреБрдгрд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрд╕ рдореЗрдВ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ 5 рдЧреБрдирд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХреНрд╕ рдХреЗ рд╕рд╛рде 90 рдбрд┐рдЧреНрд░реА рдШреБрдорд╛рдПрдВ рдФрд░ 30 рдЗрдХрд╛рдЗрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдКрдкрд░, рд╣рдореЗрдВ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдРрд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛, рд╡рд╣ рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдиреЗ рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП 2 рдЧреБрдгрд╛, рдФрд░ 100 рдЕрдВрдХ рдХреЗ рд▓рд┐рдП 100 рдЧреБрдгрд╛,рдХреБрд▓ 102 рдЧреБрдгрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ 300 рдЧреБрдгрд╛ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдЬрд┐рд╕ рд╕рдордп рд╣рдордиреЗ 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╛ рдХрд┐рдпрд╛ - рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗред

рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдХреИрд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╣рдордиреЗ рдЬрд╛рдВрдЪ рдХреА, рд▓реЗрдХрд┐рди рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдПрдХ рдмрд┐рдВрджреБ рдпрд╛ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЧреБрдгрди рдХреЗ рдКрдкрд░ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд┐рдВрджреБ рдпрд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реИ [10, 2, 5] рдФрд░ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ: 

[121221043]


рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЛ 1 рд╕реЗ 3 рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдпрд╛ 3 рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ 1. рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЛ 2 рддрд░реАрдХреЛрдВ рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЧреБрдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

[1025]тИЧ[121221043]


рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ 1 рдмрд╛рдп 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ (рд╡реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рднреА рдХрд╣рддреЗ рд╣реИрдВ)ред рдРрд╕рд╛ рдЧреБрдгрди рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░) рдореЗрдВ 3 рдХреЙрд▓рдо рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ 3 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВред

[121221043]тИЧ[1025]


рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ 3 рдмрд╛рдп 1 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ (рд╡реЗ рдПрдХ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рднреА рдХрд╣рддреЗ рд╣реИрдВ)ред рдРрд╕рд╛ рдЧреБрдгрди рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ 3 рдХреЙрд▓рдо рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ (рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░) рдореЗрдВ 3 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдЧреБрдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЧреБрдгрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реЛрдЧрд╛:

рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВ:

[1025]тИЧ[121221043]=


=[10тИЧ1+2тИЧ2+5тИЧ010тИЧ2+2тИЧ2+5тИЧ410тИЧ1+2тИЧ1+5тИЧ3]=[144427]


рдЕрдм, рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВ:

[121221043]тИЧ[1025]=[1тИЧ10+2тИЧ5+1тИЧ52тИЧ10+2тИЧ2+1тИЧ50тИЧ10+4тИЧ2+3тИЧ5]=[192923]


рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛, рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ (рд╣рдо рдХрдореНрдпреВрдЯрд┐рдЯреА рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ)ред рдЗрд╕рд▓рд┐рдП, 3 рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдРрд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░, рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрддрдВрдн рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрджрд┐ рд╣рдо рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЧрд╛ред рдЖрдк (рдкрдВрдХреНрддрд┐ рдпрд╛ рд╕реНрддрдВрдн) рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡реЗрдХреНрдЯрд░ / рдмрд┐рдВрджреБ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреЗрд╡рд▓ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЕрдкрдиреЗ рд╡реЗрдХреНрдЯрд░ / рдмрд┐рдВрджреБ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред Direct3D, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реИрдХреНрдЯрд░ рдХреЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ Direct3D рдореЗрдВ рд╕рднреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред OpenGL рдПрдХ рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ (рдпрд╛ рдмрд┐рдВрджреБ) рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ,рдФрд░ рд╕рднреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╣рдо рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВрдЧреЗред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдкрдврд╝рддреЗ рд╣реИрдВред

  • рдПрдХ рд╡реЗрдХреНрдЯрд░ (рдпрд╛ рдмрд┐рдВрджреБ) рдкрд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рдореЗрдЯреНрд░рд┐рд╕ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред
  • рдкрд░рд┐рд╡рд░реНрддрди (рд╡рд┐рд╕реНрдерд╛рдкрди, рд░реЛрдЯреЗрд╢рди, рдЖрджрд┐) рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЧреБрдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВред
  • 3 рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рд╣рдо рд▓рдЧрд╛рддрд╛рд░ 4 рдмрд╛рдп 4 рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
  • рд╣рдо рдПрдХ рд╡реЗрдХреНрдЯрд░ (рдпрд╛ рдмрд┐рдВрджреБ) рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╕реНрддрдВрдн рдпрд╛ рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдХреЗ рдЧреБрдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рдФрд░ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рдереЛрдбрд╝реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж, рдЖрдЗрдП 4 рд╕реЗ 4 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рд╣рдо 4 рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдорд╛рдирдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ (рдЖрдВрджреЛрд▓рди, рд░реЛрдЯреЗрд╢рди, рд╕реНрдХреЗрд▓, ...) рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдРрд╕реЗ рдЖрдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЕрд▓рдЧ рдЖрдХрд╛рд░ рдХреЗ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред  

рдЖрдЗрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝реЗрдВред рдлрд┐рд░ рднреА рдХрднреА-рдХрднреА 4 рд╕реЗ 4 рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдХреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдпрд╣ 4 рд╣рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ (рд╡реЗ рднреА 4 рдХреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╣рддреЗ рд╣реИрдВ)ред рд╕рднреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдбреЗрдЯрд╛ рдХреЛ 4 рд╕реЗ 4 рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдо рдЧреБрдгрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЫреЛрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рд▓рд╛рдЗрди рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ рдХрд┐ рд╕рднреА рдЧреБрдгрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред рдореИрдВ рдЧреБрдгрд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЪрдХреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдХреЗрд╡рд▓ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд┐рдирд╛ рдЪрдХреНрд░ рдХреЗ рд╕рднреА рдЧреБрдгрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░рд╛ рдЧреБрдгрди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

class Matrix {
  static multiply(a, b) {
    const m = [
      [0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0],
    ];

    for (let i = 0; i < 4; i++) {
      for (let j = 0; j < 4; j++) {
        m[i][j] = a[i][0] * b[0][j] +
          a[i][1] * b[1][j] +
          a[i][2] * b[2][j] +
          a[i][3] * b[3][j];
      }
    }

    return m;
  }
}

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

рдЕрдм рдЖрдкрдХреЛ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЧреБрдгрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд╡реЗрдХреНрдЯрд░ рдХреЛ рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдорд┐рд▓рддрд╛ рд╣реИ:[xyz]
рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 4 рдЧреБрдгрд╛ 4 рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЧреБрдгрди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рдореЗрдВ 3 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ 4 рдХреЙрд▓рдо рд╣реЛрддреЗ рд╣реИрдВред рдлрд┐рд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдХреБрдЫ рдЪреМрдереЗ рддрддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ 4 рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреА, рдЬреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдХреЙрд▓рдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдВрдЧреАред рдЖрдЗрдП рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ 4 рд╡реЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ W рдХрд╣рддреЗ рд╣реИрдВ, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлреЙрд░реНрдо рдХреЗ рд╕рднреА 3 рдбреА рд╡реИрдХреНрдЯрд░ рд╣реИрдВ [X, Y, Z, W] рдФрд░ рдРрд╕реЗ рд╡реИрдХреНрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореИрдЯреНрд░рд┐рдХреНрд╕ 4 рд╕реЗ 4. рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдШрдЯрдХ W рдПрдХ рдЧрд╣рд░рд╛ рдЙрджреНрджреЗрд╢реНрдп, рд▓реЗрдХрд┐рди рд╣рдо рдЙрд╕реЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ (рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 4 рдмрд╛рдп 4 рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛ, 3 рдмрд╛рдп 3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдирд╣реАрдВ)ред рд╡реЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдбрдмреНрд▓реНрдпреВ рдШрдЯрдХ рдХреЗ рдКрдкрд░ рдмрдирд╛рдпрд╛ рд╣реИред рдЕрдм рд╡реЗрдХреНрдЯрд░ рдХреНрд▓рд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрддреА рд╣реИ:

class Vector {
    x = 0;
    y = 0;
    z = 0;
    w = 1;

    constructor(x, y, z, w = 1) {
        this.x = x;
        this.y = y;
        this.z = z;
        this.w = w;
    }

рдореИрдВрдиреЗ рдбрдмреНрд▓реНрдпреВ рдХреЛ рдПрдХ рд╢реБрд░реВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди 1 рдХреНрдпреЛрдВ? рдпрджрд┐ рд╣рдо рдпрд╣ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдЙрджрд╛рд╣рд░рдг), рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк W рд╕реЗ 0 рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рди рдХреЛ 1 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЗрд╕ W рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ 1 рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред 

рдЕрдм рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдЖрдк рд╡реЗрдХреНрдЯрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ) рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, рдбрдмреНрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж:

static multiplyVector(m, v) {
  return new Vector(
    m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z + m[0][3] * v.w,
    m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z + m[1][3] * v.w,
    m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z + m[2][3] * v.w,
    m[3][0] * v.x + m[3][1] * v.y + m[3][2] * v.z + m[3][3] * v.w,
  )
}

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ 4 рджреНрд╡рд╛рд░рд╛ 4 рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╡реЗрдХреНрдЯрд░ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреБрдг x, y, z, w рдХреЗ рд╕рд╛рде рд╣реИ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ 1 рджреНрд╡рд╛рд░рд╛ 4 рд╕рд░рдгреА рджреНрд╡рд╛рд░рд╛ рднреА рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧреБрдгрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдм, рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЧреБрдгрди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рд╕рдордЭ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗред

рд╣рдордиреЗ рдЕрдкрдиреЗ рдмреАрдЪ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдФрд░ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рддреАрди-рдЖрдпрд╛рдореА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рднреА рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рдмрд┐рдВрджреБ (рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдерд┐рддрд┐) рдФрд░ рдПрдХ рджрд┐рд╢рд╛ рджреЛрдиреЛрдВ рдХрд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ x, y, z рдФрд░ рдирд╡ рдкреНрд░рд╕реНрддреБрдд w рд╣реИрдВред 

рдЖрдЗрдП рдХреБрдЫ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╡реИрдХреНрдЯрд░ рдкрд░ рдмреБрдирд┐рдпрд╛рджреА рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдореИрдЯреНрд░реЗрд╕ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛрдЧрд╛ред рдПрдХ рд╡реЗрдХреНрдЯрд░ (рд╕реНрдерд╛рди) рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрдерд╛рдкрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛, рдпрд╣ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрдХрд╛рдЗрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдЧрд╛ред рдФрд░ рдпрд╣рд╛рдБ рд╡рд┐рд╕реНрдерд╛рдкрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ:

[100dx010dy001dz0001]


рдЬрд╣рд╛рдВ dx, dy, dz рдХрд╛ рдЕрд░реНрде рдХреНрд░рдорд╢рдГ x, y, z axes рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрдерд╛рдкрди рд╣реИ, рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдореИрдЯреНрд░реАрдХ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдпрд╛ 3 рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рдХрд┐рд╕реА рднреА рд╕рд╛рд╣рд┐рддреНрдп рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЕрднреА рд▓реЗ рд▓реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреВрд▓ рд╕реЗ рдЬрд┐рди рдлреЙрд░реНрдореВрд▓реЛрдВ рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдирдирд╛ рдпрд╛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛, рдПрдХ рдСрдлрд╕реЗрдЯ рд╣реЛрдЧрд╛ред рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВ, рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ [10, 10, 10, 1] (рд╣рдо рд╣рдореЗрд╢рд╛ 4 рдкреИрд░рд╛рдореАрдЯрд░ рдбрдмреНрд▓реНрдпреВ рдХреЛ рд╣рдореЗрд╢рд╛ 1 рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ), рдорд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ рдЦреЗрд▓ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЪрд░рд┐рддреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ 10 рдЗрдХрд╛рдЗрдпреЛрдВ, 5 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рджрд╛рдИрдВ рдУрд░, рдФрд░ рд╕реНрдХреНрд░реАрди рд╕реЗ 1 рдпреВрдирд┐рдЯ рджреВрд░ред рддрдм рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ [10, 5, -1] (-1 рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХрд╛ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдЖрдЧреЗ Z рд╣реИ,рдЬрд┐рддрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ)ред рдпрджрд┐ рд╣рдо рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЧ рджреНрд╡рд╛рд░рд╛, рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛: [10 + 10, 10 + 5, 10 + -1, 1] = [20, 15, 9, 1] - рдпреЗ рд╣рдорд╛рд░реЗ рдЪрд░рд┐рддреНрд░ рдХреЗ рдирдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ [10, 10, 10, 1] рд╕реЗ рдКрдкрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рд╡рд░реНрдЧреЛрдВ, рд╡реЗрдХреНрдЯрд░ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдмрд╛рдж рдЧреБрдгрд╛ рд▓рд┐рдЦреЗрдВ:
const translationMatrix = [
  [1, 0, 0, 10],
  [0, 1, 0, 5],
  [0, 0, 1, -1],
  [0, 0, 0, 1],
]
        
const characterPosition = new Vector(10, 10, 10)
        
const newCharacterPosition = Matrix.multiplyVector(
  translationMatrix, characterPosition
)
console.log(newCharacterPosition)

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рд╡рд┐рд╕реНрдерд╛рдкрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдг рдСрдлрд╕реЗрдЯ (рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕) рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдЗрд╕рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ (рд╡рд░реНрдг рд╕реНрдерд┐рддрд┐) рдХреЛ рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдЬреЗрдПрд╕ рдореЗрдВ рдбреАрдмрдЧ рдЖрдЙрдЯрдкреБрдЯ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реБрдЖред рдпрджрд┐ рдЖрдк рдЧреИрд░-рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреА рднрд╛рд╖рд╛ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕, рд╡рд╛рдИ, рдЬреЗрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдЬреЛ рд╣рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ: [20, 15, 9, 1], рд╕рдм рдХреБрдЫ рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд╕рд╣рдордд рд╣реИ рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рдЧрдгрдирд╛ рдХреА рдереАред рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЕрдЧрд░ рд╣рдордиреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдСрдлрд╕реЗрдЯ рдШрдЯрдХ-рд╡рд╛рд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИ, рд╣рдо рдЖрдкрд╕ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдореИрдЯреНрд░рд┐рд╕ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВрдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрдИ рдЧрдгрдирд╛рдУрдВ рдкрд░ рд╡рд╛рдкрд╕ рдХрдЯреМрддреАред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдСрдлрд╕реЗрдЯ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдо рдЕрдХреНрд╕рд░ рдЗрд╕ рдФрд░ рдЕрдиреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЖрдЗрдП рдЗрд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВ рдФрд░ рдСрдлрд╕реЗрдЯ рдХреЛ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░реЗрдВ:

static getTranslation(dx, dy, dz) {
  return [
    [1, 0, 0, dx],
    [0, 1, 0, dy],
    [0, 0, 1, dz],
    [0, 0, 0, 1],
  ]
}

рд╡рд┐рд╕реНрдерд╛рдкрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ dx, dy, dz рдЕрдВрддрд┐рдо рдХреЙрд▓рдо рдореЗрдВ рд╣реИрдВ рдФрд░ рдпрджрд┐ рд╣рдо рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рдХреЗ W рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛрддрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0, рддреЛ dx, dy, dz, рд╣рдо 0 рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рдЪрд╛рд▓ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдо W рдХреЗ рдмрд░рд╛рдмрд░ 0 рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рджрд┐рд╢рд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рджрд┐рд╢рд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЦреБрдж рдХреА рд░рдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рд╡рд┐рд╕реНрдерд╛рдкрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдРрд╕реА рджрд┐рд╢рд╛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЖрдВрджреЛрд▓рди 0. рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХрд╛ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╕реНрдерд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ:

new Vector(x, y, z, 1) // 1    ,   

рдФрд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рджрд┐рд╢рд╛ рдмрдирд╛рдПрдВрдЧреЗ:

new Vector(x, y, z, 0)

рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реНрдерд╛рди рдФрд░ рджрд┐рд╢рд╛ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдо рд╡рд┐рд╕реНрдерд╛рдкрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд┐рд╢рд╛ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЧрд▓рддреА рд╕реЗ рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдиреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрдпрд╛ рд╣реИрдВ, рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдЬреНрдЮрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдереЛрдбрд╝рд╛ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рднреА рдШрдЯрд╛рдпрд╛ рд╣реИ, рд╡рд╣ рд░реЗрдЦрд╛рдПрдБ рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЕрдм рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдШрдиред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рддреАрди рдЖрдпрд╛рдореА рдореЙрдбрд▓ рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдХрд┐рд╕реА рднреА 3 рдбреА рдореЙрдбрд▓ рдХрд╛ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдШрдЯрдХ рдЕрдВрдХ рд╣реИрдВ (рд╣рдо рдиреАрдЪреЗ рдХреЗ рдХреЛрдиреЗ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ) рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЗрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрдерд╛рди рд╡реИрдХреНрдЯрд░ рд╣реИрдВ, рдЬреЛ, рдЕрдЧрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ 3 рдбреА рдореЙрдбрд▓ (рдореЙрдбрд▓ рдЧреНрд░рд┐рдб) рдорд┐рд▓рддрд╛ рд╣реИред ) рд╕реНрдХреНрд░реАрди рдкрд░, рдпрд╣ рдмрдирд╛рд╡рдЯ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рд░ рдЪреАрдЬ рдХрд╛ рдЕрдкрдирд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдХреНрдпреВрдм рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рдХрд┐рддрдиреЗ рд╡рд░реНрдЯрд┐рдХрд▓ рд╣реИрдВ:



рдЫрд╡рд┐ рдореЗрдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдШрди рдореЗрдВ 8 рдХреЛрдиреЗ рд╣реИрдВ (рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЧрд┐рдирд╛)ред рдФрд░ рд╕рднреА рдХреЛрдиреЗ рд▓рд╛рдЗрдиреЛрдВ (рдХреНрдпреВрдм рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ) рджреНрд╡рд╛рд░рд╛ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдпрд╣реА рд╣реИ, рдХреНрдпреВрдм рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ 8 рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣рдореЗрдВ рдпрд╣ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдШрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рд░реЗрдЦрд╛ рдХреЛ рдЦреАрдВрдЪрдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╣рдо рд▓рдВрдм рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реАрд░реНрд╖ рд╕реЗ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪреЗрдВред 0 рд╕реЗ 6 рд╡рд░реНрд╕реЗрдЯреЗрдХреНрд╕, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХреНрдпреВрдм рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╡рд╕реНрддреБред рдЖрдЗрдП рдЕрдм рдкреНрд░рддреНрдпреЗрдХ 8 рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред рдЖрдзреБрдирд┐рдХ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ, 3D рдореЙрдбрд▓ рдореЗрдВ рджрд╕рд┐рдпреЛрдВ рд╣рдЬрд╝рд╛рд░реЛрдВ рд╡рд░реНрдЯрд┐рдХрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореЙрдбрд▓ 3D рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм 3D рдореЙрдбрд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдХреЛрдб рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рд╡рд░реНрдЯрд┐рдХрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдбреНрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рд╕реАрдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ 3D рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреНрдпреВрдм рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд░реЗрдВрдЧреЗредрд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдКрдкрд░ рдХрд╛ рдШрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдордзреНрдп рдмрд┐рдВрджреБ 0, 0, 0 рдкрд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдХреЗрдВрджреНрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:


рдЪрд▓реЛ рд╢реАрд░реНрд╖ 0 рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдШрди рдХреЛ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрдбрд╝реЗ рдорд╛рди рди рд▓рд┐рдЦреЗрдВ, рдореЗрд░реЗ рдШрди рдХрд╛ рдЖрдпрд╛рдо 2 рдЪреМрдбрд╝рд╛, 2 рдЙрдЪреНрдЪ рдФрд░ 2 рдЧрд╣рд░рд╛ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддред 2 рдмрд╛рдп 2 рджреНрд╡рд╛рд░рд╛ 2. рдЪрд┐рддреНрд░ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖ 0, рдХреЗрдВрджреНрд░ рдХреЗ рдмрд╛рдИрдВ рдУрд░ 0, 0, 0 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ X = -1 рд╕реЗрдЯ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдИрдВ рдУрд░, рдЫреЛрдЯрд╛ X, рд╢реАрд░реНрд╖ 0 рднреА рдХреЗрдВрджреНрд░ 0, 0, 0 рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реА рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕реНрдерд╛рди рдЙрдЪреНрдЪ рд╣реИ, рдмрдбрд╝рд╛ Y, рдореИрдВ рдЕрдкрдирд╛ рд╢реАрд░реНрд╖ Y = 1 рд╕реЗрдЯ рдХрд░реВрдВрдЧрд╛, Z рднреА рд╢реАрд░реНрд╖ 0 рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди рдХреЗ рдереЛрдбрд╝рд╛ рдХрд░реАрдмред рдмрд┐рдВрджреБ 0, 0, 0 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ Z = 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рджрд╛рдПрдВ рд╣рд╛рде рдХреЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ, Z рд╡рд╕реНрддреБ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рд╢реВрдиреНрдп рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ -1, 1, 1 рдорд┐рд▓рд╛, рдЪрд▓реЛ рд╢реЗрд╖ 7 рд╢реАрд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдПрдХ рд▓реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВ,рдореБрдЭреЗ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ (рдПрдХ рдбреНрд░рд╛рдЕрд░ рдбреНрд░рд╛рдЕрд░, рд╡реЗрдХреНрдЯрд░, рдореИрд░рд┐рдХреНрд╕ рдХреЗ рдиреАрдЪреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):

// Cube vertices
const vertices = [
  new Vector(-1, 1, 1), // 0 
  new Vector(-1, 1, -1), // 1 
  new Vector(1, 1, -1), // 2 
  new Vector(1, 1, 1), // 3 
  new Vector(-1, -1, 1), // 4 
  new Vector(-1, -1, -1), // 5 
  new Vector(1, -1, -1), // 6 
  new Vector(1, -1, 1), // 7 
];

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

рдЖрдЗрдП рдЕрдм рдХреНрдпреВрдм рдХреЗ рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдЦреАрдВрдЪреЗрдВрдЧреЗ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреВрдм рдХрд╛ рдЖрдХрд╛рд░ 2 рдмрд╛рдп 2 рдмрд╛рдп 2 рдкрд┐рдХреНрд╕рд▓ рд╣реИред рд╣рдордиреЗ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рдХреНрдпреВрдм рдмрдирд╛рдпрд╛ рддрд╛рдХрд┐ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдХрд╛рдо рдХреЛ рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЗрд╕реЗ рдмрдврд╝рд╛рдПрдВрдЧреЗред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореЙрдбрд▓ рдХреЛ рдЫреЛрдЯреЗ рд╕реЗ рдЫреЛрдЯрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрд╣реБрдд рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреЗрд▓рд░ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдЖрдХрд╛рд░ рддрдХ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд╕рд╛рде рдХреНрдпреВрдм рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЬреЛ рднреА рджреЗрдЦреЗрдВрдЧреЗ рд╡рд╣ 8 рдкрд┐рдХреНрд╕рд▓ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИ, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдбреНрд░рд╛рд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрдпреВрдм рдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдХреЛрдиреЗ рд╕реЗ рдХрд┐рди рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдШрди рдХреА рдЫрд╡рд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдореЗрдВ 12 рд▓рд╛рдЗрдиреЗрдВ (рдпрд╛ рдХрд┐рдирд╛рд░реЗ) рд╣реИрдВред рдпрд╣ рджреЗрдЦрдирд╛ рднреА рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдКрдкрд░реА рдкрд╛рд╕) рдХреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ 0 рд╕реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ 3 рддрдХ, рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ [-1, 1, 1] рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ [1, 1, 1] рддрдХ рдЦреАрдВрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреНрдпреВрдм рдХреА рдЫрд╡рд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд▓рд┐рдЦрдиреА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рд╣реА рдХреИрд╕реЗ рдХрд░реЗрдВ? рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 12 рд░реЗрдЦрд╛рдПрдБ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рд╣реИ, рдЕрд░реНрдерд╛рддреНред 2 рдЕрдВрдХ, рддрдм,рдХреНрдпреВрдм рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ 24 рдЕрдВрдХ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдлрд┐рд░ рд╕реЗ рдХреНрдпреВрдм рдХреА рдЫрд╡рд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреНрдпреВрдм рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдиреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реАрд░реНрд╖ рдкрд░ 0 3 рд░реЗрдЦрд╛рдПрдВ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рдеред рд╣рдо рд╕реНрдореГрддрд┐ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рд╢реАрд░реНрд╖ рд░реЗрдЦрд╛рдУрдВ рд╕реЗ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рд▓рд╛рдЗрдиреЗрдВ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдРрд╕реА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ, 2 рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ (рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд) рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрди рдХрд░реЗрдВред рдФрд░ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рдЬрдм рд╣рдо рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдХреЛрдиреЗ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреНрдпреВрдм рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВ) рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдлрд┐рд░ рд╕реЗ рдХреНрдпреВрдм рдХреА рдЫрд╡рд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреНрдпреВрдм рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдиреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реАрд░реНрд╖ рдкрд░ 0 3 рд▓рд╛рдЗрдиреЗрдВ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рдеред рд╣рдо рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рд╡рд░реНрдЯрд┐рд╕ рд╕рд░рдгреА рд╕реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рд▓рд╛рдЗрдиреЗрдВ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдРрд╕реА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ, 2 рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ (рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд) рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрди рдХрд░реЗрдВред рдФрд░ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рдЬрдм рд╣рдо рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдХреЛрдиреЗ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреНрдпреВрдм рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВ) рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдлрд┐рд░ рд╕реЗ рдХреНрдпреВрдм рдХреА рдЫрд╡рд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреНрдпреВрдм рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдиреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реАрд░реНрд╖ рдкрд░ 0 3 рд▓рд╛рдЗрдиреЗрдВ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рдеред рд╣рдо рд╕реНрдореГрддрд┐ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рд╢реАрд░реНрд╖ рд░реЗрдЦрд╛рдУрдВ рд╕реЗ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рд▓рд╛рдЗрдиреЗрдВ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдРрд╕реА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ, 2 рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ (рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд) рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрди рдХрд░реЗрдВред рдФрд░ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рдЬрдм рд╣рдо рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдХреЛрдиреЗ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреНрдпреВрдм рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВ) рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рдеред рд╣рдо рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рд╡рд░реНрдЯрд┐рд╕ рд╕рд░рдгреА рд╕реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рд▓рд╛рдЗрдиреЗрдВ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдРрд╕реА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ, 2 рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ (рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд) рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрди рдХрд░реЗрдВред рдФрд░ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рдЬрдм рд╣рдо рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдХреЛрдиреЗ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреНрдпреВрдм рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВ) рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рдеред рд╣рдо рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рд╡рд░реНрдЯрд┐рд╕ рд╕рд░рдгреА рд╕реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рд▓рд╛рдЗрдиреЗрдВ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдРрд╕реА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ, 2 рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ (рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд) рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрди рдХрд░реЗрдВред рдФрд░ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рдЬрдм рд╣рдо рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдХреЛрдиреЗ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреНрдпреВрдм рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВ) рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ (рдкрдВрдХреНрддрд┐ рдФрд░ рдЕрдВрдд рдХреА рд╢реБрд░реБрдЖрдд) рдкрд░ 2 рд╕реВрдЪрдХрд╛рдВрдХред рдФрд░ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рдЬрдм рд╣рдо рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдХреЛрдиреЗ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреНрдпреВрдм рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВ) рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ (рдкрдВрдХреНрддрд┐ рдФрд░ рдЕрдВрдд рдХреА рд╢реБрд░реБрдЖрдд) рдкрд░ 2 рд╕реВрдЪрдХрд╛рдВрдХред рдФрд░ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ, рдЬрдм рд╣рдо рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдХреЛрдиреЗ рд╕рд░рдгреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА (рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреНрдпреВрдм рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╣реИрдВ) рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

// Cube edges
const edges = [
  [0, 1],
  [1, 2],
  [2, 3],
  [3, 0],

  [0, 4],
  [1, 5],
  [2, 6],
  [3, 7],

  [4, 5],
  [5, 6],
  [6, 7],
  [7, 4],
];

рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ 12 рдЬреЛрдбрд╝реЗ рд╣реИрдВ, рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ 2 рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХред

рдЖрдЗрдП рдПрдХ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдШрди рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рд╕реНрдХреЗрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

[sx0000sy0000sz00001]


рдореБрдЦреНрдп рд╡рд┐рдХрд░реНрдг рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ sx, sy, sz рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рддрдиреА рдмрд╛рд░ рд╡рд╕реНрддреБ рдХреЛ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдо 10, 10, 10 рдХреЛ sx, sy, sz рдХреЗ рдмрдЬрд╛рдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдХреНрдпреВрдм рдХреЗ рдХреЛрдиреЗ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рдХреНрдпреВрдм рдХреЛ рджрд╕ рдЧреБрдирд╛ рдмрдбрд╝рд╛ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдпрд╣ рдЕрдм 2 рд╕реЗ 2 рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ 20 рд╕реЗ 20 рддрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ 20.

рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕, рд╕рд╛рде рд╣реА рд╡рд┐рд╕реНрдерд╛рдкрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛:

static getScale(sx, sy, sz) {
  return [
    [sx, 0, 0, 0],
    [0, sy, 0, 0],
    [0, 0, sz, 0],
    [0, 0, 0, 1],
  ]
}

рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрдиреНрд╡реЗрдпрд░


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

const sceneVertices = []
for(let i = 0 ; i < vertices.length ; i++) {
  let vertex = Matrix.multiplyVector(
    Matrix.getScale(100, 100, 100),
    vertices[i]
  );

  vertex = Matrix.multiplyVector(
    Matrix.getTranslation(400, -300, 0),
    vertex
  );

  sceneVertices.push(vertex);
}

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдХреНрдпреВрдм рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕рд┐рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреГрд╢реНрдп рдореЗрдВ рдЧреБрдгрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рд░рдгреА рд╡реНрдпреВрдЕрд░реНрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХрдИ рдХреНрдпреВрдм рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдЧрд▓рд╛ рдХреНрдпреВрдм, t рдЦреАрдВрдЪрдирд╛ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред редрд╕реЗрд╡рд╛ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рд╢реБрд░реБрдЖрддреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд╣рд▓реЗ рдХреНрдпреВрдм рд╕реЗ рджреВрд╖рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рдореИрдВрдиреЗ рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ 100 рдЧреБрдирд╛ рд╕реЗ рдореВрд▓ рдШрди рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреА, рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдЫреЛрд░реЛрдВ рдХреЛ 100, 100, 100 рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдШрди рдХреЗ рд╕рднреА рд╢реАрд░реНрд╖реЛрдВ рдХреЛ рджрд╛рдПрдВ рдФрд░ рдирд┐рдЪрд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреНрд░рдорд╢рдГ 400 рдФрд░ -300 рдкрд┐рдХреНрд╕рд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЖрдХрд╛рд░ 800 рд╕реЗ 600 рд╣реИ, рдпрд╣ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреЗрдВрджреНрд░ рдХреЗ рдбреНрд░рд╛рдЗрдВрдЧ рдХреНрд╖реЗрддреНрд░ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХрд╛ рдЖрдзрд╛ рд╣реЛрдЧрд╛ред

рд╣рдордиреЗ рдЕрдм рддрдХ рд▓рдВрдмреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдбреНрд░реЙрд▓рд╛рдЗрди рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рд╕рдм рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд▓реЛ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдЦрдВрдЧрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдиреЗ рдореЗрдВ рд▓реВрдк рдХреЗ рдиреАрдЪреЗ рдПрдХ рдФрд░ рд▓реВрдк рд▓рд┐рдЦреЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ:

drawer.clearSurface()

for (let i = 0, l = edges.length ; i < l ; i++) {
  const e = edges[i]

  drawer.drawLine(
    sceneVertices[e[0]].x,
    sceneVertices[e[0]].y,
    sceneVertices[e[1]].x,
    sceneVertices[e[1]].y,
    0, 0, 255
  )
}

ctx.putImageData(imageData, 0, 0)

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

рдпрджрд┐ рд╣рдо рдЕрднреА рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реА рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ, Y рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ, рдХреИрдирд╡рд╛рд╕ рдиреАрдЪреЗ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдШрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдХреНрд░реАрди рдХреЗ рдмрд╛рд╣рд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдбреНрд░реЙрдЕрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдЦреАрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд┐рддреНрд░ рдХреЛ Y (рджрд░реНрдкрдг) рдореЗрдВ рдлреНрд▓рд┐рдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рддрдХ, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореЗрд░реЗ рд▓рд┐рдП рдкрд┐рдХреНрд╕реЗрд▓ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

drawPixel(x, y, r, g, b) {
  const offset = (this.width * -y + x) * 4;

  if (x >= 0 && x < this.width && -y >= 0 && y < this.height) {
    this.surface[offset] = r;
    this.surface[offset + 1] = g;
    this.surface[offset + 2] = b;
    this.surface[offset + 3] = 255;
  }
}

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

рдмреЗрд╣рддрд░ рджрд░рд╛рдЬ рд╡рд░реНрдЧ рдХреЛрдб
class Drawer {
  surface = null;
  width = 0;
  height = 0;

  constructor(surface, width, height) {
    this.surface = surface;
    this.width = width;
    this.height = height;
  }

  drawPixel(x, y, r, g, b) {
    const offset = (this.width * -y + x) * 4;

    if (x >= 0 && x < this.width && -y >= 0 && y < this.height) {
      this.surface[offset] = r;
      this.surface[offset + 1] = g;
      this.surface[offset + 2] = b;
      this.surface[offset + 3] = 255;
    }
  }

  drawLine(x1, y1, x2, y2, r = 0, g = 0, b = 0) {
    const round = Math.trunc;
    x1 = round(x1);
    y1 = round(y1);
    x2 = round(x2);
    y2 = round(y2);

    const c1 = y2 - y1;
    const c2 = x2 - x1;

    const length = Math.max(
      Math.abs(c1),
      Math.abs(c2)
    );

    const xStep = c2 / length;
    const yStep = c1 / length;

    for (let i = 0 ; i <= length ; i++) {
      this.drawPixel(
        Math.trunc(x1 + xStep * i),
        Math.trunc(y1 + yStep * i),
        r, g, b,
      );
    }
  }

  clearSurface() {
    const surfaceSize = this.width * this.height * 4;
    for (let i = 0; i < surfaceSize; i++) {
      this.surface[i] = 0;
    }
  }
}

const drawer = new Drawer(
  imageData.data,
  imageData.width,
  imageData.height
);


рдпрджрд┐ рдЖрдк рдЕрднреА рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдирд┐рдореНрди рдЫрд╡рд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:


рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрдВрджреНрд░ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рдПрдХ рдШрди рдорд┐рд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рдереА, рдХреНрдпрд╛ рдмрд╛рдд рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдпрд╣ рдШрди рд╣реИ, рдпрд╣ рдмрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ (рдкрдХреНрд╖) рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдмрд╛рдХреА рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЕрднреА рддрдХ рдЕрдиреБрдорд╛рдиреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреНрдпреВрдм рдХрд╛ рдкрд┐рдЫрд▓рд╛ рдЪреЗрд╣рд░рд╛ рджреВрд░реА рдХреЗ рд╕рд╛рде рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдШрди рд╣реИ, рдЖрдЗрдП рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдШреБрдорд╛рдПрдБ рддрд╛рдХрд┐ рдпрд╣ рдЙрд╕ рдЫрд╡рд┐ рдХреА рддрд░рд╣ рджрд┐рдЦреЗ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦреА рдереА рдЬрдм рд╣рдордиреЗ рд╢реАрд░реНрд╖ рд╕рд░рдгреА рдмрдирд╛рдИ рдереАред 3 рдбреА рдЫрд╡рд┐ рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк 3 рд╡рд┐рд╢реЗрд╖ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдХреНрд╕, рд╡рд╛рдИ рдпрд╛ рдЬреЗрдб рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдо рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛрдЧрд╛ (рд░реЛрдЯреЗрд╢рди рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЧрд▓реЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ)ред рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ рдХрд┐ рдпреЗ рдореИрдЯреНрд░реЗрд╕ рдХреНрдпрд╛ рджрд┐рдЦрддреЗ рд╣реИрдВ:

Rx(a)=[10000cos(a)тИТsin(a)00sin(a)cos(a)00001]


рдПрдХреНрд╕ рдЕрдХреНрд╖ рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕

Ry(a)[cos(a)0sin(a)00100тИТsin(a)0cos(a)00001]


рд╡рд╛рдИ рдЕрдХреНрд╖ рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕

Rz(a)[cos(a)тИТsin(a)00sin(a)cos(a)0000100001]


рдЬреЗрдб рдЕрдХреНрд╖ рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕

рдпрджрд┐ рд╣рдо рдЗрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рд╕реЗ рдХреНрдпреВрдм рдХреЗ рдХреЛрдиреЗ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпреВрдм рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдг (рдП) рджреНрд╡рд╛рд░рд╛ рдШреВрдореЗрдЧрд╛, рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЬрд┐рд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╣рдо рдЪреБрдиреЗрдВрдЧреЗред рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдШреБрдорд╛рддреЗ рд╕рдордп рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдиреАрдЪреЗ рджреЗрдЦреЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ 2 рдлрд╝рдВрдХреНрд╢рди рдкрд╛рдк рдФрд░ рдХреЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Math.sin (a) рдФрд░ Math.cos (a) рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреЛрдгреЛрдВ рдХреЗ рд░реЗрдбрд┐рдпрди рдорд╛рдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рдореЙрдбрд▓ рдХреЛ рдШреБрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП 90 рдбрд┐рдЧреНрд░реА (рдбрд┐рдЧреНрд░реА рдорд╛рдк) рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рд░реЗрдбрд┐рдпрди рдорд╛рдк рдореЗрдВ рд╣реЛрдЧрд╛Pi / 2(JS рдореЗрдВ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдкрд╛рдИ рдорд╛рди рднреА рд╣реИ, рдпрд╣ рд╕реНрдерд┐рд░ Math.PI рд╣реИ)ред рдЖрдЗрдП, рдбрд┐рдЧреНрд░реА рдореЗрдВ рдПрдХ рд╕реНрд╡реАрдХреГрдд рд░реЛрдЯреЗрд╢рди рдХреЛрдг рдХреЗ рд╕рд╛рде рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ 3 рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд░реЗрдбрд┐рдпрдВрд╕ рдореЗрдВ рдмрджрд▓реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдк / рдХреЙрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

static getRotationX(angle) {
  const rad = Math.PI / 180 * angle;

  return [
    [1, 0, 0, 0],
    [0, Math.cos(rad), -Math.sin(rad), 0],
    [0, Math.sin(rad), Math.cos(rad), 0],
    [0, 0, 0, 1],
  ];
}

static getRotationY(angle) {
  const rad = Math.PI / 180 * angle;

  return [
    [Math.cos(rad), 0, Math.sin(rad), 0],
    [0, 1, 0, 0],
    [-Math.sin(rad), 0, Math.cos(rad), 0],
    [0, 0, 0, 1],
  ];
}

static getRotationZ(angle) {
  const rad = Math.PI / 180 * angle;

  return [
    [Math.cos(rad), -Math.sin(rad), 0, 0],
    [Math.sin(rad), Math.cos(rad), 0, 0],
    [0, 0, 1, 0],
    [0, 0, 0, 1],
  ];
}

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

рдХреЛрдб рдореЗрдВ рдКрдкрд░, рд╣рдордиреЗ 2 рдЪрдХреНрд░ рд▓рд╛рдЧреВ рдХрд┐рдП, рдкрд╣рд▓рд╛ рдПрдХ рдХреЛрдиреЗ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдПрдХ рд╢реАрд░реНрд╖ рд░реЗрдЦрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд░реЗрдЦрд╛рдПрдВ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЛрдиреЗ рд╕реЗ рдПрдХ рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдХреЛрдб рдХреЗ рдЗрд╕ рднрд╛рдЧ рдХреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╣рддреЗ рд╣реИрдВред рдХрдиреНрд╡реЗрдпрд░ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЪреЛрдЯреА рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдФрджреНрдпреЛрдЧрд┐рдХ рдХрдиреНрд╡реЗрдпрд░ рдкрд░ рд╕реНрдХреЗрд▓, рд╢рд┐рдлреНрдЯ, рд░реЛрдЯреЗрд╢рди, рд░реЗрдВрдбрд░рд┐рдВрдЧред рдЕрдм рдЖрдЗрдП рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдкрд╣рд▓реЗ рдЪрдХреНрд░ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░реЛрдЯреЗрд╢рдиред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХреНрд╕ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдореВрдВрдЧрд╛, рдлрд┐рд░ рд╡рд╛рдИ рдХреЗ рдЖрд╕рдкрд╛рд╕, рдлрд┐рд░ рдореЙрдбрд▓ рдмрдврд╝рд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛ (рдЕрдВрддрд┐рдо 2 рдХреНрд░рд┐рдпрд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдВ), рдЗрд╕рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рд▓реВрдк рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

for(let i = 0 ; i < vertices.length ; i++) {
  let vertex = Matrix.multiplyVector(
    Matrix.getRotationX(20),
    vertices[i]
  );

  vertex = Matrix.multiplyVector(
    Matrix.getRotationY(20),
    vertex
  );

  vertex = Matrix.multiplyVector(
    Matrix.getScale(100, 100, 100),
    vertex
  );

  vertex = Matrix.multiplyVector(
    Matrix.getTranslation(400, -300, 0),
    vertex
  );

  sceneVertices.push(vertex);
}

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 20 рдбрд┐рдЧреНрд░реА рд╕реЗ, рдлрд┐рд░ рд╡рд╛рдИ рджреНрд╡рд╛рд░рд╛ 20 рдбрд┐рдЧреНрд░реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕рднреА рдЫреЛрд░реЛрдВ рдХреЛ рдШреБрдорд╛рдпрд╛ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 2 рдкрд░рд┐рд╡рд░реНрддрди рдереЗред рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдШрди рдЕрдм рддреАрди рдЖрдпрд╛рдореА рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:


рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдореБрдбрд╝рдиреЗ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреНрдпреВ рдХреЛ Y рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкрд╣рд▓реЗ рдореЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ X рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░, рддреЛ рдкрд░рд┐рдгрд╛рдо рднрд┐рдиреНрди рд╣реЛрдВрдЧреЗ:



X рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 20 рдбрд┐рдЧреНрд░реА рдШреБрдорд╛рдПрдБ, рдлрд┐рд░ Y рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 20 рдбрд┐рдЧреНрд░реАY рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 20 рдбрд┐рдЧреНрд░реА рдШреБрдорд╛рдПрдБ, рдлрд┐рд░ X рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 20 рдбрд┐рдЧреНрд░реА

рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХреНрд╕ рдЕрдХреНрд╖ рдкрд░ рдШрди 90 рдбрд┐рдЧреНрд░реА рдХреЛ рдореЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рдИ рдЕрдХреНрд╖ рдкрд░ 90 рдбрд┐рдЧреНрд░реА, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЬреЗрдб рдЕрдХреНрд╖ рдХреЗ рдЖрд╕рдкрд╛рд╕ 90 рдбрд┐рдЧреНрд░реА, рддреЛ рдЬреЗрдб рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдВрддрд┐рдо рд░реЛрдЯреЗрд╢рди рдПрдХреНрд╕ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░реЛрдЯреЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рд╡рд╣реА рдорд┐рд▓реЗрдЧрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЖрдкрдиреЗ рдЕрднреА Y рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЖрдХреГрддрд┐ 90 рдбрд┐рдЧреНрд░реА рдШреБрдорд╛рдИ рд╣реИред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдХреЛрдИ рдЖрдпрддрд╛рдХрд╛рд░ (рдпрд╛ рдШрди) рд╡рд╕реНрддреБ рд▓реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░реБрдмрд┐рдХ рдХрд╛ рдШрди рдЗрдХрдЯреНрдард╛), рд╡рд╕реНрддреБ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдФрд░ рдЗрд╕реЗ 90 рдбрд┐рдЧреНрд░реА рдкрд░ рдШреБрдорд╛рдПрдВред рдХрд╛рд▓реНрдкрдирд┐рдХ X рдХреЗ рдЖрд╕рдкрд╛рд╕, рдФрд░ рдлрд┐рд░ Y рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 90 рдбрд┐рдЧреНрд░реА рдФрд░ Z рдХреЗ рдЖрд╕рдкрд╛рд╕ 90 рдбрд┐рдЧреНрд░реА рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдХрд┐рд╕ рдкрдХреНрд╖ рдХрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВ, X рдФрд░ Z рдХреЗ рдШреБрдорд╛рд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдХрд░, рдХреЗрд╡рд▓ рдЪрд╛рд░реЛрдВ рдУрд░ рдореБрдбрд╝реЗрдВ Y - рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИредрдЕрдм рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗ, рдпрд╣ рд░реЛрдЯреЗрд╢рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВрдЧреЗ (рдпрджрд┐ рдЖрдк рдЕрднреА рдФрд░ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдм рдкрд░ "hinged lock" рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ) ред

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

let matrix = Matrix.getRotationX(20);

matrix = Matrix.multiply(
  Matrix.getRotationY(20),
  matrix
);

matrix = Matrix.multiply(
  Matrix.getScale(100, 100, 100),
  matrix,
);

matrix = Matrix.multiply(
  Matrix.getTranslation(400, -300, 0),
  matrix,
);

const sceneVertices = [];
for(let i = 0 ; i < vertices.length ; i++) {
  let vertex = Matrix.multiplyVector(
    matrix,
    vertices[i]
  );

  sceneVertices.push(vertex);
}

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

рдЖрдЗрдП рд╕рд░рд▓рддрдо рдПрдиреАрдореЗрд╢рди рдЬреЛрдбрд╝реЗрдВ, рдЕрд░реНрдерд╛рддреН, рд╣рдо рдЕрдВрддрд░рд╛рд▓ рдХреЗ Y рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░реЛрдЯреЗрд╢рди рдХреЛрдг рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо Y рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░реЛрдЯреЗрд╢рди рдХреЛрдг рдХреЛ 1 рдбрд┐рдЧреНрд░реА, рдкреНрд░рддреНрдпреЗрдХ 100 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдХреЛрдб рдХреЛ рд╕реЗрдЯрдЗрдВрдЯрд░рд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реА рдмрд╛рд░ 1 рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рдПрдиреАрдореЗрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

let angle = 0
setInterval(() => {
  let matrix = Matrix.getRotationX(20)

  matrix = Matrix.multiply(
    Matrix.getRotationY(angle += 1),
    matrix
  )

  matrix = Matrix.multiply(
    Matrix.getScale(100, 100, 100),
    matrix,
  )

  matrix = Matrix.multiply(
    Matrix.getTranslation(400, -300, 0),
    matrix,
  )

  const sceneVertices = []
  for(let i = 0 ; i < vertices.length ; i++) {
    let vertex = Matrix.multiplyVector(
      matrix,
      vertices[i]
    )

    sceneVertices.push(vertex)
  }

  drawer.clearSurface()

  for (let i = 0, l = edges.length ; i < l ; i++) {
    const e = edges[i]

    drawer.drawLine(
      sceneVertices[e[0]].x,
      sceneVertices[e[0]].y,
      sceneVertices[e[1]].x,
      sceneVertices[e[1]].y,
      0, 0, 255
    )
  }

  ctx.putImageData(imageData, 0, 0)
}, 100)

рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:


рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЬреЛ рдЖрдЦрд┐рд░реА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рд╣реИ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреА рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рддрд╛рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдИ рджреЗ рдЬрд┐рд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╣рдорд╛рд░рд╛ рдШрди рдШреВрдорддрд╛ рд╣реИред рд╣рдо Y рдЕрдХреНрд╖ рдХреЛ рдХреЗрдВрджреНрд░ рд╕реЗ рдКрдкрд░ рдХреА рдУрд░, 200 рдкрд┐рдХреНрд╕реЗрд▓ рд▓рдВрдмрд╛, X рдЕрдХреНрд╖ рджрд╛рдИрдВ рдУрд░, 200 рдкрд┐рдХреНрд╕реЗрд▓ рд▓рдВрдмрд╛, рдФрд░ Z рдЕрдХреНрд╖ рднреА рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, 150 рдкрд┐рдХреНрд╕реЗрд▓ рдиреАрдЪреЗ рдФрд░ рдмрд╛рдПрдБ (рддрд┐рд░рдЫреЗ) рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХреА рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред ред рдЪрд▓реЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рднрд╛рдЧ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпреЗ рдПрдХреНрд╕, рд╡рд╛рдИ рдЕрдХреНрд╖ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рд▓рд╛рдЗрди рдХреЗрд╡рд▓ рдПрдХ рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдмрджрд▓рддреА рд╣реИред рдХреНрдпреВрдм (рдХрд┐рдирд╛рд░реЛрдВ рдХрд╛ рд▓реВрдк) рдЦреАрдВрдЪрдиреЗ рд╡рд╛рд▓реЗ рд▓реВрдк рдХреЗ рдмрд╛рдж рдПрдХреНрд╕, рд╡рд╛рдИ рдЕрдХреНрд╖ рдкреНрд░рддрд┐рдкрд╛рджрди рдЬреЛрдбрд╝реЗрдВ:

const center = new Vector(400, -300, 0)
drawer.drawLine(
  center.x, center.y,
  center.x, center.y + 200,
  150, 150, 150
)

drawer.drawLine(
  center.x, center.y,
  center.x + 200, center.y,
  150, 150, 150
)

рдХреЗрдВрджреНрд░ рд╡реЗрдХреНрдЯрд░ рдбреНрд░рд╛рдЗрдВрдЧ рд╡рд┐рдВрдбреЛ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 800 рдХреЗ рд╡рд░реНрддрдорд╛рди рдЖрдпрд╛рдо рд╣реИрдВ 600 рд╕реЗ, рдФрд░ -300 рдХреЗ рд▓рд┐рдП рд╡рд╛рдИ, рдореИрдВрдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ drawPixel рдлрд╝рдВрдХреНрд╢рди Y рдХреЛ рдлрд╝реНрд▓рд┐рдк рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рджрд┐рд╢рд╛ рдХреЛ рдХреИрдирд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдмрдирд╛рддрд╛ рд╣реИ (рдХреИрдирд╡рд╛рд╕ рдореЗрдВ, Y рдиреАрдЪреЗ рджрд┐рдЦрддрд╛ рд╣реИ)ред рдлрд┐рд░ рд╣рдо рдбреНрд░реЙрд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 2 рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╡рд╛рдИ 200 рдкрд┐рдХреНрд╕рд▓ рдКрдкрд░ (рд╡рд╛рдИ рдЕрдХреНрд╖ рд░реЗрдЦрд╛ рдХреЗ рдЕрдВрдд) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдПрдХреНрд╕ 200 рдкрд┐рдХреНрд╕рд▓ рдХреЛ рджрд╛рдИрдВ рдУрд░ (рдПрдХреНрд╕ рдЕрдХреНрд╖ рд░реЗрдЦрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ)ред рдкрд░рд┐рдгрд╛рдо:


рдЕрдм Z рдЕрдХреНрд╖ рдХреА рд░реЗрдЦрд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдпрд╣ рдиреАрдЪреЗ рдХреА рдУрд░ рддрд┐рд░рдЫреЗ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ [-1, -1, 0] рд╣реЛрдЧрд╛ рдФрд░ рд╣рдореЗрдВ 150 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреА рд╣реЛрдЧреА, рдЕрд░реНрдерд╛рдд рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ [-1, -1, 0] 150 рд▓рдВрдмрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк [-150, -150, 0] рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдРрд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓рдЧрднрдЧ 212 рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЛрдЧрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдЪрд░реНрдЪрд╛ рдХреА рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЗрд╕реЗ 1 рдХреА рд▓рдВрдмрд╛рдИ рддрдХ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрдХреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрд╕ рд▓рдВрдмрд╛рдИ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ 150 рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реНрдХреНрд░реАрди рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЬреЗрдб рдЕрдХреНрд╖ рдХреЗ рд╡рд┐рд╕реНрдерд╛рдкрди рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЬрд╣рд╛рдВ рдорд┐рд▓рддреЗ рд╣реИрдВ Z рдЕрдХреНрд╖ рд░реЗрдЦрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред Z рдЕрдХреНрд╖ рдХреА рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП 2 рдкрд┐рдЫрд▓реА рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛрдб рдХреЗ рдмрд╛рдж рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

const zVector = new Vector(-1, -1, 0);
const zCoords = Vector.add(
  center,
  zVector.normalize().multiplyByScalar(150)
);
drawer.drawLine(
  center.x, center.y,
  zCoords.x, zCoords.y,
  150, 150, 150
);

рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рднреА 3 рдЕрдХреНрд╖ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:


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

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

рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХреЛрдб
const ctx = document.getElementById('surface').getContext('2d');
const imageData = ctx.createImageData(800, 600);

class Vector {
  x = 0;
  y = 0;
  z = 0;
  w = 1;

  constructor(x, y, z, w = 1) {
    this.x = x;
    this.y = y;
    this.z = z;
    this.w = w;
  }

  multiplyByScalar(s) {
    this.x *= s;
    this.y *= s;
    this.z *= s;

    return this;
  }

  static add(v1, v2) {
    return new Vector(
      v1.x + v2.x,
      v1.y + v2.y,
      v1.z + v2.z,
    );
  }

  getLength() {
    return Math.sqrt(
      this.x * this.x + this.y * this.y + this.z * this.z
    );
  }

  normalize() {
    const length = this.getLength();

    this.x /= length;
    this.y /= length;
    this.z /= length;

    return this;
  }
}

class Matrix {
  static multiply(a, b) {
    const m = [
      [0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0],
    ];

    for (let i = 0 ; i < 4 ; i++) {
      for(let j = 0 ; j < 4 ; j++) {
        m[i][j] = a[i][0] * b[0][j] +
          a[i][1] * b[1][j] +
          a[i][2] * b[2][j] +
          a[i][3] * b[3][j];
      }
    }

    return m;
  }

  static getRotationX(angle) {
    const rad = Math.PI / 180 * angle;

    return [
      [1, 0, 0, 0],
      [0, Math.cos(rad), -Math.sin(rad), 0],
      [0, Math.sin(rad), Math.cos(rad), 0],
      [0, 0, 0, 1],
    ];
  }

  static getRotationY(angle) {
    const rad = Math.PI / 180 * angle;

    return [
      [Math.cos(rad), 0, Math.sin(rad), 0],
      [0, 1, 0, 0],
      [-Math.sin(rad), 0, Math.cos(rad), 0],
      [0, 0, 0, 1],
    ];
  }

  static getRotationZ(angle) {
    const rad = Math.PI / 180 * angle;

    return [
      [Math.cos(rad), -Math.sin(rad), 0, 0],
      [Math.sin(rad), Math.cos(rad), 0, 0],
      [0, 0, 1, 0],
      [0, 0, 0, 1],
    ];
  }

  static getTranslation(dx, dy, dz) {
    return [
      [1, 0, 0, dx],
      [0, 1, 0, dy],
      [0, 0, 1, dz],
      [0, 0, 0, 1],
    ];
  }

  static getScale(sx, sy, sz) {
    return [
      [sx, 0, 0, 0],
      [0, sy, 0, 0],
      [0, 0, sz, 0],
      [0, 0, 0, 1],
    ];
  }

  static multiplyVector(m, v) {
    return new Vector(
      m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z + m[0][3] * v.w,
      m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z + m[1][3] * v.w,
      m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z + m[2][3] * v.w,
      m[3][0] * v.x + m[3][1] * v.y + m[3][2] * v.z + m[3][3] * v.w,
    );
  }
}

class Drawer {
  surface = null;
  width = 0;
  height = 0;

  constructor(surface, width, height) {
    this.surface = surface;
    this.width = width;
    this.height = height;
  }

  drawPixel(x, y, r, g, b) {
    const offset = (this.width * -y + x) * 4;

    if (x >= 0 && x < this.width && -y >= 0 && -y < this.height) {
      this.surface[offset] = r;
      this.surface[offset + 1] = g;
      this.surface[offset + 2] = b;
      this.surface[offset + 3] = 255;
    }
  }
  drawLine(x1, y1, x2, y2, r = 0, g = 0, b = 0) {
    const round = Math.trunc;
    x1 = round(x1);
    y1 = round(y1);
    x2 = round(x2);
    y2 = round(y2);

    const c1 = y2 - y1;
    const c2 = x2 - x1;

    const length = Math.max(
      Math.abs(c1),
      Math.abs(c2)
    );

    const xStep = c2 / length;
    const yStep = c1 / length;

    for (let i = 0 ; i <= length ; i++) {
      this.drawPixel(
        Math.trunc(x1 + xStep * i),
        Math.trunc(y1 + yStep * i),
        r, g, b,
      );
    }
  }

  clearSurface() {
    const surfaceSize = this.width * this.height * 4;
    for (let i = 0; i < surfaceSize; i++) {
      this.surface[i] = 0;
    }
  }
}

const drawer = new Drawer(
  imageData.data,
  imageData.width,
  imageData.height
);

// Cube vertices
const vertices = [
  new Vector(-1, 1, 1), // 0 
  new Vector(-1, 1, -1), // 1 
  new Vector(1, 1, -1), // 2 
  new Vector(1, 1, 1), // 3 
  new Vector(-1, -1, 1), // 4 
  new Vector(-1, -1, -1), // 5 
  new Vector(1, -1, -1), // 6 
  new Vector(1, -1, 1), // 7 
];

// Cube edges
const edges = [
  [0, 1],
  [1, 2],
  [2, 3],
  [3, 0],

  [0, 4],
  [1, 5],
  [2, 6],
  [3, 7],

  [4, 5],
  [5, 6],
  [6, 7],
  [7, 4],
];

let angle = 0;
setInterval(() => {
  let matrix = Matrix.getRotationX(20);

  matrix = Matrix.multiply(
    Matrix.getRotationY(angle += 1),
    matrix
  );

  matrix = Matrix.multiply(
    Matrix.getScale(100, 100, 100),
    matrix,
  );

  matrix = Matrix.multiply(
    Matrix.getTranslation(400, -300, 0),
    matrix,
  );

  const sceneVertices = [];
  for(let i = 0 ; i < vertices.length ; i++) {
    let vertex = Matrix.multiplyVector(
      matrix,
      vertices[i]
    );

    sceneVertices.push(vertex);
  }

  drawer.clearSurface();

  for (let i = 0, l = edges.length ; i < l ; i++) {
    const e = edges[i];

    drawer.drawLine(
      sceneVertices[e[0]].x,
      sceneVertices[e[0]].y,
      sceneVertices[e[1]].x,
      sceneVertices[e[1]].y,
      0, 0, 255
    );
  }

  const center = new Vector(400, -300, 0)
  drawer.drawLine(
    center.x, center.y,
    center.x, center.y + 200,
    150, 150, 150
  );

  drawer.drawLine(
    center.x, center.y,
    center.x + 200, center.y,
    150, 150, 150
  );

  const zVector = new Vector(-1, -1, 0, 0);
  const zCoords = Vector.add(
    center,
    zVector.normalize().multiplyByScalar(150)
  );
  drawer.drawLine(
    center.x, center.y,
    zCoords.x, zCoords.y,
    150, 150, 150
  );

  ctx.putImageData(imageData, 0, 0);
}, 100);


рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


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

All Articles