Có ai biết cách tạo ra một thuật toán có khả năng tạo hình giống như trong ảnh không, khi được cung cấp một tập hợp các điểm cụ thể (mảng 3D)
Có ai biết cách tạo ra một thuật toán có khả năng tạo hình giống như trong ảnh không, khi được cung cấp một tập hợp các điểm cụ thể (mảng 3D)
Câu trả lời:
Đến đây sau trận chiến, nhưng vì vẫn chưa có câu trả lời được chấp nhận và thấy rằng @Luke từ chối nhận được đại diện mà anh ấy xứng đáng nhận được, đây là một bản tóm tắt nhanh chóng về liên kết anh ấy cung cấp.
Vì vậy, thuật toán đầy đủ có sẵn ở đây:
http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html
Ý tưởng là bootstrap lưới của bạn bằng một phương pháp đơn giản cung cấp cho bạn một hình cầu với 20 mặt, và sau đó tinh chỉnh nó cho đến khi bạn hài lòng.
Bạn bắt đầu với một icosahedron . Như bài viết trên wikipedia nói, bạn có thể có được các đỉnh bằng cách vẽ ba hình chữ nhật giống hệt nhau và trực giao. Bạn có 3 hình chữ nhật với 4 góc mỗi cạnh -> 12 đỉnh.
Wikipedia minh họa:
Ví dụ: các điểm kế hoạch Z là (a, b là độ dài hình chữ nhật):
Bây giờ bạn vẫn phải tìm 20 khuôn mặt. Đây là một bài tập cho người đọc: p
Bây giờ bạn có một hình cầu cơ bản, bạn có thể muốn thêm đa giác. Bạn làm như vậy với thuật toán đơn giản này:
for each iteration:
# each iteration multiplies by 4 the number of faces
for each edge at the current iteration:
split the edge in two
replace the middle point on the sphere
Để tìm điểm giữa, chúng tôi giả sử rằng chúng tôi muốn tạo hình cầu đơn vị (tâm (0, 0, 0), bán kính 1).
middlePoint(p1, p2):
middle = Point((p1.X + p2.X / 2), # same for y, z)
radius = sqrt(middle.X^2, middle.Y^2, middle.Z^2)
return Point(middle.X / radius, # same for y, z)
Ở mỗi lần lặp, chúng ta có thể phải dựng lại khuôn mặt, nhưng nó khá dễ. Mỗi khuôn mặt được chia thành bốn: