Логічна система координат
No comments« Введення Звязність Відсікання Перехід до віконних координат | Аффінноє перетворення і його матричне уявлення »
Вуаля! Отримуємо те, що потрібне. Слід відмітити, що X = T(X_Log) зростаюча функція, а Y = T(Y_Log) що убуває. Це показує різницю напрямів осей в логічній і віконній системах координат.
Прим. Переклад між системами координат, включає множення і роботу з числами з плаваючою крапкою. Тому робити такий перерахунок на кожен піксел зображення, що виводиться, не розумно. Про те, коли потрібно його робити я розповім пізніше, коли розмова піде про стадії роботи графічної програми.
Ось трикутник з попереднього уроку. Зберігши свої пропорції, він отримав деякі переваги.
Нижче приводиться новий код модуля draw.cpp:
#include
int Width, Height;
const int MARGIN = 10;
void SetWindowSize(int _Width, int _Height){
Width = _Width;
Height = _Height;
}
int Tx(double X_Log){
int X_Window;
X_Window = MARGIN + (1.0 / 2) * (X_Log + 1) * (Width - 2 * MARGIN);
return X_Window;
}
int Ty(double Y_Log){
int Y_Window;
Y_Window = MARGIN + (-1.0 / 2) * (Y_Log - 1) * (Height - 2 * MARGIN);
return Y_Window;
}
void Draw(HDC hdc){
MoveToEx(hdc, Tx(0.0), Ty(0.5), NULL);
LineTo(hdc, Tx(0.5), Ty(0.0));
LineTo(hdc, Tx(-0.5), Ty(-0.5));
LineTo(hdc, Tx(0.0), Ty(0.5));
}
В draw .h додається оголошення новій функції:
void Draw(HDC hdc);
void SetWindowSize(int _Width, int _Height);
В модуль main.cpp додаємо обробник події WM_SIZE і WM_ERASEBKGND :
case WM_SIZE:
GetClientRect(hWnd &Rect);
SetWindowSize(Rect.right - Rect.left, Rect.bottom - Rect.top);
break;
case WM_ERASEBKGND:
Tags: зображення, зростаюча функція, координата, напрям осей, перетворення координат, розмір, система, фон, що виводиться
2D теорія
Схожі записи
Wednesday, March 25th, 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.

