Ứng dụng và tầm quan trọng của phát hiện va chạm

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số kỹ thuật tính toán va chạm trong thực tại ảo (Trang 25)

Các lĩnh vực của phát hiện va chạm nhận được nhiều sự chú ý và được sử dụng trong nhiều ứng dụng khác nhau.

- Trong lĩnh vực chế tạo robot, đặc biệt là trong ngành công nghiệp sản xuất xe cộ sử dụng robot để thử nghiệm những trường hợp va chạm có thể xảy ra trước khi đưa ra sử dụng. Các kỹ thuật phát hiện va chạm cũng rất hữu ích cho robot lái xe trên đường gặp các chướng ngại vật xung quanh.

- Mô phỏng: mô phỏng càng chính xác với đời thực càng tốt vì vậy các đối tượng di chuyển phải có sự va chạm.

- Cảnh báo tai nạn giao thông: tự động thông báo cho cảnh sát va chạm xảy ra tại chỗ giao nhau, trên đường cao tốc, ...

- Trò chơi: để người chơi quyết định đưa ra cú đánh hoặc các đối tượng di chuyển trong thế giới ảo thì va chạm cần phải được phát hiện.

Chƣơng 2: Một số kỹ thuật phát hiện va chạm

2.1. Kỹ thuật phát hiện va chạm dựa vào hộp bao AABB 2.1.1. Định nghĩa hộp bao AABB 2.1.1. Định nghĩa hộp bao AABB

Khối bao theo trục AABB (Axis Aligned Bounding Box) là khối bao có dạng hình hộp chữ nhật nhỏ nhất và có các cạnh song song với các trục tọa độ bao lấy đối tượng.

Khối bao AABB bao gồm một tâm C, ba hệ số a0, a1, a2 tương ứng theo ba trục tọa độ x, y, z.

2.1.2. Xây dựng hộp bao AABB

Trong không gian 3 chiều, một AABB có tâm C và ba hệ số a0, a1, a2 được xác định bởi hai đỉnh có tọa độ lớn nhất (xmax, ymax, zmax) và nhỏ nhất (xmin, ymin, zmin).

Trong đó:

Loại BV này rất dễ tạo ra, dễ hợp nhất lại với nhau và thuận tiện cho việc phát hiện va chạm. Lợi thế lớn nhất của loại BV này là xử lý nhanh, tuy nhiên không chính xác cho lắm.

Hình 2.3:Hợp nhất và kiểm tra va chạm giữa AABB và OBB

2.1.3. Phát hiện va chạm giữa hai hộp bao AABB

Cho hai hộp bao AABB xác định bởi [C1, a0, a1, a2] và [C2, b0, b1, b2] trong đó ai > 0, bj>0 và i,j = 0, 1, 2. Dựa vào cách xây dựng khối bao AABB ở trên, ta xác định được: tọa độ lớn nhất và nhỏ nhất của khối bao thứ nhất là (xmax1, ymax1, zmax1) và nhỏ nhất (xmin1, ymin1, zmin1); tọa độ lớn nhất và nhỏ nhất của khối bao thứ hai là (xmax2, ymax2, zmax2) và nhỏ nhất (xmin2, ymin2, zmin2).

Hai hộp bao AABB không va chạm nếu xảy ra một trong các điều kiện sau: - xmin1 > xmax2 hoặc xmax1 < xmin2

- ymin1 > ymax2 hoặc ymax1 < ymin2 - zmin1 > zmax2 hoặc zmax1 < zmin2

Hộp bao này rất đơn giản, dễ tạo ra và kiểm tra, phát hiện va chạm cũng rất dễ dàng. Tuy nhiên, hộp bao AABB cũng tạo ra nhiều khoảng trống giữa vật thể và hộp bao. Khi vật thể không nằm song song với các trục tọa độ và có dạng dài thì khoảng trống này càng lớn. Thực tế, trong các hệ thống thực tại ảo người ta chỉ sử dụng kỹ thuật hộp bao AABB để giới hạn vùng va chạm, sau đó để kiểm tra và tìm điểm va chạm chính xác hơn người ta sẽ sử dụng kỹ thuật hộp bao theo hướng OBB.

2.2. Kỹ thuật phát hiện va chạm dựa vào hộp bao OBB 2.2.1. Định nghĩa hộp bao OBB 2.2.1. Định nghĩa hộp bao OBB

Hộp bao theo hướng OBB (Oriented Bounding Box) là hộp bao AABB nhưng trục có hướng bất kỳ. OBB có ưu điểm hơn AABB là giảm không gian trống giữa vật thể và hộp bao. Tuy nhiên, việc tạo ra và thao tác trên hộp bao loại này phức tạp hơn loại AABB nhiều, mặc dù vậy người ta vẫn dùng loại hộp bao này nhiều hơn vì nó cho độ chính xác cao hơn nhiều so với hộp bao AABB.

