Завъртете самолета с мишката
Преди да преминете към доста сложна тема, а именно да зададете афинна трансформация в матрична форма, помислете за следния въпрос. Как да завъртите изображение (равнина) с мишка?
Има двойка точки M0 (x 0, y 0), M (x, y) - началната и крайната позиция на мишката. От тези точки трябва да определите ъгъла на въртене на равнината. Как да го направя. Можете да опитате да експериментирате с формулите, но скоро ще стане ясно, че е необходимо да се вземат предвид не само относителните промени в координатите Δ x, Δ y, но и техните абсолютни стойности. Така например, на изображението по-долу, промените x за движенията на мишката M0M и M0'M са еднакви, но интуитивно едно от тези движения завърта триъгълника по посока на часовниковата стрелка, а другото обратно на часовниковата стрелка.

Същността на техниката е, че се изгражда въображаем единичен кръг с център в началото на координатите и върху него се измерват началният и крайният ъгъл. След това се прави обрат за разликата насочени ъгли.

В този случай, за да получите точките M 0 'и M', просто трябва да нормализирате векторите OM 0 и OM. Сега нека завъртим равнината, така че векторът OM 0 'да се превърне в OM'. Оказва се, че това не е толкова лесно, колкото може да изглежда на пръв поглед.
Ъгъл между векторите
Нека да видим как да изчислим ъгъла между векторите в декартова координатна система. Първото нещо, което ви идва на ум, е да използвате точковия продукт.

Проблемът е, че за точковото произведение векторите OM '' и OM '' ще бъдат неразличими. Можете да получите косинуса на ъгъла между тях. Но ако завъртите равнината от OM към OM ', тогава въртенето е по посока на часовниковата стрелка. В случая на OM “- обратно на часовниковата стрелка. Така По този начин, освен стойността на ъгъла, трябва да знаете и неговия знак. "Кръстосан продукт" може да помогне тук.
Приблизително Защото ние работим в двумерно пространство, тогава е невъзможно да се говори стриктно за векторния продукт. Но можете да използвате резултата, че тази операция разграничава реда на векторите.
Помислете за триизмерно пространство и нашето двумерно сечение е равнината z = 0. Това означава, че всички вектори в тази равнина имат третата координата, равна на 0. Векторът умножава векторите OM (x, y) и OM '(x ’, y’):
Функция от вектори f ( а, б ) = (x y ’- y x’) ще бъде равно на синуса на посоката на ъгъла от вектора и към вектор б, умножено по дължините на векторите а и б (| а || б | грях (α)).
Приблизително Можете да проверите дали (f ( а, б )) 2 + ( а • б ) 2 = | а || б |.
Като се вземе предвид факта, че нашите вектори са единица (M 0 'и M' лежат върху единичната сфера), като се използва скаларното произведение и функцията f ( а, б ) получаваме косинуса и синуса на желания ъгъл, като вземаме предвид неговата посока. Остава да замести получените стойности в матрицата на въртене и ще се получи необходимия ефект.