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

Bài giảng Lập trình Windows: Bài 6 - Trần Ngọc Bảo

Chia sẻ: Đinh Gấu | Ngày: | Loại File: PDF | Số trang:58

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

Bài giảng Lập trình Windows: Bài 6 - Trần Ngọc Bảo giới thiệu đến bạn đọc những nội dung về vẽ các đối tượng trong GDI, Line, Rectangle, Circle, chọn đối tượng, di chuyển đối tượng và lưu trữ các đối tượng. Với các bạn đang học chuyên ngành Công nghệ thông tin thì đây là tài liệu tham khảo hữu ích dành cho các bạn.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình Windows: Bài 6 - Trần Ngọc Bảo

  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