Hình 2.5: H p bao OBB

Loại hộp bao này bao khá vừa các dạng vật thể. Tuy nhiên, với vật thể có nhiều đỉnh cao như hình bên thì rõ ràng chưa phải tối ưu.

2.2.2. Xây dựng hộp bao OBB

Trong phần này, tất cả các vectors được hiểu là trong không gian R3. Một OBB được xác định bởi tâm C, ba vector chỉ hướng của hộp bao A0,A1,A2 và ba hệ số độ dài tương ứng với kích thước của hình hộp là a0 > 0, a1 > 0, a2 > 0. OBB được mô tả bởi:

i a x A x C i i: i i ___ 2

và 8 đỉnh của hộp bao là: 2 0 i i i ia A C

trong đó: i 1 với mọi i.

2.2.3. Phát hiện va chạm giữa hai hộp bao OBB

Để kiểm tra 2 hộp bao có va chạm với nhau hay không ta sử dụng định lý sau: 2 đối tượng lồi sẽ không giao nhau khi và chỉ khi tồn tại mặt phẳng P cô lập được chúng.

Trong không gian 3 chiều R3, nếu 2 hộp bao giao nhau thì hình chiếu của chúng trên các trục toạ độ x, y và z cũng phải giao nhau.

Thuật toán tổng quát có thể phát biểu ngắn gọn như sau:

- Chiếu mỗi hộp bao (AABB) lên các trục toạ độ x, y và z. Kết quả thu được là các đoạn thẳng.

- Hoặc có thể chiếu mỗi hộp bao (AABB) lên các mặt phẳng toạ độ xOy, yOz và zOx. Kết quả thu được là các hình chữ nhật.

- Kiểm tra sự giao nhau giữa các đoạn thẳng được chiếu lên các trục toạ độ. Nếu hình chiếu của 2 hộp bao giao nhau trên cả 3 trục toạ độ thì 2 hộp bao đó giao nhau. Ngược lại chúng không giao nhau.

- Nếu chiếu lên các mặt phẳng toạ độ thì 2 hộp bao giao nhau khi và chỉ khi hình chiếu của 2 hộp bao đó lên mỗi mặt phẳng toạ độ đều giao nhau.

2.2.3.1.Sự phân tách giữa các OBB

Cho hai khối bao OBB xác định bởi các thông số [C0,A0,A1,A2, a0, a1, a2] và [ 1

C ,B0,B1,B2, b0, b1, b2]. Các trục phân tách 2 hộp bao có dạng C0 sL trong đó L

có thể là Ai,Bj hoặc AixBj với i,j = 0,1,2.

Hình chiếu của điểm P lên đường C0 sLvới gốc C0 là: L

L L C P L . . 0

Khoảng cách từ gốc C0 tới hình chiếu là : ProjDist(P) =

L L C P L . . 0

Khoảng cách hình chiếu các đỉnh của OBB thứ nhất với gốc C0là: 2 0 2 0 0 . . Pr i i i i i i i i L L A L a A a C ojDist

Độ dài ngắn nhất chứa 8 đoạn hình chiếu có tâm K0 = 0 và bán kính là:

L L A L A L Sign a r i i i i . . . . 2 0 0

Khoảng cách hình chiếu các đỉnh của OBB thứ hai với gốc C0là: 2 0 2 0 0 . . . . Pr i i i i i i i i L L B L b L L D L A b C ojDist Trong đó: D C1 C0.

Độ dài ngắn nhất chứa 8 đoạn hình chiếu có tâm K1 L.Dvà bán kính:

L L B L B L Sign b r i i i i . . . 2 0 1

Hai đoạn chiếu sẽ không giao nhau khi và chỉ khi khoảng cách giữa các tâm lớn hơn tổng của các bán kính: |K1 - K0| > r0 + r1.

Hình 2.8: Kiểm tra va chạm giữa 2 OBB

Mỗi đại lượng ở 2 vế có cùng mẫu số L.L. Do đó ta bỏ đi mẫu số này, điều kiện không giao nhau sẽ là:

i i i i i i i iSignLA LA bSignLB LB a D L. . . . . 2 0 2 0 Đặt: D L R . i i aiSignLAi LA R 2 . . 0 0 i i biSignLBi LB R 2 . . 0 1 (1)

 điều kiện không giao nhau là R > R0 + R1.

Các trục của OBB thứ 2 được viết dưới dạng tổ hợp các trục của OBB thứ nhất: 2 2 1 1A c A c A c Bi oi o i i với i = 0, 1, 2.

Gọi: A là ma trận với cột là các thành phần của Ai

B là ma trận với cột là các thành phần của Bi

C là ma trận với cột là các thành phần cij Khi đó, ta có:

B = AC → C = AT

B trong đó T là toán tử chuyển vị.

j i j

i A B

Tương tự, các trục của OBB thứ nhất có thể viết dưới dạng tổ hợp các trục của OBB thứ hai:

2 2 1 1B c B c B c Ai io o i i với i = 0, 1, 2.

Kiểm tra điều kiện không giao nhau gồm tích vô hướng của các bộ ba sau:

j i o j i i A xB Signi i c A 2 1 0. ,1 2 0 1 1 , . i j ij jo AxB Sign j j c B (2) Trong đó:

Sign(0,1) = Sign(1,2) = Sign(2,0) = +1 và Sign(1,0) = Sign(2,1) = Sign(0,2) = -1.

Từ phương trình (1) và (2) ta có bảng sau:

Hình 2.9: Bảng các giá trị của R, Ro,R1 để kiểm tra điều kiện 2 OBB không giao nhau: R>Ro+R1

2.3. Kỹ thuật phát hiện va chạm dựa vào khối bao cầu 2.3.1. Định nghĩa khối bao cầu 2.3.1. Định nghĩa khối bao cầu

- Bounding spheres là các khối bao có dạng hình cầu bao lấy đối tượng, được xác định bởi 4 giá trị: tọa độ tâm C(xc, yc, zc) và bán kính r.

- Khối bao dạng này rất dễ tạo ra và rất đơn giản trong các thao tác kiểm tra va chạm. Dễ dàng kiểm tra va chạm là bởi vì khi đối tượng quay hay chuyển động thì hình dạng, hướng của hình cầu đều không bị thay đổi, hình cầu không bị tác động khi vật thể tự quay. Hình cầu không phụ thuộc vào trục.

H nh 2.10. Kh i bao c u

- Ta cũng có thể thay thế các hình bao cầu bởi các khối ellipsoid. Hình bao cầu chỉ là trường hợp riêng của hình bao ellipsoid.

- Tuy nhiên, hình bao cầu lại có một số nhược điểm.

- Nó thường biểu diễn không chính xác hình dạng các vật thể nếu như các vật thể này không có dạng khối cầu, đặc biệt khi hình dạng của vật thể có dạng bẹt hoặc dài thì càng không chính xác. Vì vậy thuật toán sẽ không được tối ưu.

- Khối bao này tạo ra nhiều không gian trống giữa vật thể với khối cầu. - Rất khó hợp nhất 2 hay nhiều BS loại này bởi vì sẽ tạo ra sai số rất lớn.

Hình 2.11:Hợp nhất và kiểm tra va chạm giữa 2 khối bao cầu

2.3.2. Xây dựng khối bao cầu

- Ta dễ dàng tạo được hộp bao AABB như hình bên

- Lấy tâm của hộp bao AABB làm tâm của hình

cầu

- Chọn đường kính của hình cầu bằng độ dài đường chéo của hộp bao AABB.

Với cách tạo đơn giản này cho ta một khối bao hình cầu không được tối ưu lắm. Tuy nhiên, cách này tương đối đơn giản, dễ dàng thực hiện.

Ta hãy xem một phương pháp cải tiến của phương pháp nêu trên:

- Lấy tâm của khối cầu là tâm của hộp bao AABB

- Duyệt tất cả các đỉnh của đối tượng

- Tìm đỉnh mà khoảng cách từ tâm khối cầu đến

H nh 2.12. Xây d ng kh i bao c u

đó là lớn nhất và lấy khoảng cách đó làm bán kính của hình cầu.

Với phương pháp này thì hạn chế được khoảng không gian trống hơn phương pháp trên, tuy nhiên cần phải thực hiện nhiều phép toán so sánh và tìm kiếm.

Qua 2 phương pháp xây dựng nhanh BS ở trên ta thấy rằng giải pháp trên là không phải tối ưu. Rõ ràng cả 2 phương pháp đều tạo ra những khoảng không gian trống quá lớn nên chúng ta cần tìm ra giải pháp hạn chế được khoảng không gian trống càng nhiều càng tốt.

Giải pháp tối ưu nhất được trình bày như sau:

Giả sử S là một tập các đỉnh của một đối tượng (hay đơn giản S là một tập các điểm). Với tất cả các đỉnh V thuộc tập S ta thực hiện các bước sau:

Bước 1: Tìm tất cả các đỉnh Vmax là đỉnh có tọa độ lớn nhất theo các trục tọa độ (x, y, z).

Bước 2: Tìm tất cả các đỉnh Vmin là đỉnh có tọa độ nhỏ nhất theo các trục tọa độ (x, y, z).

