Line Clipping in 2D Xén đường thẳng trong 2D

Slides:



Advertisements
Các bản thuyết trình tương tự
DẠY HỌC THEO PHƯƠNG PHÁP LAMAP Ở TRƯỜNG PHỔ THÔNG –
Advertisements

MẤY Ý NGHĨ VỀ THƠ ĐỐT- XTÔI-ÉP-XKI
“QUẢN TRỊ DỰ ÁN VÀ DOANH NGHIỆP CÓ VỐN ĐẦU TƯ NƯỚC NGOÀI”
NÂNG CAO NĂNG LỰC ĐÁNH GIÁ THƯỜNG XUYÊN TRONG DẠY HỌC MÔN TOÁN
Xin nhấp chuột để đổi hình
Kiểm thử và đảm bảo chất lượng phần mềm
PHÒNG TÀI NGUYÊN VÀ MÔI TRƯỜNG CÁC CÔNG TÁC BẢO VỆ MÔI TRƯỜNG
LUYỆN TẬP VỀ PHƯƠNG PHÁP LẬP LUẬN TRONG VĂN NGHỊ LUẬN
Thắp đèn : bắm nút vàng vàng dưới chân đèn
Hướng dẫn lập trình trên
TS. Nguyễn Quang Tuyến Đại học Luật Hà Nội
BÀI TẬP THỰC HÀNH 1 BƯỚC ĐẦU GIẢI BÀI TOÁN TIN HỌC.
CÁC HÀM CƠ BẢN TRONG EXCEL (1)
Kiểm thử và đảm bảo chất lượng phần mềm
GIỚI THIỆU VỀ HIỆN TRẠNG VÀ NHU CẦU BẢO ĐẢM ATTT MẠNG TẠI VIỆT NAM
VIẾT CHƯƠNG TRÌNH GIẢI BÀI TOÁN TIN HỌC
Xinh đẹp! Beautiful!.
Chương 3. BIÊN VÀ CÁC PHƯƠNG PHÁP PHÁT HIỆN BIÊN
VÀ CÁC EM HỌC SINH THÂN YÊU !
HOÏC VIEÄN HAØNH CHÍNH QUOÁC GIA
Trường ĐH Điện lực & Hiệp hội các trường ĐH, CĐ Việt Nam
HỘI THẢO "PHƯƠNG PHÁP GIẢI QUYẾT CÁC TÌNH HUỐNG SP"

