2012-05-16 48 views
7

Tôi có 2 hình tam giác và đỉnh p0, p1, p2, p3. Hai tam giác này chia sẻ một cạnh. Từ hai tam giác này tôi muốn tạo một tứ diện được cho bởi 4 đỉnh. Thư viện mà tôi làm việc với yêu cầu "4 đỉnh nên được đưa ra sao cho bốn bộ ba đỉnh xác định mặt tứ diện trong bản vẽ xuất hiện theo thứ tự ngược chiều kim đồng hồ khi được xem từ bên ngoài" drawing. Giả sử một trong hai tam giác là p0, p1, p2, tôi tính toán bình thường như là (p1-p0) (chéo) (p2-p0). Ai đó có thể cho tôi biết một cách để đảm bảo rằng điều kiện này được đáp ứng?Hướng tứ diện cho lưới tam giác

+2

Đó là một sự xấu hổ bạn đã đi đến tất cả các khó khăn để cung cấp một sơ đồ rất rõ ràng và sau đó được sử dụng các nhãn sai cho các đỉnh trong văn bản câu hỏi của bạn. Lần đầu tiên tôi đọc nó, tôi đã rất bối rối. –

+1

Nói chung, bạn cần một số cách khác để quyết định bên ngoài - thường là từ thuật toán chia lưới (hình khối di chuyển v.v.) –

+0

Nếu cả hai hình tam giác đều được tính theo cách tương tự như được đề cập trong phần mô tả, tôi không thể chọn một bên (cái bình thường đang trỏ) và xem xét nó trước hay sau? – Ray

Trả lời

10

Câu trả lời ngắn:

Điều kiện là p3 phải ở phía đúng của mặt phẳng xác định bởi (p0, p1, p2). Vì vậy, sau khi tính toán bình thường cho mặt phẳng này, bạn cần phải xác định xem vector từ (nói) p0 đến p3 đang trỏ theo cùng hướng của hướng bình thường hoặc ngược lại, bằng cách lấy sản phẩm dấu chấm dot(normal, p3-p0). Nói về mặt toán học


thêm:

Bạn cần phải tìm yếu tố quyết định của ma trận 4x4 hình thành bởi các tọa độ đồng nhất trong bốn điểm. Dấu hiệu của yếu tố quyết định xác định nếu điều kiện được đáp ứng; biển báo thích hợp phụ thuộc vào các quy ước chính xác được sử dụng, nhưng lý tưởng nó phải tích cực:

require: 
    0 < det(p0, p1, p2, p3) 

    == det [ p0.x p0.y p0.z 1 ] 
     [ p1.x p1.y p1.z 1 ] 
     [ p2.x p2.y p2.z 1 ] 
     [ p3.x p3.y p3.z 1 ] 

Nếu một đặc biệt ra lệnh tập hợp các điểm có yếu tố quyết định tiêu cực, bạn có thể sửa chữa nó bằng cách trao đổi bất kỳ hai trong số những điểm (mà sẽ phủ định yếu tố xác định):

e.g., swapping p0 and p2: 

det(p0, p1, p2, p3) = - det(p2, p1, p0, p3) 
    ^ ^   ^ ^

hoặc, thường hơn, chuyển đổi giữa even and odd permutations của bốn đỉnh.

Nếu yếu tố quyết định bằng không, bốn điểm là đồng phẳng và không thể sửa được như thế này.


Cuối cùng, mã:

Một cách tương đối đơn giản để tính toán yếu tố quyết định này với 3-d toán vector:

let: v1 = p1 - p0 
     v2 = p2 - p0 
     v3 = p3 - p0 
     norm12 = cross(v1, v2) 
    -> determinant = dot(norm12, v3) 

Các yếu tố quyết định cuối cùng cũng được biết đến như là "sản phẩm ba" của v1, v2 và v3. Lưu ý rằng tôi đã do dự để cố gắng giải mã quy ước ký hiệu chính xác (nghĩa là bạn cần định thức dương hay âm) từ câu hỏi của bạn: từ ngữ và sơ đồ bạn cung cấp có nhiều hơn một chút khó hiểu.

Vì bạn có thư viện gốc và tài liệu của thư viện, tuy nhiên, bạn đang ở vị trí tốt nhất để trả lời câu hỏi này. Như một phương sách cuối cùng, bạn có thể thử các phương pháp thực nghiệm: thử cả hai dấu hiệu, và chọn một trong đó không thổi lên ...

+0

Cảm ơn bạn rất nhiều vì câu trả lời rõ ràng. Nó làm việc như một say mê – Ray

Các vấn đề liên quan