Có ai biết về một thuật toán cho phép một hình như hình ảnh này không?


9

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)

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


4
Đó là một điều, đây là những gì bạn đang tìm kiếm: blog.andreaskahler.com/2009/06/ Khăn
Luke San Antonio Bialecki

3
@LukeSanAntonio Đăng bài như một câu trả lời để tôi có thể nâng cấp nó một cách vui lòng;) (nhưng không chỉ là liên kết, một số giải thích tối thiểu về thuật toán sẽ là cần thiết cho một câu trả lời)
yannis

1
@YannisRizos Tôi sẽ, nhưng tôi không có kiến ​​thức hay kinh nghiệm nào về vấn đề này, vì vậy tôi không thể đưa ra lời giải thích thỏa đáng (tôi cũng có thể, nhưng những người khác có thể làm tốt hơn nhiều) Lý do duy nhất tôi biết liên kết là bởi vì tôi biết tên của hình dạng từ Blender ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/iêu )
Luke San Antonio Bialecki

việc tạo bóng từ một đối tượng 3D được thực hiện hàng ngày, kiểm tra ánh xạ bóngkhối lượng bóng , nhưng có nhiều thuật toán tạo bóng hơn
ratchet freak

Đó không phải là cái bóng mà tôi đang tìm cách tạo ra, nó là vật thể. Chúng tôi sẽ in 3D.
dùng88794

Câu trả lời:


5

Đế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.

Bootstrapping hình dạ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:

nhựa thông

Ví dụ: các điểm kế hoạch Z là (a, b là độ dài hình chữ nhật):

  • (+ a, + b, 0)
  • (-a, + b, 0)
  • (+ a, -b, 0)
  • (-a, -b, 0)

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

Tinh chỉnh hình dạng

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:

tinh chỉnh khuôn mặt

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.