Chương 2: KỸ THUẬT ĐIỀU KHIỂN TƯƠNG TÁC-CONTROL NHÂN VẬT
2.9. Một số phương pháp hỗ trợ chuyển động nhân vật
Một phương pháp lặp là một thủ tục toán học sử dụng một giá trị ban đầu để tạo ra một chuỗi các giải pháp gần đúng nâng cao cho một bài toán, trong đó phép tính gần đúng thứ n được lấy từ các phép toán trước đó. Việc triển khai cụ thể phương pháp lặp, bao gồm tiêu chí kết thúc, là một thuật toán của phương pháp lặp.
Ngược lại, các phương pháp trực tiếp cố gắng giải quyết vấn đề bằng một chuỗi hữu hạn các thao tác. Các phương pháp lặp thường là lựa chọn duy nhất cho các phương trình phi tuyến tính. Tuy nhiên, các phương pháp lặp lại thường hữu ích đối với các bài toán tuyến tính liên quan đến nhiều.
Nếu một phương trình đưa về dạng f ( x ) = x , và nghiệm x là một điểm cố định hấp dẫn của hàm f , người ta có thể bắt đầu với một điểm x 1, và đặt x n +1 = f ( x n ) với n ≥ 1 và dãy { x n } n ≥ 1 sẽ hội tụ đến nghiệm x . Ở đây x n là nphép xấp xỉ hoặc phép lặp thứ của x và x n +1 là phép lặp tiếp theo hoặc n + 1 của x. Ngoài ra, các chỉ số trên trong ngoặc đơn thường được sử dụng trong các phương pháp số, để không ảnh hưởng đến các chỉ số dưới với các nghĩa khác. Nếu hàm f khả vi liên tục thì điều kiện đủ để hội tụ là bán kính phổ của đạo hàm bị giới hạn chặt chẽ bởi một trong một lân cận của điểm cố định. Nếu điều kiện này đúng tại một điểm cố định, thì phải tồn tại một lân cận đủ nhỏ.
53
Phương pháp lặp cố định:
Giới thiệu: Các phương pháp lặp cố định giải một hệ tuyến tính với một toán tử gần đúng với toán tử ban đầu; và dựa trên phép đo sai số trong kết quả ( phần dư ), tạo thành một "phương trình hiệu chỉnh" để quá trình này được lặp lại. Mặc dù các phương pháp này rất đơn giản để rút ra, triển khai và phân tích, nhưng sự hội tụ chỉ được đảm bảo cho một loại ma trận giới hạn.
Định nghĩa: Một phương pháp lặp được xác định bởi x : = Ψ(x ) , 𝑘 ≥ 0
và cho một hệ thống tuyến tính nhất định 𝐴𝑥 = 𝑏 với giải pháp chính xác 𝑥∗lỗi bởi: 𝑒 = x - x∗ , 𝑘 ≥ 0
Một phương pháp lặp được gọi là tuyến tính nếu tồn tại một ma trận 𝐶 𝜖 ℝ như vậy mà: 𝑒 = 𝐶𝑒 v 𝑘 ≥ 0
và ma trận này được gọi là ma trận lặp. Một phương pháp lặp với ma trận lặp cho trước 𝐶 được gọi là hội tụ nếu các điều kiện sau thỏa mãn:
lim→ (𝐶) = 0.
Một định lý quan trọng phát biểu rằng đối với một phương pháp lặp đã cho và ma trận lặp của nó 𝐶 nó hội tụ khi và chỉ khi bán kính quang phổ của nó 𝑝(𝐶) nhỏ hơn đơn vị, nghĩa là,
𝑝(𝐶) < 1.
Các phương pháp lặp cơ bản hoạt động bằng cách tách ma trận 𝐴 vào trong 𝐴 = 𝑀 − 𝑁
và đây là ma trận 𝑀 nên dễ dàng đảo ngược. Các phương pháp lặp hiện được định nghĩa là
𝑀x = 𝑁𝑥 + 𝑏 , 𝑘 ≥ 0 Từ đó, ma trận lặp được cho bởi 𝐶 = 𝐼 − 𝑀 𝐴 = 𝑀 𝑁
Các ví dụ cơ bản về phương pháp lặp cố định sử dụng phép tách ma trận 𝐴 chẳng hạn như
𝐴 + 𝐷 + 𝐿 + 𝑈, 𝐷: = 𝑑𝑖𝑎𝑔((𝑎 )𝑖)
54
Ở đâu 𝐷 chỉ là phần đường chéo của 𝐴, Và L là phần tam giác dưới nghiêm ngặt của 𝐴. Tương ứng, 𝑈 là phần tam giác trên nghiêm ngặt của 𝐴.
Phương pháp Richardson : 𝑀 ∶=
⍵𝐼 (⍵ ≠ 0) Phương pháp Jacobi : 𝑀 ∶= 𝐷
Phương pháp Jacobi tắt dần : 𝑀 ∶=
⍵𝐷 (⍵ ≠ 0) Phương pháp Gauss-Seidel : 𝑀 ∶= 𝐷 + 𝐿
Phương pháp thư giãn quá mức liên tiếp (SOR): 𝑀 ∶=
⍵𝐷 + 𝐿 (⍵ ≠ 0) Thư giãn quá mức liên tiếp đối xứng (SSOR):
𝑀 ∶=
⍵(𝐷 + ⍵𝐿)𝐷 (𝐷 + ⍵𝑈) (⍵ ≠ {0,2})
Phương pháp lặp tĩnh tuyến tính còn được gọi là phương pháp thư giãn.
2.9.2. Cây K-D:
Trong khoa học máy tính, cây k-d (viết tắt của cây k chiều) là một cấu trúc dữ liệu phân vùng không gian để tổ chức các điểm trong không gian k chiều.
Cây K-D là một cấu trúc dữ liệu hữu ích cho một số ứng dụng, chẳng hạn như các tìm kiếm liên quan đến khóa tìm kiếm đa chiều (ví dụ: tìm kiếm phạm vi và tìm kiếm lân cận gần nhất) và tạo các tập điểm. Cây K-D là một trường hợp đặc biệt của cây phân vùng không gian nhị phân.
Hình 2.43. Minh họa các điểm trên cây K-D
Một cây k-d 3 chiều. Sự phân tách đầu tiên (mặt phẳng thẳng đứng màu đỏ) cắt tế bào gốc (màu trắng) thành hai ô con, mỗi ô sau đó được tách ra (bởi các mặt phẳng ngang màu xanh lá cây) thành hai ô con. Cuối cùng, bốn ô được chia (bởi bốn mặt phẳng thẳng đứng màu xanh) thành hai ô con. Vì không còn sự phân tách, tám tế bào cuối cùng được gọi là tế bào lá.
55
Mô tả thuật toán cây K-D:
Cây k-d là một cây nhị phân trong đó mỗi nút là một điểm k chiều. Mỗi nút không phải lá có thể được coi là ngầm tạo ra một siêu mặt phẳng tách chia không gian thành hai phần, được gọi là nửa không gian. Các điểm ở bên trái của siêu mặt phẳng này được biểu diễn bằng cây con bên trái của nút đó và các điểm ở bên phải của siêu mặt phẳng được biểu thị bằng cây con bên phải. Hướng siêu mặt phẳng được chọn theo cách sau: mọi nút trong cây được liên kết với một trong các chiều k, với siêu mặt phẳng vuông góc với trục của chiều đó. Vì vậy, ví dụ: nếu đối với một phân tách cụ thể, trục "x" được chọn, tất cả các điểm trong cây con có giá trị "x" nhỏ hơn nút sẽ xuất hiện trong cây con bên trái và tất cả các điểm có giá trị "x" lớn hơn sẽ nằm trong cây con bên phải. Trong trường hợp như vậy, siêu mặt phẳng sẽ được đặt bởi giá trị x của điểm và bình thường của nó sẽ là đơn vị trục x
Hoạt động trên cây k-d
Xây dựng xây K-D: Vì có nhiều cách có thể để chọn mặt phẳng tách thẳng hàng trục, nên có nhiều cách khác nhau để xây dựng cây k-d. Phương pháp kinh điển của việc xây dựng cây k-d có những hạn chế sau:
Khi một người di chuyển xuống cây, người ta quay vòng qua các trục được sử dụng để chọn các mặt phẳng tách. Các điểm được chèn bằng cách chọn trung vị của các điểm được đưa vào cây con, đối với tọa độ của chúng trong trục được sử dụng để tạo mặt phẳng tách.
Cho một danh sách n điểm, thuật toán sau đây sử dụng một sắp xếp tìm trung vị để xây dựng một cây k-d cân bằng có chứa các điểm đó.
function kdtree (list of points pointList, int depth) {
// Select axis based on depth so that axis cycles through all valid values var int axis := depth mod k;
// Sort point list and choose median as pivot element select median by axis from pointList;
// Create node and construct subtree node.location := median;
node.leftChild := kdtree(points in pointList before median, depth+1);
node.rightChild := kdtree(points in pointList after median, depth+1);
return node;
}
56
Thông thường, các điểm "sau" trung vị chỉ bao gồm các điểm lớn hơn trung vị trong chiều hiện tại. Đối với các điểm nằm trên trung vị trong chiều hiện tại, có thể xác định một hàm so sánh chúng trong tất cả các chiều. Trong một số trường hợp, có thể chấp nhận để các điểm bằng trung vị nằm ở một bên của trung vị, ví dụ, bằng cách chia các điểm thành một tập hợp con "nhỏ hơn" và một tập con "lớn hơn hoặc bằng".
Thuật toán này tạo ra bất biến mà đối với bất kỳ nút nào, tất cả các nút trong cây con bên trái nằm ở một bên của mặt phẳng phân tách và tất cả các nút trong cây con bên phải nằm ở phía bên kia. Các điểm nằm trên mặt phẳng tách có thể xuất hiện ở hai bên. Mặt phẳng phân tách của một nút đi qua điểm được liên kết với nút đó (được gọi trong mã là node.location).
Các thuật toán thay thế để xây dựng một cây k-d cân bằng sử dụng dữ liệu trước khi xây dựng cây. Sau đó, họ duy trì trật tự của khu nghỉ dưỡng trong quá trình xây dựng cây xanh và do đó loại bỏ bước tốn kém là tìm dải phân cách ở mỗi cấp phân khu. Hai thuật toán như vậy xây dựng một cây k-d cân bằng để sắp xếp các hình tam giác nhằm cải thiện thời gian thực hiện dò tia cho đồ họa máy tính ba chiều. Các thuật toán này sử dụng n hình tam giác trước khi xây dựng cây k-d, sau đó xây dựng cây trong thời gian trong trường hợp tốt nhất. Một thuật toán xây dựng một cây k-d cân bằng để sắp xếp các điểm có độ phức tạp trong trường hợp xấu nhất là . Thuật toán này sử dụng n điểm trong mỗi k chiều bằng cách sử dụng một . Sau đó, nó duy trì trật tự của các khu nghỉ dưỡng k này trong quá trình xây dựng cây và do đó tránh tìm thấy dải phân cách ở mỗi cấp của phân khu.