intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

LẬP TRÌNH WINDOWS - Graphics Device Interface

Chia sẻ: Lê Quảng Vàng | Ngày: | Loại File: PDF | Số trang:58

45
lượt xem
2
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

void CGDISampleView::MoveSelectedObject(CPoint point) {… CRect *ptrRect; ptrRect = pDoc-GetLine(m_nLineSel); //Xóa đường cũ dc.MoveTo(ptrRect-TopLeft()); dc.LineTo(ptrRect-BottomRight()); //Tịnh tiến đến vị trí mới int dx, dy; dx = -m_ptStartSel.x + point.x; dy = -m_ptStartSel.y + point.y; ptrRect-top = ptrRect-top + dy; ptrRect-left = ptrRect-left + dx; ptrRect-bottom = ptrRect-bottom + dy; ptrRect-right = ptrRect-right + dx; //Vẽ đường mới dc.MoveTo(ptrRect-TopLeft()); dc.LineTo(ptrRect-BottomRight()); m_ptStartSel = point; …...

Chủ đề:
Lưu

Nội dung Text: LẬP TRÌNH WINDOWS - Graphics Device Interface

  1. Đại Học Sư Phạm Tp. Hồ Chí Minh Khoa Toán – Tin Học LẬP TRÌNH WINDOWS Thư viện đồ họa GDI (Graphics Device Interface) Lập trình đồ họa với thư viện GDI Trần Ngọc Bảo Email: tnbao.dhsp@gmail.com
  2. TÌM HIỂU ỨNG DỤNG PAINT ™ Vẽ các đối tượng trong GDI ™ Line ™ Rectangle ™ Circle ™… ™ Chọn đối tượng ™ Di chuyển đối tượng ™ Lưu trữ các đối tượng Tran Ngoc Bao 2 Dai hoc Su Pham TP.HCM
  3. TÌM HIỂU ỨNG DỤNG PAINT ™ Vẽ các đối tượng trong GDI ™ Line ™ Rectangle ™ Circle ™ Chọn đối tượng ™ Di chuyển đối tượng ™ Lưu trữ các đối tượng Tran Ngoc Bao 3 Dai hoc Su Pham TP.HCM
  4. VẼ ĐỐI TƯỢNG Demo chuong trinh Paint Tran Ngoc Bao 4 Dai hoc Su Pham TP.HCM
  5. TÌM HIỂU ỨNG DỤNG PAINT ™ Vẽ các đối tượng trong GDI ™ Line ™ Rectangle ™ Circle ™ Chọn đối tượng ™ Di chuyển đối tượng ™ Lưu trữ các đối tượng Tran Ngoc Bao 5 Dai hoc Su Pham TP.HCM
  6. CHỌN ĐỐI TƯỢNG Tran Ngoc Bao 6 Dai hoc Su Pham TP.HCM
  7. CHỌN ĐỐI TƯỢNG - ĐƯỜNG THẲNG ™ Về mặt toán học - Đoạn thẳng được tạo bởi 2 điểm P(xP,yP),Q(xQ,yQ) - Gọi M(xM, yM) là vị trí của chuột P(xP,yP) P(xP,yP) M(xM,yM) Q(xQ,yQ) Q(xQ,yQ) Chọn đường thẳng tương đương với việc di chuyển chuột và click lên đường thẳng PQ Æ Tọa độ M của chuột nằm trên đường thẳng PQ hay M ∈ PQ Tran Ngoc Bao 7 Dai hoc Su Pham TP.HCM
  8. CHỌN ĐỐI TƯỢNG - ĐƯỜNG THẲNG ™ Về mặt toán học - Phương trình chính tắc đường thẳng PQ x − xP y − yP = P x P − xQ y P − y Q Ax + By + C = 0 A = yP – yQ Q B = xQ – xP C = xP*yQ – xQ*yP Tran Ngoc Bao 8 Dai hoc Su Pham TP.HCM
  9. CHỌN ĐỐI TƯỢNG - ĐƯỜNG THẲNG ™ Về mặt toán học - Phương trình chính tắc đường thẳng PQ P Ax + By + C = 0 (d) A = yP – yQ M B = xQ – xP C = xP*yQ – xQ*yP Q Tọa độ M của chuột nằm trên đường thẳng PQ hay M ∈ PQ Æ Khoảng cách từ M đến PQ bằng 0 Ax M + By M + C =0 A2 + B 2 Tran Ngoc Bao 9 Dai hoc Su Pham TP.HCM
  10. CHỌN ĐỐI TƯỢNG - ĐƯỜNG THẲNG ™ Về mặt toán học - M thuộc đoạn PQ Æ M thỏa 3 điều kiện sau P x P ≤ xM ≤ x Q y P ≤ yM ≤ y Q Ax M + By M + C =0 Q A2 + B 2 M Với Ax + By + C = 0 (d) là phương trình đường thẳng qua 2 điểm PQ Tran Ngoc Bao 10 Dai hoc Su Pham TP.HCM
  11. CHỌN ĐỐI TƯỢNG - ĐƯỜNG THẲNG ™ Cài đặt chương trình - M thuộc đoạn PQ Æ M thỏa 3 điều kiện sau P xmin ≤ xM ≤ xmax ymin ≤ yM ≤ ymax M Ax M + By M + C =≤ 0ε Q A2 + B 2 P Với - Ax + By + C = 0 (d) là phương trình đường thẳng qua 2 điểm PQ M - xmin = min(xP,xQ), xmax = max(xP,xQ) - ymin = min(yP,yQ), ymax = max(yP,yQ) Q Tran Ngoc Bao 11 Dai hoc Su Pham TP.HCM
  12. CHỌN ĐƯỜNG THẲNG - DEMO ™ Hệ số A, B, C của phương trình đường thẳng PQ void CGDISampleView::LineEquation(CPoint point1, CPoint point2,long &A, long &B, long &C) { Ax + By + C = 0 (d) A = Q.y - P.y; A = yP – yQ B = P.x - Q.x; B = xQ – xP C = (long)P.y*Q.x - (long)P.x*Q.y; C = xP*yQ – xQ*yP } ™ Khoảng cách từ điểm M đến đường thẳng PQ int CGDISampleView::LineDistance(CPoint M, CPoint P, CPoint Q) { long A,B,C; Ax + By M + C LineEquation(P,Q,A,B,C); M =0 double kc = abs(A*M.x+B*M.y+C)/sqrt(A*A+B*B); return int(kc); A + B2 2 } Tran Ngoc Bao 12 Dai hoc Su Pham TP.HCM
  13. CHỌN ĐƯỜNG THẲNG - DEMO ™ Kiểm tra điều kiện M ∈ PQ BOOL CGDISampleView::Between(CPoint M, CPoint P, CPoint Q) { const constDist = 5; int x1,y1,x2,y2; x2 = max(P.x,Q.x) + constDist; x1 = min(P.x,Q.x); y2 = max(P.y,Q.y) + constDist; y1 = min(P.y,Q.y); if ((M.x=x1)&&(M.y=y1)) return true; return false; } xmin ≤ xM ≤ xmax Với - xmin = min(xP,xQ), xmax = max(xP,xQ) ymin ≤ yM ≤ ymax - ymin = min(yP,yQ), ymax = max(yP,yQ) Tran Ngoc Bao 13 Dai hoc Su Pham TP.HCM
  14. CHỌN ĐƯỜNG THẲNG - DEMO ™ Kiểm tra điểm M ∈ PQ BOOL CGDISampleView::ContainsInBorder(CPoint M, CPoint P, CPoint Q) { const constDist = 5; if ((Between(M,P,Q)) && (LineDistance(M,P,Q)
  15. CHỌN ĐƯỜNG THẲNG - DEMO Vẽ hình chữ nhật tại điểm P Vẽ hình chữ nhật tại điểm Q Tran Ngoc Bao 15 Dai hoc Su Pham TP.HCM
  16. CHỌN ĐƯỜNG THẲNG - DEMO void CGDISampleView::ShowSelectedLine(CPoint point) { CClientDC dc(this); CRect *ptrRect; const WIDTH = 4; int nOldMode = dc.SetROP2(R2_NOTXORPEN); CGdiObject *pOldBrush = dc.SelectStockObject(NULL_BRUSH); //Ve 2 dau cua diem chon CPoint p1,p2; p1 = ptrRect->TopLeft(); p2 = ptrRect->BottomRight(); dc.Rectangle(p1.x-WIDTH,p1.y-WIDTH,p1.x+WIDTH,p1.y+WIDTH); dc.Rectangle(p2.x-WIDTH,p2.y-WIDTH,p2.x+WIDTH,p2.y+WIDTH); dc.SelectObject(pOldBrush); dc.SetROP2(nOldMode); dc.MoveTo(ptrRect->TopLeft()); dc.LineTo(ptrRect->BottomRight()); } Tran Ngoc Bao 16 Dai hoc Su Pham TP.HCM
  17. CHỌN HÌNH CHỮ NHẬT RỖNG Tran Ngoc Bao 17 Dai hoc Su Pham TP.HCM
  18. CHỌN HÌNH CHỮ NHẬT RỖNG B ™ Về mặt toán học M A B M A C D C D - Kiểm tra điểm M ∈ AB - Kiểm tra điểm M ∈ BC - Kiểm tra điểm M ∈ CD - Kiểm tra điểm M ∈ DA Tran Ngoc Bao 18 Dai hoc Su Pham TP.HCM
  19. CHỌN HÌNH TRÒN ™ Về mặt toán học Phương trình đường tròn (C) tâm O bán kính R M(XM,YM) (x - xo)2 + (y – yo)2 = R2 (c) R M thuộc đường tròn (C) Î tọa độ điểm M(xM,yM) thỏa phương trình (C) O(XO,YO) (xM - xo)2 + (yM – yo)2 = R2 (c) Tran Ngoc Bao 19 Dai hoc Su Pham TP.HCM
  20. CHỌN HÌNH TRÒN ™ Cài đặt chương trình Phương trình đường tròn (C) tâm O bán kính R M(XM,YM) (x - xo)2 + (y – yo)2 = R2 (c) R M thuộc đường tròn (C) Î tọa độ điểm M(xM,yM) thỏa phương trình (C) O(XO,YO) R2 - ε ≤ (xM - xo)2 + (yM – yo)2 ≤ R2 + ε Tran Ngoc Bao 20 Dai hoc Su Pham TP.HCM
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2