Показать сообщение отдельно
  #4  
Старый 01.10.2010, 07:21
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

Дык по аффинным преобразованиям море литературы и ссылок можно найти.
Вот простейший пример на Дельфи с использованием Win GDI-функции StretchBlt (для такого рода преобразования достаточно её, или аналога из используемой графической библиотеки, который отображает один прямоугольник на другой)

Код:
var
  Wdt, Hgt, nw: Integer;
begin
  Canvas.FillRect(Clientrect);
  SetStretchBltMode(Canvas.Handle, HALFTONE);
  Wdt := b.Width;
  Hgt := b.Height;
  nw := Round(Wdt * Cos(Phi));


  StretchBlt(Canvas.Handle, (Wdt - nw) div 2, 0, nw, Hgt,
             b.Canvas.Handle, 0, 0, Wdt, Hgt, SRCCOPY);

  Phi := Phi + Pi / 72;