Jeffrey Cross
Jeffrey Cross

Codebox: สำรวจการเรียกซ้ำด้วยการประมวลผล

การเรียกซ้ำเป็นเทคนิคการเขียนโปรแกรมที่สำคัญที่ปล่อยให้ตัวเองมีความหลากหลายของพื้นที่ไม่น้อยที่จะสร้างภาพภาพที่น่าสนใจ โดยย่อการเรียกซ้ำเป็นเทคนิคในการแบ่งปัญหาที่ซับซ้อนออกเป็นรุ่นเล็กและง่ายกว่าของตัวเอง (ซึ่งเรียกว่า "ขั้นตอนแบบเรียกซ้ำ") จนกว่าปัญหานั้นจะแก้ปัญหาเล็กน้อย (กรณีเล็กน้อยนี้เรียกว่า "ฐานคดี") Codebox นี้เป็นภาพร่างที่หลากหลายที่จะช่วยให้คุณสำรวจเทคนิคที่สนุกและน่าสนใจโดยใช้แนวคิดเชิงเรขาคณิตอย่างง่าย

ศิลปินหลายคนใช้ธีมซ้ำในงานของพวกเขา Escher และ Rene Magritte ภาพร่างแรกนี้แสดงวิธีการสร้างภาพในสไตล์ของ Piet Mondrian ซึ่งเป็นที่รู้จักกันดีที่สุดในการจัดองค์ประกอบรูปสี่เหลี่ยมผืนผ้าสีสันสดใส

โปรแกรมต่อไปนี้ใช้การเรียกซ้ำเพื่อสร้าง faux-Mondrian เคสพื้นฐานนั้นง่าย: คุณวาดสี่เหลี่ยมที่เติมเต็มด้วยขอบสีดำหนา สีของสี่เหลี่ยมผืนผ้าถูกเลือกจากชุดสีหลักเล็ก ๆ (สีแดงสีขาวสีเหลือง ฯลฯ ) ขั้นตอนแบบเรียกซ้ำคือการแบ่งสี่เหลี่ยมนี้ (และสี่เหลี่ยมที่ตามมาทั้งหมด) ออกเป็นสี่เหลี่ยมเล็ก ๆ 4 รูปโดยเลือกจุดสุ่มในการตกแต่งภายใน รูปต่อไปนี้ควรให้คุณทราบว่ามันทำงานอย่างไร:

ผลลัพธ์จะมีลักษณะดังนี้:

สุดท้ายนี่คือร่าง mondrian.pde:

Piet () function เป็นหัวใจของโปรแกรมและแสดงให้เห็นว่าโปรแกรมแบบเรียกซ้ำส่วนใหญ่ทำงานอย่างไร นี่มันคือ:

// วาดภาพที่ได้แรงบันดาลใจจากมอนเดรียโดยใช้ void piet แบบเรียกซ้ำ (int x0, int y0, int x1, int y1, int N) {ถ้า (N == 0) {// กรณีฐาน - วาดสี่เหลี่ยมสีสันสดใสหนา ขอบสีดำ int sw = 3; // นี่คือความกว้างของลายเส้นสำหรับสีเส้นขอบของสี่เหลี่ยม c [] = {# ff0000, # 00ff00, # 0000ff, # ffff00, #ffffff}; // การเติมสีของ Mondrian colatte (c [int (random (c.length))]); strokeWeight (SW); rect (x0, y0, x1-x0-sw, y1-y0-sw); } else {// ขั้นตอนแบบเรียกซ้ำ - แบ่งสี่เหลี่ยมผืนผ้าปัจจุบันเป็น 4 รูปสี่เหลี่ยมผืนผ้าแบบสุ่มใหม่ int i = int (สุ่ม (x0, x1)); int j = int (สุ่ม (y0, y1)); Piet (x0, y0, I, J, N-1); // piet สี่เหลี่ยมผืนผ้าบนซ้าย (i, y0, x1, j, N-1); // มุมบนขวา piet (x0, j, i, y1, N-1); // piet สี่เหลี่ยมผืนผ้าด้านล่างซ้าย (i, j, x1, y1, N-1); // สี่เหลี่ยมผืนผ้าด้านล่างขวา}}

ฟังก์ชั่นยอมรับ 5 ข้อโต้แย้ง: พิกัดของมุมซ้ายบนของสี่เหลี่ยม (x0 และ y0) พิกัดของมุมขวาล่าง (x1 และ x2) และความลึกแบบเรียกซ้ำปัจจุบัน (N) ฟังก์ชั่นทำสองสิ่งพื้นฐาน ก่อนอื่นจะทำการทดสอบเพื่อดูว่ามันมาถึง“ base case” หรือไม่เมื่อ N = 0 ถ้าเป็นเช่นนั้นสิ่งที่ทำก็คือวาดสี่เหลี่ยมที่สุ่มสีจากจานสีพื้นฐานของ Mondrian (สีแดงความโลภสีน้ำเงินสีเหลือง) และสีขาว) หากไม่ใช่กรณีพื้นฐานก็จะเลือกจุดสุ่ม (i, j) ภายในสี่เหลี่ยมปัจจุบันแล้วโทร Piet () อีก 4 ครั้งผ่านพิกัดต่าง ๆ ที่สร้างสี่เหลี่ยมภายในใหม่ 4 รูป วิธีการ“ หารและพิชิต” นี้ของการมีฟังก์ชั่นที่เรียกตัวเองว่าเป็นจุดเด่นของการเรียกซ้ำ

