Ước tính diện tích của một giao điểm hình tam giác


7

Tôi đang cố gắng thực hiện Ray Trace with Cones (Amanatides 1984) . Thay vì tia, hình nón được bắn vào khung cảnh và giao nhau với hình học. Vì nhiều hình tam giác có thể chiếm khẩu độ của hình nón, chúng tôi cần tính toán (hoặc ước tính nhanh hơn, vì dấu vết hình nón tạo ra rất nhiều xấp xỉ) dù sao thì diện tích tương đối của hình tròn được bao phủ bởi hình tam giác. Sau đó, các đóng góp cá nhân được tính trọng số và tổng hợp.

Thật không may, tác giả không đưa ra nhiều chi tiết về giải pháp của mình. Dưới đây là những gì ông viết trên giao lộ hình nón:

Góc trải và góc giữa tia và mặt phẳng được tính ở trên với nhau cho biết khoảng cách giữa tâm của đường tròn và cạnh của nửa mặt phẳng [sic]. Với khoảng cách này, diện tích giao cắt được tính bằng cách sử dụng xấp xỉ đa thức. Điều này hoàn thành tính toán giao cho các mặt phẳng.

Và sau đó, sau khi chiếu một đa giác vào mặt phẳng vuông góc với vectơ chỉ phương của hình nón:

Sau đó, chúng ta phải tính toán giao điểm giữa đa giác được chiếu và một vòng tròn. Điều này có thể được thực hiện bằng cách tính khoảng cách từ tâm của vòng tròn đến từng cạnh và sau đó sử dụng ước lượng giao tuyến vòng tròn - nửa mặt phẳng đã đề cập trước đó.

Tôi đã tìm thấy một giải pháp cho vấn đề tại StackExchange. Tôi đã chuyển mã từ câu trả lời của NowIGetToLearnWhatAHeadIs và nó hoạt động tốt, nhưng có vẻ khá phức tạp đối với tôi. Tôi đang làm việc với Compute Shader, vì vậy việc phân nhánh là một điều tồi tệ và các giải pháp phụ thuộc rất nhiều vào nó.

  1. Phép tính gần đúng đa thức này mà Amanatides nói đến là gì, và nó được áp dụng như thế nào cho đa giác (đặc biệt là tam giác)?
  2. Có bất kỳ sự gần đúng nào cho vấn đề sẽ cho kết quả chính xác cộng hưởng (giả sử là 10%) với mức tăng đơn giản về hiệu suất / mã đơn giản không?
  3. Làm việc với GPU, tôi quan tâm đến một giải pháp tối ưu hóa sử dụng tối thiểu / tối đa so với phân nhánh, chẳng hạn. Có lẽ một cái gì đó như thế này đã tồn tại. Bất kỳ may mắn?

1
Bạn có nghi ngờ đọc điều này đã? Bạn có thể mở một montecarlo nói 16 mẫu không?
joojaa

Câu trả lời:


4

Hướng tới một giải pháp chính xác

Chỉ cần suy nghĩ nhanh trước khi tôi phải chạy!

Ok, chúng ta hãy biến vấn đề trên đầu của nó. Điều gì xảy ra nếu người ta không tính diện tích tam giác cắt theo đường tròn. Thay vào đó hãy tính toán nghịch đảo của điều này. Diện tích của ba đoạn cắt ra khỏi vòng tròn. Cái hay của cách tiếp cận này là chúng ta có thể tạo một đoạn mã duy nhất mà chúng ta có thể lặp lại ba lần. Tất nhiên một số thời gian câu trả lời sẽ là 0 nhưng không sao.

nhập mô tả hình ảnh ở đây

Hình 1 : Hãy tính toán vấn đề này thay thế.

Bây giờ hóa ra chúng ta biết cách tính nghịch đảo, đó là đoạn của một vòng tròn. Vì vậy, chúng ta chỉ có thể nói rằng .MộtTôint= =MộtcTôirctôie-Một1-Một2-Một3

nhập mô tả hình ảnh ở đây

Hình 2 : Chúng tôi biết giải pháp này.

Công thức cho diện tích của một phân đoạn chỉ đơn giản là và có một giải pháp nổi tiếng trong văn học.MộtSector-MộttrTôimộtngtôie

Vì vậy, bây giờ tất cả những gì bạn cần làm là tìm các giao điểm giữa các cạnh và vòng tròn trong một không gian tập trung vào vòng tròn, tính góc giữa chúng và sau đó tính toán từng phân đoạn. Và trường hợp đặc biệt duy nhất là nếu không có giao lộ tồn tại. Tôi không biết nếu điều này là nhanh nhưng ít nhất mã nên hơi dễ thực hiện.


Tôi betcha kích thước của kích thước vòng cung có thể được tính toán với điểm gần nhất trên đường thẳng sẽ làm cho điều này rất gọn gàng.
joojaa

Tôi yêu sự thanh lịch của phương pháp này. Có cần một cách tiếp cận trường hợp đặc biệt khi một trong các đỉnh nằm trong tam giác không? Có vẻ như có thể tính một phần của khu vực hai lần.
trichoplax

@joojaa Điều này thực sự có thể được tính bằng sagitta, và thậm chí còn có một công thức gần đúng cho điều này (Harris và Stocker 1998). Xem mathworld.wolfram.com/CircularSegment.html
David Kuri

@trichoplax Thật vậy phương pháp này sẽ thất bại nếu có ít nhất một đỉnh nằm trong vòng tròn và tôi không thể đảm bảo nó sẽ không xảy ra. Vẫn đang tìm kiếm một giải pháp tốt đẹp ở đó ...
David Kuri
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.