2009-06-18 50 views
23

Đưa ra: Lưới 3D được xác định bằng một tập hợp các đỉnh và hình tam giác xây dựng lưới bằng các điểm này.Thuật toán phác thảo 2D cho lưới 3D dự kiến ​​

Sự cố: Tìm phác thảo 2d của lưới được xoay tùy ý được chiếu trên một mặt phẳng tùy ý.

Phép chiếu dễ dàng. Thách thức nằm trong việc tìm kiếm "thân tàu" của các cạnh tam giác được chiếu trong mặt phẳng. Tôi cần một số trợ giúp với đầu vào/con trỏ về nghiên cứu thuật toán này. Để đơn giản, chúng ta có thể giả sử các cạnh 3D được chiếu thẳng xuống mặt phẳng xy.

+3

Đường màu xanh dương không trông lồi ở đây. – Svante

+0

Vâng, bạn nói đúng. Tôi nhanh chóng lấy trộm hình ảnh đó từ một trang web và vẽ một số đường màu đỏ trên đó để minh họa. Tôi vẫn hy vọng ý tưởng đó đã được thông qua :) – ralphtheninja

+0

@MagnusSkog: Tôi cần phải làm chính xác điều này. Phương pháp nào phù hợp nhất với bạn? – PeteUK

Trả lời

9
  • Bắt đầu với điểm ngoài cùng bên phải (điểm với x lớn nhất phối hợp)
  • Nhận tất cả các cạnh từ thời điểm này
  • Thực hiện theo các cạnh với góc nhỏ nhất đến dương trục x, và cũng có thể thêm nó với các giải pháp thiết
  • từ quan điểm đạt, hãy làm theo và thêm cạnh với góc nhỏ nhất đến cạnh bạn đến từ
  • Lặp lại cho đến khi bạn đạt đến điểm gốc
+3

Điều gì xảy ra nếu bạn chiếu hình xuyến vào mặt phẳng x-y? Điều này sẽ không nhận được "lỗ hổng" bên trong. – nsanders

+0

Điều gì sẽ xảy ra nếu có hai cạnh bằng cả góc nhỏ nhất? –

+0

Hmm ... Lấy ngắn hơn của hai. –

2

Kỹ thuật hình dạng alpha đề cập trong câu hỏi này xử lý một tập chung của điểm nơi các kết nối đỉnh không được tiết lộ:

Is there an efficient algorithm to generate a 2D concave hull?

Tuy nhiên, kể từ khi bạn đã biết "gương mặt" thông tin mà có thể được bảo quản qua chiếu, nó có lẽ không phải là cách tiếp cận tốt nhất.

Thuật toán bạo lực có thể khả thi, đặc biệt là nếu cấu trúc phân loại không gian được sử dụng. ví dụ cho mỗi khía cạnh:

  1. khía cạnh dự án trên với mặt phẳng
  2. Kiểm tra nếu khía cạnh dự kiến ​​được hoàn toàn bao bọc bởi hình học hiện có, nếu có: thực hiện (không cần phải mở rộng hình bóng dự kiến)
  3. Nếu điểm nằm ngoài hình học hiện có, làm nút giao thông tam giác tam giác để xác định phần nằm ngoài, xây dựng một tùy ý n-gon (có thể lõm) để lấp đầy không gian mất tích, sau đó chặt n-gon trong để tam giác

ý tưởng khác, tùy thuộc vào độ trung thực bạn yêu cầu, chỉ cần quay chùm tia bình thường từ mặt phẳng chiếu của bạn đến hình học ban đầu của bạn. Tạo một hit/bỏ lỡ 2d và sử dụng để xác định mức độ của bạn.

0

Chỉ đơn giản là vấn đề chiếu các điểm xyz vào các điểm x'Y 'trên mặt phẳng tùy ý và sau đó chỉ cần thực hiện một lồi lồi trong các tọa độ đó?

+0