กระบวนการแบบเรียกซ้ำง่าย ๆ มักใช้เพื่อสร้างวัตถุที่ดูเป็นธรรมชาติ ตัวอย่างเช่นเราสามารถสร้างต้นไม้ที่ดูเป็นธรรมชาติโดยใช้กระบวนการแบบเรียกซ้ำแบบง่าย ๆ ดังต่อไปนี้โดยที่ "ต้นพืช" แต่ละต้นเริ่มต้นเป็นเส้นตรง บรรทัดนี้จะถูกแทนที่ด้วย "สาขา" ใหม่ที่ประกอบด้วยบรรทัดเดิมบวกสาขาใหม่สลับ 3-4 (จำนวนสาขาที่แน่นอนจะถูกกำหนดโดยตัวแปรที่คุณสามารถตั้งค่า) กระบวนการเดียวกันนี้จะถูกนำไปใช้ซ้ำสำหรับสาขาใหม่แต่ละสาขาจนถึงระดับความลึกที่คุณระบุ รูปต่อไปนี้แสดงให้เห็นถึงแนวคิดพื้นฐาน:

เส้นถูกแสดงเป็นเวกเตอร์ เวกเตอร์ประกอบด้วยจุดกำเนิดที่กำหนดโดยตัวแปร x และ y ความยาวที่กำหนดโดยตัวแปร r และมุมที่กำหนดโดยตัวแปร theta รูปต่อไปนี้แสดงความสัมพันธ์ของตัวแปรเหล่านี้:

ภาพนี้แสดงให้เห็นถึง“ ต้นไม้” ที่เรียบง่ายที่สร้างด้วยกระบวนการพื้นฐานนี้:

นี่คือภาพร่าง plant.pde:

ในที่สุดฉันก็สะเพร่าโดยไม่แสดงเส้นโค้งของเกล็ดหิมะซึ่งเป็นหนึ่งในบุคคลที่รู้จักกันดีที่สุด ตัวฐานเป็นสามเหลี่ยมง่าย จากนั้นขอบแต่ละอันจะถูกแทนที่ด้วยชุดใหม่ของส่วนของเส้น 4 เส้นที่มีความยาว 1/3 ของเส้นเดิม จากนั้นคุณจะแทนที่แต่ละเซ็กเมนต์ใหม่เหล่านี้ด้วยเซ็กเมนต์ 4 บรรทัดใหม่ (ขั้นตอนแบบเรียกซ้ำ) รูปต่อไปนี้ควรให้แนวคิดพื้นฐานของกระบวนการ:

ผลลัพธ์มีลักษณะเช่นนี้:

นี่คือภาพร่าง snowflake.pde โปรดทราบว่าคุณจะต้องมีไลบรารีที่มีส่วนควบคุมของPP5เพื่อเปลี่ยนความลึกแบบเรียกซ้ำ (มักเรียกว่า N) เพื่อดูว่ามันมีผลต่อภาพอย่างไร (น่าเสียดายที่ฉันต้อง จำกัด ความลึกซ้ำสูงสุดถึง 6 ไม่ใช่อินฟินิตี้เนื่องจากห้องสมุดไม่รองรับแถบเลื่อนที่ขยายออกไปนอกหน้าจอมอนิเตอร์ของคุณและไปไกลสุดของจักรวาลที่รู้จัก)

เพิ่มเติม: ตรวจสอบคอลัมน์ Codebox ทั้งหมด

ใน Maker Shed:


เริ่มต้นใช้งานการประมวลผลเรียนรู้การเขียนโปรแกรมคอมพิวเตอร์ด้วยวิธีง่าย ๆ ด้วยการประมวลผลภาษาง่าย ๆ ที่ให้คุณใช้รหัสเพื่อสร้างภาพวาดภาพเคลื่อนไหวและกราฟิกแบบอินเทอร์แอคทีฟ หลักสูตรการเขียนโปรแกรมมักเริ่มต้นด้วยทฤษฎี แต่หนังสือเล่มนี้ให้คุณกระโดดเข้าสู่โปรเจ็กต์ที่สร้างสรรค์และสนุกสนาน เหมาะอย่างยิ่งสำหรับทุกคนที่ต้องการเรียนรู้การเขียนโปรแกรมขั้นพื้นฐานและทำหน้าที่เป็นการแนะนำกราฟิกอย่างง่ายสำหรับผู้ที่มีทักษะการเขียนโปรแกรมบางอย่าง

หุ้น

แสดงความคิดเห็น