Thiết kế hệ thống kiểm tra các quan hệ hình học

a. Điểm - Đường thẳng

 Kiểm tra điểm có thuộc đường thẳng?

 Tính khoảng cách từ điểm đến đường thẳng nếu điểm không thuộc đường thẳng.

 

b. Điểm - Mặt phẳng

 Kiểm tra điểm có thuộc mặt phẳng?

 Tính khoảng cách từ điểm đến mặt phẳng nếu điểm không thuộc mặt phẳng.

 

c. Đường thẳng - Đường thẳng

 Kiểm tra hai đường thẳng đồng phẳng, cắt, song song, chéo nhau, vuông góc?

 Tính góc giữa hai đường thẳng.

 Tính khoảng cách giữa hai đường thẳng chéo nhau.

 Tính hình chiếu của đoạn thẳng trên đường thẳng.

 

d. Đường thẳng - Mặt phẳng

 Kiểm tra đường thẳng thuộc mặt phẳng?

 Kiểm tra đường thẳng và mặt phẳng cắt nhau?

 Kiểm tra đường thẳng và mặt phẳng song song?

 Kiểm tra đường thẳng và mặt phẳng vuông góc?

 Tính góc giữa đường thẳng và mặt phẳng nếu đường thẳng và mặt phẳng cắt nhau.

 Tính khoảng cách giữa đường thẳng và mặt phẳng nếu đường thẳng và mặt phẳng song song nhau.

 

e. Mặt phẳng - Mặt phẳng

 Kiểm tra hai mặt phẳng trùng nhau?

 Kiểm tra hai mặt phẳng cắt nhau?

 Kiểm tra hai mặt phẳng song song?

 