Bước 3: Chọn ra cặp đỉnh Vmax, Vmin sao cho khoảng cách giữa chúng theo các trục tọa độ là lớn nhất.

Bước 4: Chọn tâm C của khối cầu là trung điểm của vector Vmax - Vmin

Bước 6: Duyệt tất cả các đỉnh còn lại, gọi d là khoảng cách từ đỉnh đang xét tới tâm của khối cầu. Nếu một đỉnh nào đó nằm ngoài khối cầu thì ta di chuyển tâm C của khối cầu một khoảng (d+r)/2 và chọn bán kính mới của khối cầu là (d+r)/2.

Khi đã duyệt tất cả các đỉnh thì chắc chắn rằng khối cầu đã bao tất cả các đỉnh (hay các điểm).

2.3.3. Phát hiện va chạm giữa hai khối bao cầu

Một khối cầu được xác định bởi tâm và bán kính của nó. Giải quyết vấn đề va chạm giữa 2 khối cầu có vẻ đơn giản hơn. Bằng cách tính khoảng cách giữa 2 tâm của khối cầu, nếu khoảng cách này nhỏ hơn hoặc bằng tổng của 2 bán kính của 2 khối cầu thì 2 khối cầu giao nhau.

H nh 2.13: Hai khối cầu xảy ra va chạm Nhưng vấn đề lại không chỉ có vậy, ta hay xem hình dưới:

Rõ ràng là theo hướng chuyển động của 2 quả bóng trên (ball 1 và ball 2) thì chắc chắn là 2 quả bóng đó sẽ va chạm với nhau. Nhưng thực tế thì chưa chắc như vậy là bởi vì ở đây chúng ta quên mất yếu tố thời gian. Gọi C là giao điểm của r1 với r2 (ở đây chưa nói C là điểm giao của ball 1 với ball 2). Nếu xét đến yếu tố thời gian thì tại thời điểm t1 quả bóng ball 1 chuyển động qua điểm C, tại thời điểm t2 quả bóng ball 2 chuyển động qua điểm C. Ta hoàn toàn có thể cho rằng t1 khác t2 và như vậy thì ball 1 không va chạm với ball 2. Đó chính là vấn đề chính ta cần giải quyết.

Các phương trình ở trên chỉ giải quyết được giao điểm khi chưa xét đến vấn đề thời gian. Đối với các đối tượng có hình dạng phức tạp hoặc khi không thể thiết lập được phương trình cụ thể để tìm giao điểm hoặc khi phương trình

trở nên quá phức tạp không thể giải được thì tất nhiên là chúng ta phải sử dụng đến những phương thức khác.

Các thông số cần thiết để tính toán giao điểm của 2 khối cầu đó là : điểm đầu, điểm cuối, thời gian, vận tốc (bao gồm hướng và tốc độ) của khối cầu. Để tính được điểm giao thì thời gian (time step) lại được chia thành các khoảng nhỏ hơn và chúng ta sẽ thực hiện việc di chuyển khối cầu trong mỗi khoảng thời gian đó bằng cách sử dụng đại lượng vận tốc và kiểm tra sự giao nhau trong mỗi khoảng thời gian đó. Khi có bất cứ giao điểm nào được tìm thấy (cũng có nghĩa là khối cầu này sẽ “xuyên” một phần của nó vào khối cầu khác), chúng ta sẽ lấy vị trí của khối cầu ngay trước khi khối cầu đó “xuyên” vào khối cầu khác làm vị trí giao điểm.

Rõ ràng là chúng ta không muốn 2 khối cầu xuyên vào nhau như hình trên. Do vậy chúng ta phải lấy vị trí của khối cầu ngay trước khi chúng xuyên vào nhau làm vị trí giao điểm. Khoảng chia thời gian (time step) càng nhỏ thì độ chính xác càng cao.

Vấn đề tiếp theo chúng ta phải giải quyết đó là sẽ xảy ra va chạm trong khoảng giữa mỗi khoảng thời gian (Timestep) mà ta xét. TimeStep chính là mỗi khoảng thời gian ta thực hiện di chuyển khối cầu từ vị trí hiệnt tại dọc theo hướng của vector vận tốc. Vì chúng ta kiểm tra khối cầu di chuyển trên một tia vô hạn nên luôn có khả năng điểm xảy ra va chạm nằm sau vị trí mới của khối cầu đó. Để giải quyết vấn đề này chúng ta sẽ di chuyển khối cầu, tính toán vị trí mới và tìm khoảng cách giữa điểm đầu và điểm cuối. Từ thủ tục tìm va chạm

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số kỹ thuật tính toán va chạm trong thực tại ảo (Trang 25)

Tải bản đầy đủ (PDF)

(60 trang)