Khi tôi trả lời nsanders trước khi ông viết lại câu trả lời của mình. Như bạn có thể thấy trên hình ảnh thứ hai, các cạnh màu đỏ không nhất thiết tạo thành một tập hợp lồi. – ralphtheninja

+1

Vì vậy, câu hỏi là thực sự chỉ cần tìm các cạnh ranh giới của một lưới? Chọn một điểm giữa trên mỗi dòng và thực hiện một số cạnh vượt qua - điểm trong thử nghiệm đa giác với tất cả các hình tam giác khác. –

3

Tôi chỉ thấy câu trả lời cho các giải pháp lồi, vì vậy ở đây là của tôi cho không lồi. (Đó là một chút bối rối ý định là gì.)

Lấy tất cả các cạnh từ hình tam giác 2D của bạn và nhóm chúng lại. Nếu hai cạnh chia sẻ cả hai điểm cuối, chúng nằm trong cùng một nhóm. Tất cả các nhóm, chỉ với một cạnh, sau đó là một phần của vỏ.

Cuối cùng, bạn có thể kết hợp các cạnh vỏ thành một vòng bằng cách ghép chúng lại với nhau.

2

Đường viền 2D của phép chiếu lưới là tập con của phép chiếu các cạnh của nó.

Sử dụng quan sát này, người ta có thể xác định phác thảo 2D bằng cách sử dụng phương pháp sau đây:

  • chiếu của mỗi cạnh thuộc chỉ có một khuôn mặt là một phần của phác thảo 2D,
  • cho cạnh khác, xác định vector bình thường của các mặt liền kề của nó
  • tính các sản phẩm chấm của các chuẩn đó với bình thường mặt phẳng chiếu
  • phép chiếu cạnh này thuộc về phác thảo 2D nếu tất cả các dấu hiệu của các sản phẩm chấm không giống nhau (nghĩa là, một khuôn mặt đang hướng về phía mặt phẳng chiếu trong khi ít nhất một mặt khác không xác định cạnh là một phần của đường viền).

Lưu ý rằng phương pháp này sẽ báo cáo tất cả các cạnh mà là trực giao với mặt phẳng chiếu, ngay cả những người mà không nhìn thấy được từ quan điểm của mặt phẳng chiếu của xem. Ví dụ, với một hình xuyến, nó sẽ tìm thấy đường viền bên trong và bên ngoài, ngay cả khi hình xuyến được xoay theo cách mà lỗ bên trong của nó không thể nhìn thấy từ quan điểm của mặt phẳng chiếu. Để sắp xếp các cạnh nào hiển thị, bạn sẽ cần một số loại kiểm tra khả năng hiển thị. Nếu mục đích sử dụng là để hiển thị người dùng, bạn có thể sử dụng bộ đệm độ sâu được tính toán với ma trận chiếu trực giao để hiển thị hình học từ góc nhìn của mặt phẳng chiếu và thực hiện kiểm tra z để xác định các cạnh nào có thể nhìn thấy được từ mặt phẳng. Nếu bạn cần độ chính xác, bạn sẽ cần phải thực hiện giao điểm ray/tam giác để xác định khả năng hiển thị.

+0

Tôi khuyên bạn nên thực hiện phép chiếu bài kiểm tra định hướng. Tôi đang cố gắng nhớ lý do tại sao trước khi chiếu không hoạt động. Không thể đưa ra một lý do toán học tốt mặc dù. Nó chỉ là tôi biến đổi bình thường sai có lẽ khi tôi đã làm nó. – starmole

1

Chỉ cần thêm: Một cách rất trực quan để tìm các cạnh trong một phép chiếu là quay trở lại khuôn mặt culling! Bất kỳ cạnh nào giữa khuôn mặt được chọn lọc và không bị cùn phải là đường viền. Nếu bạn muốn ẩn các cạnh bên trong, chỉ cần sử dụng bộ đệm z. Quay trở lại mặt culling chỉ đơn giản là post vertex thứ tự và rất rẻ để tính toán.

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