Viết chương trình vẽ hai đường tròn C1 và C2 cắt nhau. Tô phần giao của hai đường tròn đó.Tô phần bù của C2. Tô phần bù của C1. Lưu ý rằng 3 màu tô này phải khác nhau
Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
455,5 KB
Nội dung
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN MÔN ĐỒ HỌA MÁY TÍNH ĐỀ TÀI 21: Viết chương trình vẽ hai đường tròn C1 và C2 cắt nhau. Tô phần giao của hai đường tròn đó.Tô phần bù của C2. Tô phần bù của C1. Lưu ý rằng 3 màu tô này phải khác nhau. GIÁO VIÊN HƯỚNG DẪN: Th.s Nguyễn Thị Cẩm Ngoan LỚP: KHMT2-K5 THÀNH VIÊN NHÓM 21: HOÀNG TRUNG PHONG − MSV: 641360195 ĐINH TIẾN DŨNG − MSV: 641360078 TRIỆU ĐỨC TRƯỜNG − MSV: 541260029 Hà Nội, tháng 2 – 2013 MỤC LỤC A.Lời giới thiệu Sự phát triển của khoa học, kĩ thuật, nghệ thuật, kinh doanh, và công nghệ luôn luôn phụ thuộc vào khả năng truyền đạt thông tin của chúng ta, hoặc thông qua các bit dữ liệu lưu trữ trong microchip hoặc thông qua giao tiếp bằng tiếng nói. Câu châm ngôn từ xa xưa “một hình ảnh có giá trị hơn cả vạn lời" hay "trăm nghe không bằng một thấy" cho thấy ý nghĩa rất lớn của hình ảnh trong việc chuyển tải thông tin. Hình ảnh bao giờ cũng được cảm nhận nhanh và dễ dàng hơn, đặc biệt là trong trường hợp bất đồng về ngôn ngữ. Do đó không có gì ngạc nhiên khi mà ngay từ khi xuất hiện máy tính, các nhà nghiên cứu đã cố gắng sử dụng nó để phát sinh các ảnh trên màn hình. Trong suốt gần 50 năm phát triển của máy tính, khả năng phát sinh hình ảnh bằng máy tính của chúng ta đã đạt tới mức mà bây giờ hầu như tất cả các máy tính đều có khả năng đồ họa. Đồ họa máy tính là một trong những lĩnh vực lí thú nhất và phát triển nhanh nhất của tin học. Ngay từ khi xuất hiện, đồ họa máy tính đã có sức lôi cuốn mãnh liệt, cuốn hút rất nhiều người ở nhiều lĩnh vực khác nhau như khoa học, nghệ thuật, kinh doanh, quản lí, Tính hấp dẫn và đa dạng của đồ họa máy tính có thể được minh họa rất trực quan thông qua việc khảo sát các ứng dụng của nó. Với đề tài: “Viết chương trình vẽ hai đường tròn C1 và C2 cắt nhau. Tô phần giao của hai đường tròn đó.Tô phần bù của C2. Tô phần bù của C1. Lưu ý rằng 3 màu tô này phải khác nhau ”. Do kiến thức còn hạn chế và thiếu kinh nghiệm nên bài làm còn nhiều sai sót. Mong cô giáo và các bạn giúp đỡ và đóng góp ý kiến để chúng em hoàn thành tốt hơn. Chúng em xin chân thành cảm ơn ! B.Nội dung I.Khảo sát mục đích đối tượng − Nhập vào tâm và bán kính đường tròn C1.Vẽ đường tròn C1 − Nhập vào tâm và bán kính đường tròn C2.Vẽ đường tròn C2.Với điều kiện là tâm không trùng với C1 và bán kính thích hợp để hai đường tròn cắt nhau − Tô màu phần giao nhau của hai đường tròn,phần bù của đường tròn C1, phần bù của đường tròn C2 bằng 3 màu khác nhau Các thuật toán dùng trong bài: • Thuật toán vẽ đường tròn Bresenham: − Bước 1: Chọn điểm đầu cần vẽ(x1,y1) = (0,R) − Bước 2: Tính P đầu tiên: p1 = 3 - 2R Nếu p < 0: chọn điểm kế tiếp là (xi+1,yi). Ngược lại chọn điểm (xi + 1,yi - 1) − Bước 3: x:=x + 1, tính lại p: Nếu pi< 0: pi+1= pi+ 4xi+ 6. Ngược lại: pi+1= pi+ 4.(xi- yi) + 10 Khi đó: Nếu pi+1< 0: chọn điểm kế tiếp là (xi+1,yi+1). Ngược lại chọn điểm (xi+1,yi+1-1) − Bước 4: Lặp lại bước 3 cho đến khi x = y. • Thuật toán tô màu theo đường biên: Thuật toán tô màu dựa theo đường biên của vùng tô đƣợc xác định bởi tập các đỉnh của một đa giác, đường biên trong thuật toán đƣợc mô tả bằng một giá trị duy nhất đó là màu của tất cả các điểm thuộc về đường biên. Bắt đầu từ điểm nằm bên trong vùng tô, ta sẽ kiểm tra các điểm lân cận của nó đã được tô màu hay có phải là điểm biên hay không, nếu không phải là điểm đã tô và không phải là điểm biên ta sẽ tô màu nó. Quá trình này đƣợc lặp lại cho tới khi nào không còn tô được điểm nào nữa thì dừng. Bằng cách này, toàn bộ các điểm thuộc vùng tô được kiểm tra và sẽ đựợc tô hết. II.Phân tích các biến số và đưa ra cách giải quyết: 1.Phân tích các biến số : Vẽ hai đường tròn dùng thuật toán Bresenham: • Đường tròn C1 với các biến số nhập vào x1,y1,R1: − Tâm (x1,y1) − Bán kính R1 • Đường tròn C2 với các biến số nhập vào x2,y2,R2: − Tâm(x2,y2) − Bán kính R2 Tìm tọa độ 4 giao điểm của đường thẳng đi qua tâm 2 đường tròn với 2 đường tròn trên • Đường thẳng đi qua tâm hai đường tròn có dạng y=kx+m: − k:hệ số góc k=(y1-y2)/(x1-x2) − m = -kx1+y1 • Giao điểm của đường thẳng d đi qua tâm 2 đường tròn với 2 đường tròn trên Ta giải hai hệ phương trình: Hệ 1:Giao điểm đường thẳng d với đường tròn C1 − Các biến số : a,b1,c1,p1,p2,q1,q2 (k 2 +1)x 2 + (2mk-2x 1 -2ky 1 )x+m 2 -2my 1 +x 1 2 +y 1 2 -R 1 2 Đặt a= k 2 +1 b 1 = 2mk-2x 1 -2ky 1 c 1 = m 2 -2my 1 +x 1 2 +y 1 2 -R 1 2 −Rồi giải phương trình bậc 2 ta được 2 nghiệm p1 và p2 −Tọa độ 2 giao điểm I 1 (p1,q1) I 2 (p2,q2) Hệ 2:Giao điểm đường thẳng d với đường tròn C2 − Các biến số : a,b2,c2,p3,p4,q3,q4 (k 2 +1)x 2 + (2mk-2x 2 -2ky 2 )x+m 2 -2my 2 +x 2 2 +y 2 2 -R 2 2 Đặt a= k 2 +1 b 2 = 2mk-2x 2 -2ky 2 c 2 = m 2 -2my 2 +x 2 2 +y 2 2 -R 2 2 −Rồi giải phương trình bậc 2 ta được 2 nghiệm p3 và p4 −Tọa độ 2 giao điểm I 3 (p3,q3) I 4 (p4,q4) Tìm trung điểm của giữa các giao điểm trên (x-x 1 ) 2 +(y-y 1 ) 2 = R 1 2 y=kx+m (x-x 2 ) 2 +(y-y 2 ) 2 = R 2 2 y=kx+m − Điểm M 1 (m1,n1) là trung điểm của I 1 và I 3 − Điểm M 2 (m2,n2) là trung điểm của I 2 và I 3 − Điểm M 2 (m2,n2) là trung điểm của I 2 và I 4 Dùng thuật toán tô màu theo đường biên với 3 điểm M 1 , M 2 , M 3 để tô 3 miền với màu khách nhau 2.Hướng giải quyết : Bước 1: Vẽ hai đường tròn dùng thuật toán Bresenham: Bước 2: Tìm 4 giao điểm của đường thẳng đi qua tâm hai đường tròn với hai đường tròn trên là I 1 ,I 2, I 3 ,I 4 : Bước 3: Tìm trung điểm M 1 giữa I 1 và I 3 ,M 2 giữa I 2 và I 3 ,M 3 giữa I 2 và I 4 Bước 4: Dùng thuật toán tô màu theo đường biên với 3 điểm M 1, ,M 2 ,M 3: bằng 3 màu khác nhau,ta sẽ tô được màu của phần giao,phần bù đường tròn C1, phần bù đường tròn C2 bằng màu khác nhau [...]... tron khong trung nhau va ban kinh R2 thich hop"; } else {/* Tim 4 giao diem cua duong thang di qua 2 tam va 2 duong tron Roi tim trung diem giau cac giao diem do de to mau */ if(x1==x2) /* Truong hop x1=x2 nen k khong xac dinh*/ { p1=x1;q1=y1+R1; p2=x1;q2=y1-R1; p3=x1;q3=y2+R2; p4=x1;q4=y2-R2; m1=round(p1+p3)/2; n1=round(q1+q3)/2; m2=round(p2+p3)/2; n2=round(q2+q3)/2; m3=round(p2+p4)/2; n3=round(q2+q4)/2;... chuong trinh giao diem cua duong thang di qua 2 tam va duong tron*/ b1=2*m*k-2*x1-2*y1*k; c1= m*m+x1*x1+y1*y1-R1*R1-2*y1*m; b2=2*m*k-2*x2-2*y2*k; c2= m*m+x2*x2+y2*y2-R2*R2-2*y2*m; /*Cac giao diem (p,q) cua duong thang di qua 2 tam va hai duong tron*/ p1=((-b1+sqrt(b1*b1-4*a *c1) )/(2*a));q1=(k*p1+m); p2=((-b1-sqrt(b1*b1-4*a *c1) )/(2*a));q2=(k*p2+m); p3=((-b2+sqrt(b2*b2-4*a *c2) )/(2*a));q3=(k*p3+m); p4=((-b2-sqrt(b2*b2-4*a *c2) )/(2*a));q4=(k*p4+m);... p3=((-b2+sqrt(b2*b2-4*a *c2) )/(2*a));q3=(k*p3+m); p4=((-b2-sqrt(b2*b2-4*a *c2) )/(2*a));q4=(k*p4+m); /* Trung diem cua cac giao diem tren */ m1=round((p1+p3)/2); n1=round((q1+q3)/2); m2=round((p2+p3)/2); n2=round((q2+q3)/2); m3=round((p2+p4)/2); n3=round((q2+q4)/2); } Duongtron_BRE(x1,y1,R1,7); Duongtron_BRE(x2,y2,R2,7); vetdauloang(m3,n3,7,12); vetdauloang(m2,n2,7,14); vetdauloang(m1,n1,7,10); } cout . một thấy" cho thấy ý nghĩa rất lớn của hình ảnh trong việc chuyển tải thông tin. Hình ảnh bao giờ cũng được cảm nhận nhanh và dễ dàng hơn, đặc biệt là trong trường hợp bất đồng về ngôn