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ỏ?
Trả lời
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.
Đã 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). –
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
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.
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 ...) –
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
Để 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.
- Xoay điểm thứ hai xung quanh z (do góc z của điểm 1) 0
- 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).
- 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ị).
- Tìm góc nửa, tính x và y cho điểm 3 mới, điểm 3.
- 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! :-)
- 1. Làm thế nào để tạo một popup nhỏ trong iOS?
- 2. Làm thế nào để tạo ra "url nhỏ" không thể tin được dựa trên một id?
- 3. Python: Làm thế nào đắt tiền để tạo ra một danh sách nhỏ nhiều lần?
- 4. Làm thế nào để chia nhỏ một tệp zip thành nhiều tập?
- 5. iPhone & Ipad - làm cách nào để tôi chia nhỏ mã?
- 6. Làm thế nào để bạn tạo ra một hình ảnh thu nhỏ của một JPEG trong Java?
- 7. JsTree làm thế nào để tạo ra một nút gốc
- 8. Clojure: Làm thế nào để tạo ra một 'trie'?
- 9. Làm thế nào để tạo ra một mảng toàn cầu?
- 10. Python & GTK3: Làm thế nào để tạo ra một Liststore
- 11. Làm thế nào để tạo ra một Clojure Lint?
- 12. Làm thế nào để phân chia một HashMap trong Java
- 13. Làm cách nào để tạo Swf được tạo ra Ant của tôi càng nhỏ càng tốt?
- 14. Làm thế nào để phân chia 2 int tạo ra một phao thay vì một int khác?
- 15. Làm cách nào để chia nhỏ các tệp lớn?
- 16. Làm thế nào để gây ra một phân chia cố ý bằng không?
- 17. chia nhỏ knockoutjs
- 18. Làm thế nào để chế tạo một động cơ nhỏ như Wolfram | Alpha?
- 19. Chia nhỏ git repo
- 20. Chia nhỏ hơn Multiply?
- 21. Chia nhỏ kết quả đầu ra được chia vạch với đường dây đọc
- 22. Làm thế nào để tạo ra một mô hình khác nhau của JTable?
- 23. Làm thế nào để viết một đoạn mã để tạo ra một phương thức trong C#?
- 24. Làm thế nào để tạo ra một phao NaN trong c?
- 25. Làm thế nào để tạo ra một cây Expression để làm tương tự như "StartsWith"
- 26. Làm thế nào để ngăn chặn java.lang.String.split() từ việc tạo ra một chuỗi rỗng hàng đầu?
- 27. Làm thế nào để tạo ra n-gram trong scala?
- 28. Làm thế nào để tạo ra stacktrace javascript?
- 29. Làm thế nào để tạo ra cây kỹ năng?
- 30. Làm thế nào để tạo ra tập tin chơi heroku?
Có hướng dẫn [tại đây] (http://www.donhavey.com/blog/tutorials/tutorial-3-the-icosahedron-sphere/). –