มีความรู้เกี่ยวกับอัลกอริทึมที่อนุญาตให้ใช้รูปเช่นนี้หรือไม่?


9

ไม่มีใครรู้วิธีการสร้างอัลกอริทึมที่สามารถทำให้รูปเหมือนในภาพเมื่อได้รับชุดของคะแนนเฉพาะ (อาร์เรย์ 3D)

ป้อนคำอธิบายรูปภาพที่นี่


4
มันเป็นสิ่งที่เป็นสิ่งที่คุณกำลังมองหา: blog.andreaskahler.com/2009/06/...
ลุคซานอันโตนิโอ Bialecki

3
@LukeSanAntonio โพสต์ที่เป็นคำตอบดังนั้นฉันสามารถ upvote เป็นที่พอพระทัย;) ( แต่ไม่ได้เป็นเพียงการเชื่อมโยงบางคำอธิบายที่น้อยที่สุดของอัลกอริทึมจำเป็นจะต้องมีคำตอบ)
Yannis

1
@YanisRizos ฉันต้องการ แต่ฉันไม่มีความรู้หรือประสบการณ์ในสิ่งนี้ดังนั้นฉันไม่สามารถให้คำอธิบายที่เพียงพอ (ดีฉันทำได้ แต่คนอื่นทำได้ดีกว่า) เหตุผลเดียวที่ฉันรู้ลิงก์คือ เพราะฉันรู้ชื่อของรูปร่างจาก Blender ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/ ...... )
ลุคซานอันโตนิโอเบี

การสร้างเงาจากวัตถุ 3 มิติเสร็จสิ้นทุกวันตรวจสอบการแมปเงาและปริมาณเงาแต่มีอัลกอริธึมการสร้างเงามากขึ้น
ratchet freak

ไม่ใช่เงาที่ฉันต้องการสร้าง แต่เป็นวัตถุทางกายภาพ เรากำลังจะพิมพ์ 3 มิติ
user88794

คำตอบ:


5

มาที่นี่หลังจากการต่อสู้ แต่เนื่องจากยังไม่มีคำตอบที่ยอมรับและเห็นว่า @Luke ปฏิเสธที่จะรับตัวแทนที่เขาสมควรได้รับนี่คือบทสรุปอย่างรวดเร็วของลิงก์ที่เขาให้ไว้

ดังนั้นอัลกอริทึมเต็มสามารถใช้ได้ที่นี่:

http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

ความคิดคือการ bootstrap ตาข่ายของคุณด้วยวิธีที่ง่ายซึ่งจะช่วยให้คุณมีทรงกลมที่มี 20 ใบหน้าและจากนั้นปรับแต่งจนกว่าคุณจะพอใจ

การขุดรูปทรง

คุณเริ่มต้นด้วยฮอว์คิง ตามที่บทความในวิกิพีเดียกล่าวว่าคุณสามารถรับจุดยอดได้โดยการวาดรูปสี่เหลี่ยมผืนผ้าสามอันที่เหมือนกันและมุมฉาก คุณมี 3 รูปสี่เหลี่ยมผืนผ้ามี 4 มุมแต่ละมุม -> 12 จุดยอด

ภาพประกอบ Wikipedia:

ฮอว์คิง

ตัวอย่างเช่นจุดแผน Z คือ (a, b คือความยาวสี่เหลี่ยมผืนผ้า):

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

ตอนนี้คุณยังต้องหา 20 ใบหน้า นี่เป็นแบบฝึกหัดสำหรับผู้อ่าน: p

การปรับรูปร่าง

ตอนนี้คุณมีทรงกลมพื้นฐานแล้วคุณอาจต้องการเพิ่มรูปหลายเหลี่ยม คุณทำได้ด้วยอัลกอริธึมง่ายๆนี้:

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

เพื่อหาจุดกึ่งกลางเราสมมติว่าเราต้องการสร้างทรงกลมหน่วย (ศูนย์ (0, 0, 0), รัศมี 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)

ในการทำซ้ำแต่ละครั้งเราอาจต้องสร้างใบหน้าใหม่ แต่มันค่อนข้างง่าย แต่ละหน้าแบ่งออกเป็นสี่:

ปรับแต่งใบหน้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.