Chương 3 – Các kỹ thuật gỡ lỗi và kiểm thử chương trình
BẢO VỆ SỰ SỐNG CON NGƯỜI 2.
Giới thiệu môn học.
ĐÁNH GIÁ KẾT QUẢ HOẠT ĐỘNG TRẢI NGHIỆM SÁNG TẠO
Hội nghị mạng lưới CTCH 2017 tại Bà Rịa
Chào mừng quý thầy cô về dự giờ, thăm lớp 5/C
KỸ THUẬT VIẾT CÂU HỎI TRẮC NGHIỆM NHIỀU LỰA CHỌN
VUI HỌC KINH THÁNH-GIÁO LÝ
Class & Struct II Lập trình nâng cao.
Con trỏ Lập trình nâng cao
ĐẠI CƯƠNG CHÂM CỨU.
Điều khiển LED và Động cơ DC
HỌC SINH NHÀ TRƯỜNG CHA MẸ 1.
TRƯỜNG MN THSP KON TUM HOẠT ĐỘNG ÂM NHẠC.
Chương 06 KIỂU DỮ LIỆU NGƯỜI LẬP TRÌNH ĐỊNH NGHĨA
Automata hữu hạn & Biểu thức chính quy
Hiểu Biết về Kết Quả SBAC CAASPP – California Assessment of Student Performance and Progress (Đánh Giá của California về Thành Quả và Tiến.
KHẮC PHỤC HIỆN TƯỢNG QUÁ TẢI BỂ KHÍ SINH HỌC
Chương 3: Các dị cấu trúc Chương này cho một tổng quan về tính chất của các dị cấu trúc. Đó là các bán dẫn bao gồm hơn một loại vật liệu. Những thay đổi.
Chương 2 Đại cương về máy tính điện tử (MTĐT)
Bµi 12 kiÓu x©u Gi¸o ¸n ®iÖn tö tin häc líp 11.
TÍNH TOÁN TRÊN TRANG TÍNH
Kính chào quý thầy cô giáo và các em học sinh!
CẤU TRÚC NỘI DUNG CHƯƠNG TRÌNH TỰ NHIÊN-XÃ HỘI Ở TIỂU HỌC
VUI HỌC KINH THÁNH-GIÁO LÝ
Chương 03 TỔ CHỨC DỮ LIỆU TRONG CHƯƠNG TRÌNH
TIẾT 141 ĐỌC THÊM CÓ HƯỚNG DẪN BẾN QUÊ Nguyễn Cẩm Vân.
NHẬP MÔN LẬP TRÌNH MẢNG MỘT CHIỀU.
Bit, Byte, Biểu diễn thông tin
1.
CHUYÊN ĐỀ CÔNG TÁC SÁNG KIẾN KINH NGHIỆM
CHẨN ĐOÁN NGUYÊN NHÂN KHÓ THỞ CẤP BẰNG SIÊU ÂM PHỔI Case series
Đề kiểm tra 15’ lớp K58B Cho đồ thị không gian trạng thái của bài toán như sau: Trạng thái đầu: A Trạng thái đích: P Và cho giải thuật tìm kiếm theo chiều.
Mô hình OSI và TCP/IP MẠNG MÁY TÍNH.
Nhập môn Công nghệ học Phần mềm Introduction to Software Engineering
Hệ thống IO (Input Output System)
Bài 2 THÔNG TIN VÀ BIỂU DIỄN THÔNG TIN.
THỦ TỤC KIỂM TOÁN CHU TRÌNH MUA HÀNG VÀ THANH TOÁN
VUI HỌC KINH THÁNH-GIÁO LÝ
HƯỚNG DẪN TRÌNH BÀY Ý TƯỞNG KINH DOANH (Áp dụng cho các đề tài nộp tại vòng sơ loại) 10/8/2019.
Tướng hảo quang minh vô đẳng luân. Bạch hào uyển chuyển ngũ Tu Di.
Hàm Lập trình nâng cao.
VUI HỌC KINH THÁNH-GIÁO LÝ
QUY LUẬT PHÂN PHỐI XÁC SUẤT THƯỜNG GẶP
Bản ghi của bản thuyết trình:

Line Clipping in 2D Xén đường thẳng trong 2D 13 August 2001 Line Clipping in 2D Xén đường thẳng trong 2D Chris Weigle - Comp 136

Giới thiệu Thao tác loại bỏ các phần hình ảnh nằm ngoài một vùng cho trước được gọi là xén hình. Chúng ta xén hình trước khi vẽ hay tính toán: không cần thiết tính toán cho các vùng nằm ngoài

Mô hình bài toán xén đường thẳng Clipping Window - cửa sổ xén: được định nghĩa bởi 2 điểm Phía dưới bên trái: (xmin, ymin) Phía trên bên phải: (xmax, ymax) Điểm P(x,y) thuộc Clipping Window : (xmax, ymax) (xmin, ymin)

Mô hình bài toán xén đường thẳng (cont.) Đường thẳng bị xén P1P2 có tọa độ P1(x1,y1) và P2(x2,y2) P1 P2

Yêu cầu của bài toán xén đường thẳng Loại bỏ phần đường thẳng nằm ngoài cửa sổ xén

Các nhận xét 1. Các đoạn thẳng có 2 điểm hoàn toàn nằm trong cửa sổ thì cả đoạn thẳng nằm trong cửa sổ nên không cần xén.

Các nhận xét (cont.) TOP LEFT RIGHT BOTTOM 2. Các đoạn thẳng có 2 điểm cùng nằm ngoài về một phía của cửa sổ xén thì cả đoạn thẳng sẽ nằm ngoài cửa sổ và sẽ bị xén mất. TOP LEFT RIGHT BOTTOM

Các nhận xét (cont.) 3. Với các đoạn thẳng cắt biên cửa sổ xén, chúng ta phải tìm giao điểm của đoạn thẳng với biên cửa sổ để chọn phần nằm bên trong cửa sổ.

Thuận toán Cohen – Sutherland AREA CODE – Mã vùng Kéo dài biên của cửa sổ, ta chia mặt phẳng thành chín vùng gồm cửa sổ xén và tám vùng xung quanh top-left top top-right left inside right bottom-left bottom bottom-right

Thuận toán Cohen – Sutherland AREA CODE – Mã vùng (cont.) Một số nguyên gồm 4 bit nhị phân gọi là mã vùng sẽ được gán cho mỗi vùng để mô tả vị trí của vùng so với cửa sổ. Các vùng nằm ngoài biên trái (LEFT) của cửa sổ xén có bit 1 bằng 1. Các vùng còn lại có bit 1 bằng 0. Tương tự cho các bit từ 2 đến 4: bit 2: RIGHT; bit 3: TOP; bit 4: BOTTOM. 0000 1000 0100 0001 0010 1010 0110 0101 1001 RIGHT TOP BOTTOM LEFT B T R L 4 3 2 1

Thuận toán Cohen – Sutherland Mã vùng của điểm 0010 0110 0000 P(x,y) 1 LEFT RIGHT TOP BOTTOM = 1 = 2 = 4 = 8 0010 OR 0100 0000 OR 0010 int Encode(Point p) { int code = 0; if (p.x < xmin) code |= LEFT; if (p.x > xmax) code |= RIGHT; if (p.y > ymax) code |= TOP; if (p.y < ymin) code |= BOTTOM; return code; } Các giá trị của bit trong mã vùng được tính bằng cách so sánh giá trị tọa độ của điểm P(x,y) với các biên của cửa sổ. Ví dụ, bit 1 được đặt là 1 nếu x < xmin, bit 1 được đặt là 0 nếu x >= xmin.

Thuật toán Tính mã vùng tương ứng cho các điểm đầu cuối của đoạn thẳng P1 và P2 của đoạn thẳng cần xén là c1 và c2. Dựa vào giá trị của c1 và c2, ta có các trường hợp sau: 1. Các đoạn thẳng nằm hoàn toàn bên trong cửa sổ sẽ có c1 == c2 == 0000, các đoạn thẳng này sau khi xén sẽ là chính nó nên thuật toán dừng tại đây. 0000 0000

Thuật toán (cont.) 2. Các đoạn thẳng nằm ngoài biên cửa sổ sẽ có đặc điểm sau : tồn tại bit thứ k (k=1,..,4) sao cho c1 và c2 cùng có giá trị 1 tại bit thứ k. Ví dụ, nếu k = 1 thì đoạn thẳng sẽ nằm ngoài biên trái của cửa sổ. Đoạn thẳng này sẽ bị loại bỏ sau khi xén, cho nên thuật toán dừng tại đây. Khi cài đặt, chúng ta chỉ cần sử dụng phép toán AND của bit đối với c1 và c2. Nếu kết quả khác 0, đoạn thẳng sẽ nằm ngoài biên cửa sổ. 0101 0001 0110 1010 0101 AND 0001 ------ ≠ 0 0110 AND 1010 ------ 0010 ≠ 0

Thuật toán (cont.) 3. Nếu c1 và c2 không thuộc hai trường hợp trên, chắc chắn rằng đoạn thẳng sẽ cắt biên cửa sổ. Chúng ta sẽ xác định giao điểm này. Trong trường hợp này, sẽ có ít nhất 1 đầu đoạn thẳng nằm ngoài cửa sổ, không mất tính tổng quát chúng ta giả sử đó là P1. Giả sử P’1 là giao điểm của đoạn thẳng với biên cửa sổ. Lúc này, đoạn thẳng ban đầu sẽ được xén thành P’1P2. Bây giờ, chúng ta xem P’1P2 là đoạn thẳng mới và sẽ áp dụng các thao tác xén trong các trường hợp trên để xén đoạn thẳng này cho tới khi đoạn thẳng được xén nằm hoàn toàn bên trong cửa sổ hay nằm ngoài biên cửa sổ. P2 P1 P’1

Lưu đồ P2 P1 P’1 c1==0 && c2==0 (c1&c2)!=0 Begin c1=Encode(P1) Yes (c1&c2)!=0 Yes Gọi P’1 là giao điểm của P1P2 và biên cửa sổ P1 = P’1 End

Xác định giao điểm của đoạn thẳng và cửa sổ xén Bằng cách xét mã vùng c1 của P1 , ta xác định đoạn thẳng cắt biên nào và tiến hành xác định giao điểm P’1 của đoạn thẳng với biên đó. 0110 P’1 P1 P2 P2 0110 AND 0010 ------ ≠ 0 0001 P1 P’1 0001 AND ------ ≠ 0 LEFT RIGHT

Xác định giao điểm của đoạn thẳng và cửa sổ xén (cont.) Giao điểm của đoạn thẳng với biên trái (c1 & LEFT != 0): m = (P2.y – P1.y) / (P2.x – P1.x) P’1.y = P1.y + m (xmin – P1.x) P’1.x = xmin P2 P1 P’1 xmin LEFT

Xác định giao điểm của đoạn thẳng và cửa sổ xén (cont.) Giao điểm của đoạn thẳng với biên phải (c1 & RIGHT != 0): m = (P2.y – P1.y) / (P2.x – P1.x) P’1.y = P1.y + m (xmax – P1.x) P’1.x = xmax P’1 P1 P2 xmax RIGHT

Xác định giao điểm của đoạn thẳng và cửa sổ xén (cont.) Giao điểm của đoạn thẳng với biên trên (c1 & TOP != 0): m = (P2.x – P1.x) / (P2.y – P1.y) P’1.x = P1.x + m (ymax – P1.y) P’1.y = ymax P1 ymax P’1 P2 TOP

Xác định giao điểm của đoạn thẳng và cửa sổ xén (cont.) Giao điểm của đoạn thẳng với biên dưới (c1 & BOTTOM != 0): m = (P2.x – P1.x) / (P2.y – P1.y) P’1.x = P1.x + m (ymin – P1.y) P’1.y = ymin P2 P’1 ymin P1 BOTTOM

Xác định giao điểm với biên cửa sổ Kết thúc xác định giao điểm Yes SwapPoint(P1, P2) SwapInt(c1, c2) (c1&LEFT)!=0 Yes P’1.y = P1.y + m (xmin – P1.x) P’1.x = xmin (c1&RIGHT)!=0 Yes P’1.y = P1.y + m (xmax – P1.x) P’1.x = xmax (c1&TOP)!=0 Yes P’1.x = P1.x + m (ymax – P1.y) P’1.y = ymax (c1&BOTTOM)!=0 Yes P’1.x = P1.x + m (ymin – P1.y) P’1.y = ymin Kết thúc xác định giao điểm

Ví dụ 1001 1000 1010 0001 0000 0010 0101 0100 0110

int CohenSutherland(Point &P1, Point &P2); Câu hỏi & Bài tập Khi tính giá trị của m, đối với đường thẳng nằm ngang hay thẳng đứng, có bị tràn số (/ cho 0) hay không? Cài đặt hàm CohenSutherland để xén đường thẳng: int CohenSutherland(Point &P1, Point &P2); P1P2 là đoạn thẳng cần xén return 0: đoạn thẳng bị xén mất return 1: đoạn thẳng được xén; P1 và P2 là 2 điểm mới sau khi xén xmin, xmax, ymin, ymax là các hằng số xác định cửa sổ xén Viết chương trình demo cho thuật toán Cohen-Sutherland: Vẽ cửa sổ xén dựa trên các giá trị xmin, xmax, ymin, ymax Gán giá trị cho 2 điểm P1 và P2 Vẽ đoạn P1P2 với màu RED Chạy thuật toán CohenSutherland cho 2 điểm P1, P2 Nếu thuật toán thành công (return 1) thì vẽ đoạn P1P2 với màu BLUE Tham khảo thuật toán xén đường thẳng Liang-Barsky