posts | comments
28Mar

Поворот площини за допомогою миші

No comments
« Математичне завдання прямій на площині   |   Вектори в просторі Однорідні координати Матриці перетворень »

Розглянемо тривимірний простір, причому наш двомірний перетин це площина z = 0. Це означає, що все вектора в цій площині мають третю координату рівної 0. Векторний перемножимо вектора OM(x, у) і OM’(x’, у’):

2D теорія - Поворот площини за допомогою миші

Функція від векторів f( а , b )= (xy’ - юшок’) буде рівна синусу направленого кута від вектора а до вектора b , помноженому на довжини векторів а і b (| а || b |sin(б)).

Прим. Можете перевірити, що (f( а , b )) 2 + ( а b )2 = | а || b |.

pokerstars

Враховуючи той факт, що наші вектора одиничні (M0’ і M’ лежать на одиничній сфері), за допомогою скалярного твору і функції f( а , b ) отримуємо косинус і синус потрібного кута з урахуванням його напряму. Залишається підставити набутих значень в матрицю повороту і необхідний ефект буде отриманий.

Прим. Є чудова тригонометрична тотожність:

Але в даному випадку їм скористатися не вдається саме з тих міркувань, що потрібно враховувати знак тригонометричної функції:

2D теорія - Поворот площини за допомогою миші

Програмна реалізація

Теорія зрозуміла. Тепер перейдемо до реалізації, яка виявляється достатньо громіздкою. Знадобиться модуль для роботи з векторами:

#include “math.h”

typedef double vec_float;

class vec

{

public:

vec_float x, у;

vec(){

vec(vec_float xx, vec_float yy)

{

x = xx;

у = yy;

}

vec(const vec& vector)

{

x = vector.x;

у = vector.y;

}


Tags: , , , , , , , ,

2D теорія


Схожі записи

Categories: 2D теорія

Saturday, March 28th, 2009 at 09:15 and is filed under 2D теорія. You can follow any responses to this entry through the feed. Both comments and pings are currently closed.