doc81 trang | Chia sẻ: huong.duong | Lượt xem: 1067 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Thiết kế hệ thống kiểm tra các quan hệ hình học, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
haỳng Alpha= arcos(cos()) Tỡm hỡnh chieỏu cuỷa ủoaùn thaỳng AB leõn ủửụứng thaỳng b Cụ sụỷ toaựn hoùc: ẹeồ tớnh hỡnh chieỏu ủoaùn AB leõn ủửụứng thaỳng b ủi qua C vaứ D, ta tỡm hỡnh chieỏu cuỷa ủieồm A laứ A’ vaứ B laứ B’ treõn ủửụứng thaỳng b. ẹoaùn A’B’ chớnh laứ hỡnh chieỏu cuỷa AB treõn ủửụứng b. A B B’ A’ C D (b) ã Xaực ủũnh PT ủi qua 2 ủieồm C, D: ax + by + c = 0 coự vector chổ phửụng VCF = (xD-xC , yD-yC ) = (-b, a) vaứ c = - a * xC - b * yC. ã Xaực ủũnh PT ủửụứng thaỳng D ủi qua ủieồm A vaứ vuoõng goực vụựi CD: bx -ay + c’ = 0 coự vector chổ phửụng cuỷa D =(a, b) vaứ c’= b*xA + a*yA ã Tớnh giao ủieồm A’(xA’, yA’) cuỷa heọ PT (1) vaứ (2) ax + by + c = 0 (1) bx - ay + c’= 0 (2) xA’= (-c’*b + c*a) / ( a*a + b*b) yA’= ( -c*b + c’*a) / ( a*a + b*b) ã Tửụng tửù tớnh B’ laứ giao ủieồm cuỷa: . Phửụng trỡnh ủửụứng thaỳng ủi qua CD . Vaứ Phửụng trỡnh ủửụứng thaỳng D’ ủi qua B vaứ vuoõng goực vụựi CD Giaỷi thuaọt: - Tỡm vector chổ phửụng VCF (-b, a) cuỷa phửụng trỡnh ủửụứng thaỳng qua hai dieồm C, D: ax + by + c =0 - Tớnh heọ soỏ c. - Tớnh c1 cuỷa phửụng trỡnh D1 ủi qua ủieồm A vaứ vuoõng goực vụựi CD: bx - ay + c1 = 0 - Tỡm giao ủieồm A’cuỷa ủửụứng D1 vaứ ủửụứng qua C, D . - Tỡm giao ủieồm B’ cuỷa ủửụứng D2 ủi qua ủieồm B vaứ vuoõng goực vụựi ủửụứng thaỳng CD. - Khi ủoự A’B’ chớnh laứ hỡnh chieỏu cuỷa AB. Xaực ủũnh giao ủieồm giửừa hai ủoaùn thaỳng Cụ sụỷ toaựn hoùc: Cho hai ủoaùn thaỳng, xaực ủũnh chuựng coự caột nhau khoõng, neỏu coự tỡm giao ủieồm.Giaỷ sửỷ ủửụứng 1 tửứ a ủeỏn b vaứ ủửụứng 2 tửứ c ủeỏn d nhử trong hỡnh veừ, hai ủoaùn thaỳng coự theồ boỏ trớ theo nhieàu caựch khaực nhau. a b c d d c b a b a d c a b c d 1 2 Phửụng trỡnh tham soỏ cho moói ủửụứng nhử sau: (1) (2) x1 (t) = ax + (bx - ax) * t y1 (t) = ay + (by - ay) * t vaứ x2 (u) = cx + (dx - cx) * u y2 (u) = cy + (dy - cy) * u Ta goùi caực ủửụứng thaỳng chửựa caực ủoaùn thaỳng ab vaứ cd laứ caực ủửụứng cha, ủaõy laứ caực ủửụứng voõ haùn. Trửụực heỏt, ta xeựt hai ủửụứng “cha” coự giao nhau khoõng, sau ủoự xem giao ủieồm coự thuoọc caỷ hai ủoaùn thaỳng khoõng? Neỏu caực ủửụứng “cha’ giao nhau, ta coự giaự trũ to vaứ uo sao cho: x1 (to) = x2(uo) vaứ y1(to) =y2(uo) Tửứ ủaõy, ta coự caực phửụng trỡnh sau: (3) (4) (5) ax + (bx - ax) * to = cx + (dx - cx ) * uo ay + (by - ay) * to = cy + (dy - cy ) * uo Khửỷ uo, ta ủửụùc: D* to = (cx - ax) * (dy - cy ) - (cy - ay) * (dx - cx) vụựi D = (bx - ax) * (dy - cy) - ( by - ay) * (dx - cx) Coự hai trửụứng hụùp cụ baỷn, D baống hay khaực 0. D khaực zero Neỏu D khaực 0, ta tớnh to tửứ phửụng trỡnh (4). Neỏu to naốm ngoaứi ủoaùn [0, 1] thỡ khoõng coự giao ủieồm giửừa hai ủoaùn. Ngửụùc laùi, thỡ coự theồ coự giao ủieồm, thay to vaứo (3) ủeồ tớnh uo. Neỏu uo naốm trong ủoaùn [0, 1] thỡ chaộc chaộn coự giao ủieồm, vaứ duứng phửụng trỡnh (1) vaứ (2) ủeồ tớnh. D baống zero (6) Neỏu D baống 0, tửứ phửụng trỡnh (5) suy ra: (dy - cy) / (dx - cx) = (by - ay) / (bx - ax) (7) Nghúa laứ caực heọ soỏ goực baống nhau, neõn caực ủửụứng cha song song. Neỏu caực ủửụứng cha truứng nhau thỡ caực ủoaùn cuừng coự theồ truứng nhau. ẹeồ kieồm ủieàu naứy, ta xem c coự naốm treõn ủửụứng cha ủi qua a vaứ b khoõng. Dửùa vaứo phửụng trỡnh cuỷa ủửụứng cha laứ: (bx - ax) * (y - ay) - (by - ay) * (x - ax) = 0 thay cx cho x vaứ cy cho y vaứ xem veỏ traựi coự ủuỷ gaàn 0 khoõng (nghúa laứ: nhoỷ hụn lửụùng naứo ủoự, nhử 10 - 5). Neỏu khoõng, caực ủửụứng cha khoõng truứng nhau, vaứ khoõng coự giao ủieồm. Neỏu thoỷa maừn thỡ phaỷi thửùc hieọn bửụực kieồm cuoỏi cuứng ủeồ xem caực ủoaùn coự truứng nhau khoõng. Tửứ phửụng trỡnh (1) tỡm hai giaự trũ tc vaứ td maứ ủửụứng ủaùt tụựi vũ trớ c vaứ d. Vỡ caực ủửụứng cha truứng nhau, ta chổ caàn duứng thaứnh phaàn x (neỏu ủửụứng 1 thaỳng ủửựng, thỡ duứng thaứnh phaàn y), vaứ thay cx vaứ dx, ta coự : (8) tc = (cx - ax) / (bx - ax) td = (dx - ax) / (bx - ax) ẹửụứng 1 baột ủaàu taùi 0 vaứ keỏt thuực taùi 1, vaứ xeựt thửự tửù cuỷa boỏn giaự trũ 0, 1, tc vaứ td, ta xaực ủũnh ủửụùc vũ trớ tửụng ủoỏi cuỷa hai ủửụứng. Seừ choàng nhau trửứ khi caỷ hai tc vaứ td nhoỷ hụn 0 hay lụựn hụn 1. Neỏu coự truứng nhau, ta deó daứng xaực ủũnh caực ủieồm ủaàu truứng nhau tửứ tc vaứ td. Giaỷi thuaọt ủửụùc xaõy dửùng trong thuỷ tuùc Intersect (), goàm caực tham soỏ laứ boỏn ủieồm ủaàu cuỷa caực ủửụứng, giaự trũ traỷ veà coự theồ coự theồ coự caực giaự trũ sau: 1: coự moọt giao ủieồm. 2: khoõng giao nhau. 3: caực ủoaùn thaỳng song song nhau. 4: hai ủoaùn thaỳng choàng nhau. 5: hai ủoaùn thaỳng cuứng naốm treõn 1 ủửụứng thaỳng, khoõng caột nhau. Giaỷi thuaọt: -Tớnh Maóu soỏ D; -Neỏu D 0 . Tớnh to,uo; . Neỏu to thuoọc [0,1] vaứ uo thuoọc [0,1] + Tớnh giao ủieồm M + Return 1; ( 2 ủoaùn thaỳng caột nhau taùi M) Ngửụùc laùi Return 2; (2 doaùn thaỳng khoõng caột nhau) - Ngửụùc laùi, . Neỏu c naốm treõn ủoaùn ab + Tớnh tc, td; + Neỏu khoõng phaỷi caỷ tc vaứ td 1 Return 4; (2 doaùn thaỳng choàng nhau) + Ngửụùc laùi, Return 5; (2ủoaùn thaỳng naốm treõn 1 ủửụứng thaỳng vaứ khoõng caột nhau) . Ngửụùc laùi, Return 3; (2 ủoaùn thaỳng song song ) Veừ ủa giaực (Polygon) Cụ sụỷ toaựn hoùc: ẹa giaực laứ taọp hụùp caực ủoaùn thaỳng lieõn tieỏp cuứng naốm trong maởt phaỳng kheựp kớn. Moọt ủa giaực coự ớt nhaỏt 3 caùnh. Nhử vaọy, ủa giaực ủụn giaỷn nhaỏt laứ tam giaực. Giaỷi thuaọt: - Xuaỏt phaựt tửứ ủổnh ủaàu tieõn - Veừ noỏi ủeỏn ủổnh keỏ tieỏp theo thửự tửù cuứng chieàu kim ủoàng hoà. - Veừ noỏi tửứ ủổnh cuoỏi cuứng ủeỏn ủổnh ủaàu tieõn. Veừ n-giaực Cụ sụỷ toaựn hoùc: Moọt n-giaực laứ ủa giaực quy taộc coự N caùnh (ủa giaực quy taộc: ủa giaực maứ moùi caùnh coự ủoọ daứi baống nhau, vaứ caực caùnh keà nhau taùo neõn nhửừng goực trong baống nhau). Neỏu cho ủổnh ủaàu tieõn treõn truùc x taùi (R, x). Cho goực A baỏt kyứ, vũ trớ (x,y) cuỷa moọt ủieồm treõn ủửụứng troứn coự goực A seừ ủửụùc tớnh (x,y) = (R cos(A), R sin(A)). Vaứ ủổnh thửự i, V, cuỷa n -giaực naốm ụỷ goực 2p (i -1) / N vaứ coự vũ trớ: V = ( R cos(2p (i -1) / N ), R sin(2p (i -1) / N) ). Giaỷi thuaọt: - Soỏ ủổnh = N - ẹũnh goực A = 2 Pi / N - Voứng laởp xaực ủũnh ủổnh thửự i . Goực = i *A; . Tỡm toùa ủoọ ủổnh V. Toõ maứu ủa giaực Cụ sụỷ toaựn hoùc: Phửụng phaựp hieồn thũ caực vuứng ủửụùc toõ maứu trong ủoà hoùa maựy tớnh laứ quaự trỡnh xaực ủũnh caực pixel tửụng ửựng thuoọc vuứng toõ maứu cho noự. Coự nhieàu thuaọt toaựn ủaừ ủửụùc nghieõn cửựu vaứ phaựt trieồn cho vieọc hieồn thũ caực vuứng ủửụùc toõ maứu treõn maứn hỡnh, moọt trong nhửừng thuaọt toaựn ủoự laứ toõ maứu theo veỏt daàu loang, moọt thuaọt toaựn khaực laứ toõ maứu theo doứng queựt. ễÛ ủaõy ta duứng phửụng phaựp toõ maứu theo doứng queựt (scan-line algorithm) hay coứn goùi laứ giaỷi thuaọt toõ maứu chaỹn leỷ (odd - even algorithm). Thuaọt giaỷi naứy sửỷ duùng caực giao ủieồm giửừa caực ủửụứng bieõn cuỷa vuứng caàn toõ vụựi caực ủửụứng thaỳng goùi laứ doứng queựt vaứ xaực ủũnh caực pixel naứo naốm trong vuứng toõ maứu giửừa hai giao ủieồm lieõn tieỏp, ủoự chớnh laứ caực pixel doùc theo ủửụứng queựt naốm giửừa hai giao ủieồm vaứ naốm beõn trong ủa giaực. ễÛ moói ủieồm giao doứng queựt chuyeồn ủoồi hoaởc ủi vaứo hoaởc ủi ra khoỷi ủa giaực, ủoự laứ sửù thay ủoồi parity cuỷa ủieồm ủoự. Neỏu doứng queựt ủi vaứo trong ủa giaực nhửừng pixels tieỏp theo seừ ủửụùc toõ, neỏu ủi ra ngoaứi nhửừng pixels tieỏp theo seừ khoõng ủửụùc toõ. Khi doứng queựt ủi qua moọt ủổnh P cuỷa ủa giaực (chớnh laứ giao ủieồm cuỷa 2 caùnh cuỷa ủa giaực) noự taùo ra 2 giao ủieồm, moói ủieồm vụựi 1 caùnh cuỷa ủa giaực ủi qua ủổnh ủoự, neỏu ủổnh ụỷ giaự trũ cửùc (local extremum) Pixels ụỷ beõn traựi vaứ beõn phaỷi cuỷa ủổnh ủoự seừ coự cuứng parity, nhửng neỏu ủổnh khoõng ụỷ giaự trũ cửùc caực Pixels ụỷ beõn traựi vaứ beõn phaỷi cuỷa ủổnh ủoự seừ coự parity ngửụùc nhau, do ủoự ta caàn coự moọt xửỷ lyự ủaởc bieọt hụn. 1 2, 3 1 4 2 Scan line 1 Scan Line 2 Ÿ Neỏu P laứ giao ủieồm cuỷa hai caùnh coự hửụựng y ngửụùc nhau (moọt caùnh coự giaự trũ y taờng,moọt caùnh coự giaự trũ y giaỷm - Scan Line 1) thỡ doứng queựt coự 2 ủieồm giao. Ÿ Neỏu P laứ giao ủieồm cuỷa hai caùnh coự hửụựng y truứng nhau (hai caùnh ủeàu coự giaự trũ y cuứng taờng hay giaỷm - Scan Line 2) thỡ doứng queựt coự 1 ủieồm giao. Trửụực khi toõ maứu, ta caàn kieồm tra moói ủổnh ủa giaực. Neỏu y cuỷa noự khoõng laứ giaự trũ cửùc trũ(local extremum), nhử trong scan line 2. Vỡ nhửừng Pixels ủoỏi vụựi beõn traựi vaứ phaỷi cuỷa ủổnh ủoự khaực parity, khaực giaự trũ kieồm tra inside-outside; ta phaỷi laứm ngaộn moọt trong hai caùnh ủi moọt chuựt (giaỷm y cuỷa ủaàu caùnh ủoự moọt pixel). ẹoỏi vụựi caùnh naốm ngang trong ủa giaực khoõng caàn ủửa vaứo taọp caực caùnh cuỷa ủa giaực ủeồ xửỷ lyự. Giaỷi thuaọt: Bửụực 1: Xaực ủũnh Frame “bao” ủa giaực. Frame bao ủa giaực laứ hỡnh chửừ nhaọt nhoỷ nhaỏt chửựa toaứn boọ ủa giaực. ẹeồ xaực ủũnh hỡnh chửừ nhaọt naứy ta laỏy min hoaởc max caực toùa ủoọ ủổnh cuỷa ủa giaực trong heọ toùa ủoọ Descartes roài taờng, hoaởc giaỷm 1 ủeồ ủaỷm baỷo hỡnh chửừ nhaọt laứ hỡnh bao vaứ ủa giaực hoaứn toaứn naốm trong noự. Bửụực 2: Xaực ủũnh danh saựch caực caùnh ủa giaực ủeồ xửỷ lyự. Laàn lửụùt duyeọt taỏt caỷ caùnh cuỷa ủa giaực: ã Khoõng ủửa caùnh naốm ngang cuỷa ủa giaực vaứo danh saựch. ã Kieồm tra 2 caùnh ủa giaực lieõn tieỏp, neỏu ủổnh chung khoõng laứ ủieồm cửùc trũ (local extremum), laứm ngaộn ủaàu caùnh cuỷa moọt caùnh ủi qua ủổnh chung moọt pixel. Bửụực 3: Tieỏn haứnh toõ maứu. Tieỏn haứnh caực ủửụứng queựt ngang tử ứ Ymin + 1 ủeỏn Ymax - 1. ã ệÙng vụựi moọt ủửụứng queựt ngang yi naứo ủoự, ta xaực ủũnh caực ủieồm caột (baống giaỷi thuaọt tỡm giao ủieồm giửừa hai ủoaùn thaỳng ủaừ coự), giửừa caực ủửụứng queựt ngang vụựi taỏt caỷ caực caùnh cuỷa ủa giaực. Vỡ tung ủoọ y cuỷa ủieồm caột baống yi neõn ta chổ caàn ủửa caực hoaứnh ủoọ xi cuỷa ủieồm caột vaứo moọt danh saựch. ã Saộp xeỏp laùi danh saựch sao cho caực giaự trũ xi taờng daàn. ã Duyeọt qua caực ủieồm caột vaứ ủeỏm soỏ ủieồm caột ủaừ duyeọt. ã Neỏu ủieồm caột truứng vụựi ủổnh cuỷa ủa giaực: Neỏu coự moọt caùnh song song vụựi ủửụứng queựt thỡ ủổnh trửụực ủeỏm taờng vaứ ủổnh sau khoõng ủeỏm taờng. ã Toõ maứu giửừa caực caởp giao ủieồm . Bửụực 4: Laọp laùi bửụực hai cho ủeỏn khi yi = ymax. Bửụực 5: Veừ laùi ủa giaực baống maứu ủaừ toõ. Lửu yự: Neỏu ủa giaực khoõng phaỷi laứ ủa giaực ủụn thỡ giaỷi thuaọt naứy khoõng vaọn duùng ủửụùc. ẹieồm beõn trong / beõn ngoaứi ủa giaực Cụ sụỷ toaựn hoùc: Giaỷi thuaọt naứy nhaốm xaực ủũnh moọt ủieồm cho trửụực coự naốm beõn trong moọt ủa giaực ủụn phaỳng hay khoõng. Giaỷi thuaọt xaõy dửùng dửùa treõn ủũnh lyự mang teõn JORDAN sau ủaõy: “Moói ủửụứng cong, kớn, ủụn, phaỳng, moọt chieàu, phaõn hoaùch maởt phaỳng thaứnh hai mieàn, moọt trong hai mieàn ủoự hoaứn toaứn chửựa nhửừng ủửụứng thaỳng naứo ủoự, mieàn coứn laùi thỡ khoõng coự tớnh chaỏt ủoự”. Trong ủũnh lyự treõn ủaõy moọt trong hai mieàn seừ ủửụùc goùi laứ mieàn trong (goàm baỷn thaõn ủửụứng cong vaứ phaàn maởt phaỳng giụựi noọi bụỷi ủửụứng cong). Khoõng thuoọc mieàn trong goùi laứ mieàn ngoaứi. ẹũnh lyự naứy vaón ủuựng cho trửụứng hụùp ủa giaực ủụn phaỳng moọt chieàu nhử laứ moọt trửụứng hụùp rieõng. Tửứ ủũnh lyự naứy daón ủeỏn heọ quaỷ sau: “Tửứ moọt ủieồm P baỏt kyứ, veừ moọt tia chổ caột ủa giaực ụỷ nhửừng ủieồm trong cuỷa caực caùnh (nghúa laứ : khoõng ủi qua ủổnh naứo cuỷa ủa giaực); neỏu soỏ giao ủieồm laứ leỷ thỡ P laứ ủieồm trong, neỏu soỏ giao ủieồm laứ chaỹn thỡ P laứ ủieồm ngoaứi”. Veà maởt kyừ thuaọt moùi ủửụứng cong ủụn, phaỳng, kớn, lieõn thoõng, khoõng tửù caột ủeàu coự theồ tieỏp caọn tuyeỏn tớnh baống moọt ủa giaực bao goàm moọt soỏ hửừu haùn caực caùnh lieõn tieỏp. Vỡ vaọy cho pheựp xaõy dửùng moọt giaỷi thuaọt test quan heọ trong/ ngoaứi chổ baống caựch xeựt soỏ giao ủieồm cuỷa tia coự goỏc laứ ủieồm caàn xeựt. Giaỷi thuaọt: - Choùn Px laứ nửỷa ủửụứng thaỳng xuaỏt phaựt tửứ P song song vụựi truùc Ox, hửụựng veà phớa x>0. Laỏy P=(x,y). - P laứ ủieồm caàn xeựt. - Neỏu (P laứ moọt ủổnh) hoaởc (P thuoọc trong moọt caùnh) thỡ Return (P ủieồm trong) - Ngửụùc laùi, xaực ủũnh giao ủieồm Px vụựi caực caùnh ủa giaực { . Ci laứ caùnh Pi Pi+1 cuỷa ủa giaực . Neỏu y = yi thỡ xeựt hai caùnh coự moọt ủaàu laứ Pi (1) .. Neỏu caỷ hai ủaàu kia ụỷ moọt phớa cuỷa Pi thỡ tớnh Px caột caỷ hai caùnh . Ngửụùc laùi (1) Neỏu y > Max(yi,yi+1) hay y<Min(yi,yi+1) (2) Thỡ Px khoõng caột caùnh Ci . Ngửụùc laùi (2) .. Neỏu x <= Min (xi,xi+1) (3) Thỡ Py caột caùnh Ci . Ngửụùc laùi (3) .. Xeựt toùa ủoọ giao ủieồm (yo,xo) cuỷa Px vụựi caùnh Ci Neỏu x >= xo thỡ Px khoõng caột Ci } - Neỏu soỏ giao ủieồm leỷ . Return P thuoọc ủa giaực. Kieồm tra quan heọ giửừa ủoaùn thaỳng vaứ ủa giaực Caực chửụng trỡnh ửựng duùng moõ taỷ caực hỡnh aỷnh baống heọ toùa ủoọ theỏ giụựi thửùc, coự theồ laứ baỏt kyứ heọ toùa ủoọ Descartes naứo maứ ngửụứi duứng caỷm thaỏy thuaọn tieọn nhaỏt. Caực hỡnh aỷnh ủửụùc moõ taỷ trong heọ toùa ủoọ thửùc sau ủoự seừ ủửụùc caực heọ ủoọ hoùa aựnh xaù vaứo caực heọ toùa ủoọ thieỏt bũ. Thoõng thửụứng, caực heọ ủoà hoùa cho pheựp ngửụứi duứng xaực ủũnh moọt vuứng naứo ủoự cuỷa hỡnh aỷnh ủửụùc hieồn thũ vaứ noự seừ hieồn thũ ụỷ ủaõu treõn maứn hỡnh (viewport). Ta coự theồ choùn moọt vuứng hay nhieàu vuứng ủeồ hieồn thũ, caực vuứng naứy coự theồ ủaởt ụỷ caực nụi khaực nhau hay loàng vaứo nhau treõn maứn hỡnh. Quaự trỡnh naứy ủoứi hoỷi nhieàu thao taực nhử dũch chuyeồn, bieỏn ủoồi tyỷ leọ ủeồ ủửa vaứo beõn trong viewport hoaởc ủụn giaỷn laứ loaùi boỷ caực phaàn hỡnh aỷnh naốm ngoaứi vuứng ủang ủửụùc xeựt. Thao taực cuoỏi cuứng vaứ cuừng ủửụùc sửỷ duùng nhieàu nhaỏt coứn ủửụùc goùi laứ clipping. Trong thuaọt ngửừ thoõng thửụứng Viewport ủửụùc hieồu nhử moọt window (hỡnh chửừ nhaọt) theo ủoự hỡnh aỷnh ủửụùc clipping. Tuy nhieõn Viewport cuừng coự theồ laứ moọt ủa giaực baỏt kyứ. Baứi toaựn clipping sau ủaõy ủửụùc xeựt cho trửụứng hụùp toồng quaựt hụn: clipping vụựi ủa giaực ủụn baỏt kỡ (cho caỷ hai trửụứng hụùp ủa giaực loài hoaởc loừm). Cụ sụỷ toaựn hoùc vaứ giaỷi thuaọt: Caực bửụực tieỏn haứnh clipping ủoaùn thaỳng AB baống moọt ủa giaực ủụn, phaỳng baỏt kỡ nhử sau: Bửụực 1: Hoaựn ủoồi A, B ủeồ xA < xB. Neỏu xA = xB . Hoaựn ủoồi A,B ủeồ yA < yB Bửụực 2: Kieồm tra tớnh trong ngoaứi cuỷa A vaứ B ủoỏi vụựi ủa giaực (Duứng giaỷi thuaọt kieồm tra ủieồm beõn trong/ngoaứi ủa giaực ) Bửụực 3: Tỡm giao ủieồm cuỷa AB vụựi ủa giaực (Duứng giaỷi thuaọt xaực ủũnh giao ủieồm cuỷa 2 ủoaùn ủaừ coự ) Neỏu coự giao ủieồm thỡ { - ẹửa caực toùa ủoọ cuỷa caực ủieồm caột vaứo moọt danh saựch - Saộp xeỏp cho hoaứnh ủoọ caực giao ủieồm taờng daàn (Neỏu xA = xB saộp xeỏp theo tung ủoọ) } Bửụực 4: Thửùc hieọn clipping. - Neỏu A vaứ B ủeàu naốm trong ủa giaực thỡ (1) Neỏu soỏ ủieồm caột = 0, Return (AB naốm hoaứn toaứn trong ủa giaực) - Ngửụùc laùi { . ẹoaùn thaỳng tửứ A ủeỏn ủieồm caột thửự 1 thuoọc ủa giaực. . i = 1 . Laởp laùi . Tỡm trung ủieồm cuỷa ủoaùn thaỳng noỏi hai ủieồm caột keỏ tieỏp nhau. . Kieồm tra trong /ngoaứi ủoỏi vụựi trung ủieồm. . Neỏu trung ủieồm naốm trong ủa giaực thỡ Return (ẹoaùn thaỳng thuoọc ủa giaực) . Ngửụùc laùi, Return (ẹoaùn thaỳng khoõng thuoọc ủa giaực). . Inc (i,1) Cho ủeỏn khi i = soỏ ủieồm caột } - Ngửụùc laùi, coự ủieồm A hay B naốm ngoaứi ủa giaực (1) - Neỏu soỏ ủieồm caột = 0, Return (ẹoaùn AB naốm ngoaứi ủa giaực). - Neỏu soỏ ủieồm caột 0 thỡ { . Theõm toùa ủoọ ủieồm A vaứo ủaàu danh saựch . Theõm toùa ủoọ ủieồm B vaứo cuoỏi danh saựch . i = 1 . Laởp laùi . Tỡm trung ủieồm cuỷa ủoaùn thaỳng noỏi hai ủieồm caột keỏ tieỏp nhau . Kieồm tra trong/ ngoaứi ủoỏi vụựi trung ủieồm. . Neỏu trung ủieồm naốm trong ủa giaực thỡ Return (ẹoaùn thaỳng thuoọc ủa giaực) . Ngửụùc laùi, Return (ẹoaùn thaỳng khoõng thuoọc ủa giaực) . inc (i,1) Cho ủeỏn khi heỏt danh saựch } Ngửụùc laùi, Return (ẹoaùn thaỳng khoõng thuoọc ủa giaực). Bửụực 5: Veừ laùi caực ủoaùn thaỳng thuoọc ủa giaực * Mụỷ roọng: Giaỷi thuaọt coự theồ ủửụùc mụỷ roọng cho vieọc clipping moọt ủa giaực baống caựch thửùc hieọn clipping taỏt caỷ caực caùnh cuỷa ủa giaực. Kieồm tra quan heọ hai ủa giaực Cụ sụỷ toaựn hoùc: Giaỷi thuaọt naứy cho pheựp clip baỏt kyứ moọt ủa giaực vaứo 1 ủa giaực. Noự cuừng cho pheựp hỡnh thaứnh sửù giao, hoọi cuỷa 2 ủa giaực.Chuựng ta baột ủaàu baống vớ duù minh hoùa trong hỡnh sau. Ta lieọt keõ nhửừng ủổnh theo thửự tửù tửứ traựi sang phaỷi, theo chieàu kim ủoàng hoà. D 6 5 4 3 2 1 d c b a C B A Hai ủa giaực SUBJ vaứ CLIP ủửụùc theồ hieọn baống 2 danh saựch (a,b,c,d) vaứ (A,B,C,D) tửụng ửựng. Taỏt caỷ ủieồm giao cuỷa 2 danh saựch seừ ủửụùc xaực ủũnh vaứ lửu vaứo danh saựch (theo thửự tửù sang phaỷi cuỷa moói caùnh). Dửùa vaứo hỡnh veừ treõn, ta coự: SUBJ_LIST: a, 1, b, 2, c, 3, 4, d, 5, 6 CLIP_LIST: A, 6 ,3 , 2, B, C, D, 4, 5 Duyeọt SUBJ theo hửụựng ủi tụựi cho tụựi khi tỡm ủửụùc 1 ủieồm giao ủi vaứo (entering intersection), laứ ủieồm giao maứ SUBJ di chuyeồn tửứ ngoaứi vaứo trong ủa giaực CLIP.Vaứ ủửa ủieồm naứy vaứo danh saựch xuaỏt ủa giaực ủửụùc clip. Duyeọt SUBJ tụựi khi gaởp 1ủieồm giao khaực. Nhaỷy ra khoỷi SUBJ vaứ di chuyeồn theo CLIP thay vỡ SUBJ. Duyeọt CLIP theo hửụựng ủi tụựi. Tụựi khi gaởp moọt ủieồm giao, nhaỷy ra khoỷi CLIP vaứ duyeọt theo SUBJ theo hửụựng ủi tụựi, vaứ cửự tieỏp tuùc nhử vaọy. Moói ủổnh hoaởc moói ủieồm giao gaởp phaỷi khi duyeọt seừ ủửụùc ủửa vaứo danh saựch xuaỏt ủa giaực ủửụùc clip. Laởp laùi tieỏn trỡnh treõn giửừa 2 ủa giaực, duyeọt moói ủa giaực theo hửụựng ủi tụựi cho tụựi khi ủổnh ủaàu tieõn ủửụùc gaởp laùi. Danh saựch xuaỏt ra ụỷ thụứi ủieồm naứy (1,b,2,B) 1 b 2 3 4 d 5 6 a a restart start SUBJ_LIST: SUBJ_LIST: A 6 3 2 B 1 C D 4 5 Baõy giụứ, ta kieồm tra moọt ủieồm giao“entering” khaực cuỷa SUBJ. Vaứ seừ taùo ra danh saựch xuaỏt (3,4,5,6). Vieọc kieồm tra nhửừng ủieồm giao “entering” khaực seừ chổ ra laứ taỏt caỷ chuựng ủaừ ủửụùc duyeọt, quaự trỡnh chaỏm dửựt. Caựch thửực ủeồ hieọn thửùc quaự trỡnh xửỷ lyự naứy laứ xaõy dửùng hai danh saựch SUBJ_LIST: a, 1, b, 2, c, 3, 4, d, 5, 6 CLIP_LIST : A, 6, 3, 2, B,1, C, D, 4 , 5 Maứ trong ủo,ự vieọc duyeọt moói ủa giaực vaứ lieọt keõ nhửừng ủổnh vaứ ủieồm giao phaỷi theo thửự tửù ủửụùc gaởp. Giaỷi thuaọt: -Bửụực 1: Taùo danh saựch SUBJ_LIST Duyeọt laàn lửụùt moói caùnh ủa giaực SUBJ theo thửự tửù cuứng chieàu kim ủoàng hoà { - Tỡm caực ủieồm caột cuỷa caùnh Pi-Pi+1 vụựi ủa giaực CLIP. - Saộp xeỏp danh saựch ủieồm caột theo hoaứnh ủoọ taờng daàn . Neỏu hoaứnh ủoọ Pi.x=Pi+1.x thỡ saộp xeỏp theo tung ủoọ. - ẹửa ủổnh Pi vaứo danh saựch SUBJ_LIST - ẹửa caực ủieồm caột tửứ danh saựch ủieồm caột vaứo SUBJ_LIST theo hửụựng ủi tửứ Pi tụựi Pi+1 } -Bửụực 2: Taùo danh saựch CLIP_LIST Duyeọt laàn lửụùt moói caùnh ủa giaực CLIP theo thửự tửù cuứng chieàu kim ủoàng hoà { - Tỡm caực ủieồm caột cuỷa caùnh Pi- Pi+1 vụựi ủa giaực SUBJ. - Saộp xeỏp danh saựch ủieồm caột theo hoaứnh ủoọ taờng daàn. Neỏu hoaứnh ủoọ Pi.x=Pi+1.x saộp xeỏp theo tung ủoọ. - ẹửa ủổnh Pi vaứo danh saựch CLIP_LIST. - ẹửa caực ủieồm caột tửứ danh saựch ủieồm caột vaứo CLIP_LIST theo hửụựng ủi tửứ Pi tụựi Pi+1. } -Bửụực 3: Duyeọt danh saựch SUBJ_LIST vaứ CLIP_LIST. Voứng laởp (1) Voứng laởp (2) - Tỡm ủieồm giao “entering” chửa duyeọt cuỷa SUBJ_LIST. - Duyeọt treõn SUBJ_LIST tụựi khi thaỏy ủieồm giao tieỏp theo . - Chuyeồn sang duyeọt treõn CLIP_LIST tụựi khi thaỏy ủieồm giao tieỏp theo. Cho tụựi khi ủieồm ủaàu tieõn(ủieồm ‘entering’) ủửụùc gaởp laùi. (voứng laởp 2 ) - Xuaỏt Danh saựch ủa giaực tỡm ủửụùc ụỷ treõn. Cho tụựi khi taỏt caỷ caực ủieồm giao ‘entering’ ủaừ ủửụùc duyeọt (voứng laởp 1) Kieồm tra tớnh loài cuỷa ủa giaực Cụ sụ ỷtoaựn hoùc: -Nhaọn bieỏt quay traựi vụựi quay phaỷi: Coự nhửừng thuaọt giaỷi ta phaỷi duyeọt moọt ủa giaực, laàn lửụùt thaờm moói ủổnh hay caùnh. Ta xem nhử di chuyeồn theo moọt caùnh tửứ ủổnh naứy ủeỏn ủổnh kia vaứ sau ủoự ra caùnh keỏ. Nhử vaọy caàn phaỷi bieỏt ủi theo chieàu phaỷi hay traựi. Vớ duù, neỏu P1, P2, P3 laứ ba caùnh keà nhau cuỷa ủa giaực, ta taùo vector caùnh a=P2-P1 vaứ b=P3- P2. Hỡnh (1) cho thaỏy trửụứng hụùp a vaứ b naốm trong maởt xy vaứ quay traựi khi ủi tửứ a ủeỏn b. Coứn hỡnh (2) laứ quay phaỷi. b a b a Hỡnh 1 Hỡnh 2 Giaỷ sửỷ duứng heọ tay phaỷi ụỷ hỡnh 1 vaứ hỡnh 2 neõn truùc z (hay chieàu k) hửụựng ra ngoaứi tửứ trang saựch tụựi chuựng ta. Duứng quy taộc tay phaỷi, tớch a x b chổ ra ngoaứi vụựi thaứnh phaàn k dửụng. Neỏu laọp tớch voõ hửụựng vector naứy vụựi chớnh k, seừ ủửụùc moọt ủaùi lửụùng maứ daỏu cuỷa noự cho bieỏt chieàu quay, dửụng neỏu quay traựi vaứ aõm neỏu quay phaỷi. Cho vector a vaứ b trong maởt xy, quay tửứ a ủeỏn b seừ laứ dửụng neỏu T= k.(a x b) >= 0 vaứ aõm neỏu ngửụùc laùi (Keỏt quaỷ khoõng ủoồi ủoỏi vụựi heọ tay traựi). Vụựi ủa giaực loài, moùi pheựp quay coự cuứng chieàu, nhử ủa giaực A. Neỏu ủa giaực khoõng loài, nhử trửụứng hụùp B, goàm caỷ hai pheựp quay. Nhử vaọy, ủa giaực ủụn laứ loài neỏu vaứ chổ neỏu moùi pheựp quay coự coự cuứng daỏu khi ủửụùc duyeọt. A B Giaỷi thuaọt: - Duyeọt ủa giaực theo thửự tửù caực ủổnh ủeồ xeựt vieọc quay tửứ caùnh a ủeỏn caùnh b taùi moói ủổnh laứ quay phaỷi hay quay traựi. .Tớnh toùa ủoọ theo hửụựng oz cuỷa tớch vector a x b T= k(a x b) = ax*by - ay*bx - Neỏu moùi pheựp quay ủeàu nhử pheựp quay taùi ủổnh thửự nhaỏt, ủa giaực loài. - Neỏu coự moọt pheựp quay khaực pheựp quay taùi ủổnh thửự nhaỏt,ủa giaực loừm. Tớnh dieọn tớch ủa giaực Cụ sụỷ toaựn hoùc: Vieọc tớnh moọt ủa giaực ủụn phaỳng baỏt kyứ xuaỏt phaựt tửứ vieọc tớnh dieọn tớch tam giaực. Dieọn tớch tam giaực ủửụùc tớnh dửùa vaứo tớch hai vector nhử sau: S =(1/2) |a x b| Trong ủoự caực vector a, b laứ caực vector caùnh cuỷa tam giaực. P P P P P P Vụựi moọt ủa giaực n ủổnh, ta coự theồ phaõn thaứnh n - 2 tam giaực baống caựch tửứ moọt ủổnh naứo ủoự cuỷa tam giaực ta veừ caực caùnh noỏi ủeỏn taỏt caỷ caực caùnh coứn laùi cuỷa ủa giaực. Khi ủoự dieọn tớch ủa giaực baống toồng dieọn tớch cuỷa caực tam giaực con naứy. Laỏy ủổnh P1 laứm choỏt, laọp (n-1) vector choỏt vector a1=P2 - P1, a2 = P3 - P1, an-1=Pn - P1. Caực vector naứy duứng ủeồ tớnh dieọn tớch moói tam giaực. Hai caùnh cuỷa tam giaực i ủửụùc xaực ủũnh bụỷi hai vector ai vaứ ai+1. Nhửng neỏu ủa giaực laứ loừm, thỡ khoõng phaỷi moùi ủa giaực ủeàu coự dieọn tớch dửụng. Do ủoự ủeồ hỡnh thaứnh coõng thửực toồng quaựt tớnh dieọn tớch moọt ủa giaực baỏt kyứ ta phaỷi bieỏn ủoồi coõng thửực tớnh dieọn tớch tam giaực moọt chuựt. Trong coõng thửực tớnh dieọn tớch tam giaực treõn, thay vỡ duứng trũ tuyeọt ủoỏi cuỷa tớch hai vector, ta nhaõn noự vụựi un, chuaồn hửụựng (ủoọ daứi ủụn vũ) ra cuỷa maởt chửựa ủa giaực (neỏu ủa giaực naốm trong maởt xy, un laứ k). Vector chuaồn hửụựng ra cuỷa maởt chửựa ủa giaực ủửụùc xaực ủũnh baống caựch tớnh tớch hửừu hửụựng hai vector caùnh cuỷa tam giaực. Nhaõn vụựi chuaồn hửụựng ra un laứ ủeồ loùc ra dieọn tớch aõm vaứ dieọn tớch dửụng, noự khoõng aỷnh hửụỷng ủeỏn baỷn thaõn tửứng dieọn tớch tam giaực. Luực naứy dieọn tớch tam giaực ủửụùc tớnh theo coõng thửực: S = (ax.by-ay.bx)/ 2 trong ủoự a, b laứ hai vector caùnh cuỷa tam giaực. Khi ủoự dieọn tớch cuỷa ủa giaực laứ: S = trong ủoự Si laứ dieọn tớch (coự daỏu) cuỷa tam giaực thửự I Giaỷi thuaọt: - i baột ủaàu = 2 - Dieọn tớch ủa giaực = 0 - Laởp laùi { . Tớnh dieọn tớch tam giaực coự 3 ủổnh laứ : ủổnh 1,ủổnh i, ủổnh i+1 . Dieọn tớch ủa giaực = Dieọn tớch ủa giaực + Dieọn tớch tam giaực . Inc (i,1) } Cho ủeỏn khi i=N-1 - Dieọn tớch ủa giaực = Abs (dieọn tớch ủa giaực) III.2. CAÙC QUAN HEÄ HèNH HOẽC TRONG KHOÂNG GIAN (3D) 1- Caực pheựp bieỏn hỡnh 3 chieàu Cụ sụỷ toaựn hoùc: Moọt trong nhửừng ửu ủieồm quan troùng cuỷa ủoà hoùa laứ cho pheựp deó daứng taực ủoọng leõn caực ủoỏi tửụùng ủoà hoùa. Taỏt caỷ caực bieỏn ủoồi treõn ủoà hoùa maựy tớnh ủeàu coự theồ thoỷa maừn moọt caựch tửụng ủoỏi deó daứng vỡ caực hỡnh aỷnh khi ủửa vaứo xửỷ lyự ủaừ ủửụùc soỏ hoaự, do ủoự noự coự theồ thay ủoồi deó daứng baống caực pheựp bieỏn ủoồi toaựn hoùc. Pheựp bieỏn ủoồi hỡnh hoùc thửụứng ủửụùc duứng laứ pheựp bieỏn ủoồi Affine. Coự hai quan ủieồm veà pheựp bieỏn ủoồi, ủoự laứ: Bieỏn ủoồi ủoỏi tửụùng. Bieỏn ủoồi heọ toùa ủoọ. Bieỏn ủoồi ủoỏi tửụùng: laứ thay ủoồi toùa ủoọ caực ủieồm moõ taỷ noự theo moọt quy luaọt naứo ủoự. Bieỏn ủoồi heọ toùa ủoọ: seừ taùo ra moọt heọ toùa ủoọ mụựi vaứ taỏt caỷ caực ủieồm moõ taỷ ủoỏi tửụùng seừ ủửụùc chuyeồn veà heọ toùa ủoọ mụựi naứy. Phaàn naứy ta seừ moõ taỷ moọt soỏ pheựp bieỏn ủoồi ủoỏi tửụùng. Pheựp bieỏn ủoồi affine 3D bieỏn ủoồi ủieồm P(Px,Py,Pz) thaứnh ủieồm Q: Q = PM m m m m m m m m m m m m m m m m M = Vụựi P = (Px, Py, Pz), Q = (Qx, Qy, Qz) vaứ M laứ ma traọn bieỏn hỡnh 4x4 Moọt soỏ pheựp bieỏn ủoồi Affine cụ sụỷ, ủoự laứ: pheựp tũnh tieỏ

Các file đính kèm theo tài liệu này:

  • docDA0649.doc
Tài liệu liên quan