Các phép ánh xạ

Một phần của tài liệu XÂY DỰNG THƯ VIỆN PHẦN MỀM HỖ TRỢ HỆ THỐNG THÔNG TIN ĐNA LÝ GIS 3D DỰA TRÊN CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI TƯỢNG BẰNG NGÔN NGỮ C++ (Trang 37 - 38)

DML hỗ trợ ba phép ánh xạ cơ bản: thay đổi vị trí trục, đảo hướng trục và tịnh tiến gốc tọa độ. Các phép ánh xạ này lưu trữ trong cấu trúc MAPSTATUS.

typedef struct {

int AxisOrder[3]; real Origin[3]; int AxisDir[3]; } MAPSTATUS, *PMAPSTATUS;

Các phép ánh xạ là hai chiều và có mang tính tương đối. Ánh xạ thuận chuyển tọa độ thế giới thực sang tọa độ ánh xạ; ánh xạ nghịch chuyển tọa độ ánh xạ sang tọa độ thế giới thực. Phép ánh xạ tương đối tác động lên bảng ánh xạ dựa vào hệ trục tọa độ hiện tại. Phép ánh xạ tuyệt đối tác động lên bảng ánh xạ theo hệ trục chuNn ban đầu.

Objects/ Search Query Mapping is enabled. Mapping is disabled. World coordinate World coordinate Mapped coordinate

APPLICATION coordinateObject

Hình 2-3. Sơ đồ Mapped Coordinate System.

III.2.1. Các phép ánh xạ.

a. Thay đổi trật tự trục tọa độ.

Phép thay đổi trục tọa độ cho phép giả lập việc xoay các trục tọa độ.

Ví dụ: đối với hệ tọa độ thế giới thực, trục z hướng lên, trục y nằm hướng ngang sang phải và x hướng ra. Trong khi hệ tọa độ dùng trong OpenGL là: trục y hướng lện, x ngang sang phải và z hướng ra. Như vậy ta thấy, để vẽ một đối tượng từ thế giới thực bằng OpenGL ta phải hốn đổi vị trí các trục như sau: xw Ỉ zv, yw Ỉ xv, zw Ỉ zv. Phép đổi trật tự trục tọa độ tác động đến trường AxisOrder của cấu trúc MAPSTATUS. Các trục tọa độ được mã hóa như sau: 0 – x, 1 – y, 2 – z.

Phép ánh xạ thuận tác động lên trường AxisOrder của bảng ánh xạ như sau:

OldOrder = AxisOrder;

AxisOrder[OldOrder[X_AXIS]]=newX; AxisOrder[OldOrder[Y_AXIS]]=newY; AxisOrder[OldOrder[Z_AXIS]]=newZ;

b. Tịnh tiến hệ trục tọa độ.

Phép tịnh tiến hệ trục tọa dộ tác động đến trường Origin theo công thức sau:

Origin[X_AXIS]+=orgX; Origin[Y_AXIS]+=orgY; Origin[Z_AXIS]+=orgZ;

c. Đảo trục tọa dộ.

Đảo trục tọa độ giống như xoay trục tọa độ một góc 1800. Phép ánh xạ này tác động

lên trường AxisDir như sau:

AxisDir[X_AXIS]*=dirX; AxisDir[Y_AXIS]*=dirY; AxisDir[Y_AXIS]*=dirZ;

Một phần của tài liệu XÂY DỰNG THƯ VIỆN PHẦN MỀM HỖ TRỢ HỆ THỐNG THÔNG TIN ĐNA LÝ GIS 3D DỰA TRÊN CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI TƯỢNG BẰNG NGÔN NGỮ C++ (Trang 37 - 38)

Tải bản đầy đủ (PDF)

(117 trang)