2009-02-18 37 views
8

Tôi đã hỏi một số câu hỏi ở đây và nhìn thấy hình dạng hình học này được đề cập một vài lần trong số các hình dạng trắc địa khác, nhưng tôi tò mò làm thế nào chính xác tôi sẽ tạo ra một về xyz điểm?Làm thế nào để tạo ra một icosahedron chia nhỏ?

+2

Có hướng dẫn [tại đây] (http://www.donhavey.com/blog/tutorials/tutorial-3-the-icosahedron-sphere/). –

Trả lời

9

Here là một tham chiếu mà tôi đã sử dụng cho các icosahedrons được chia nhỏ, dựa trên Sách Đỏ OpenGL. Việc cấp phép BSD source code cho ứng dụng iPhone của tôi Molecules chứa mã để tạo các icosahedrons đơn giản và tải chúng vào một đối tượng đệm vertex cho OpenGL ES. Tôi chưa kết hợp phân mục để cải thiện chất lượng hiển thị, nhưng nó nằm trong kế hoạch của tôi.

+0

Đã lâu rồi, nhưng tôi tin rằng đây là mã tôi dựa vào. Nó hoạt động khá tốt. Cuối cùng, tôi đã có một quả bóng tennis 3D sẽ biến dạng khi va chạm (không thể làm với một gluSphere). –

+2

Mã này làm gì: Thêm một tầng băng đơn giản, chia nhỏ, sau đó bình thường hóa - không cung cấp chính xác phân phối đồng đều (hình tam giác sẽ hơi nhỏ hơn gần với các đỉnh ban đầu). – ideasman42

10

Có hướng dẫn here.

Ý tưởng quan trọng là bắt đầu với một icosahedron (có 20 mặt hình tam giác) và liên tục chia nhỏ từng khuôn mặt hình tam giác thành hình tam giác nhỏ hơn. Ở mỗi giai đoạn, mỗi điểm mới được dịch chuyển theo chiều dọc để nó là khoảng cách chính xác từ trung tâm.

Số lượng các giai đoạn sẽ xác định có bao nhiêu hình tam giác được tạo ra và do đó làm cách nào mà lưới kết quả sẽ là hình cầu.

+0

Bây giờ đã thêm một bản tóm tắt của bài viết được liên kết (Tôi không cho rằng tôi biết quy tắc này cách đây 6 năm ...) –

+0

xin lỗi, đó là một câu trả lời soạn trước từ hàng đợi đánh giá - Tôi thậm chí không nhận thấy '09 năm đóng dấu trên câu trả lời. Cảm ơn các cập nhật. – LittleBobbyTables

7

Để tesselate một quả cầu, hầu hết mọi người chia nhỏ các điểm tuyến tính, nhưng điều đó không tạo ra một hình tròn.

Đối với tesselation tròn, xoay hai điểm thông qua một loạt các phép quay.

  1. Xoay điểm thứ hai xung quanh z (do góc z của điểm 1) 0
  2. Xoay điểm thứ hai xung quanh y (do góc y của điểm 1) đến 0 (điều này một cách logic đặt điểm 1 tại cực Bắc).
  3. Xoay điểm thứ hai xung quanh z đến 0 (điều này đặt một cách hợp lý điểm 1 trên mặt phẳng x/y, bây giờ sẽ trở thành một vòng tròn đơn vị).
  4. Tìm góc nửa, tính x và y cho điểm 3 mới, điểm 3.
  5. Thực hiện xoay ngược theo thứ tự ngược lại cho các bước 3), 2) và 1) để định vị điểm thứ ba đến điểm đến của nó.

Ngoài ra còn có một số cân nhắc toán học cho các giá trị gần từng vị trí gần 0, chẳng hạn như cực bắc và cực nam và các vị trí ngoài cùng bên phải và bên trái và nhiều nhất , vì vậy hãy kiểm tra những người đầu tiên và thực hiện một vòng quay bổ sung bằng pi/4 (45 độ) nếu chúng ở những vị trí đó. Điều này ngăn không cho các thư viện toán tử dấu chấm động xuất hiện và tạo ra các giá trị out-of-ký tự cực đại cho hàm atan2() và các hàm trig khác.

Hy vọng điều này sẽ hữu ích! :-)

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