Перенос

Преобразование переноса (рис. 1.4) на вектор а задается формулой,

Как легко видеть, преобразование переноса (1.11) не является линейным

Рис. 1.4

Как легко видеть, преобразование переноса (1.11) не является линейным

(/(* + >)*/(*) + /(>))

И линейные преобразования и преобразование переноса являются представителями класса аффинных преобразований.

Определение. Отображение / называется аффинным, если его можно представить в виде у = Мх + а, (1.12)

где ае Ь.

Можно показать, что любое невырожденное аффинное преобразование вида (1.12) можно представить как суперпозицию (произведение) приведенных выше элементарных преобразований.

Пример. Рассмотрим отражение относительно произвольной прямой в пространстве Л2. Первым шагом будет преобразование Т(а) переноса на такой вектор а, чтобы рассматриваемая прямая проходила через начало координат. Следующим шагом будет преобразование поворота вокруг начала координат /?(ф), переводящее прямую в ось Ох. После этого мы выполняем отражение М0хотносительно оси Ох, а потом выполняем поворот на угол -ф и переносна -а (рис. 1.5).

Глава І. Координаты и их преобразование Таким образом, интересующее иас преобразование можно записать в виде следующей суперпозиции (т. е. последовательного применения) элементарных преобразований"images/tmpFE1D-9.png">

Для работы с двухмерными векторами введем класс УесЮг20, описываемый ниже.

А. В. Ьоресков. Графит трехмерной компьютерной игры

Vector2D () {}
Vector2D ( float px, float py ) {
x = px;
y = py;
}
Vector2D ( const Vector2D& v ) {
x = v.x; y = v.y;
}
Vector2D& operator = ( const Vector2D& v ) {
x = v.x; y = v.y;
return *this;
}
Vector2D operator + () const {
return *this;
}
Vector2D operator - () const {
return Vector2D ( -x, -y ) ;
}
Vector2D& operator += ( const Vector2D& v ) {
x += v.X; y += v.y;
return *this;
}
Vector2D& operator -= ( const Vector2D& v ) {
x -= v.x; y -= v.y;
return *this;
}

Координаты и их преобразования

Vector2D& operator *= ( const Vector2D& v ) {
x *= v.x; y * = v.y;
return *this;
}
Vector2D& operator *= ( float f ) {
x *= f; y *= f;
return *this;

⇐ Предыдущая| |Следующая ⇒