Jeffrey Cross
Jeffrey Cross

कोडबॉक्स: एक फ्रैक्टल मेनेजर बनाएं

विकिपीडिया के अनुसार, एक भग्न, एक "खुरदरी या खंडित ज्यामितीय आकृति है, जिसे भागों में विभाजित किया जा सकता है, जिनमें से प्रत्येक (कम से कम लगभग) पूरी की एक कम आकार की प्रति है।" भग्न के बारे में एक अच्छी बात यह है कि। वे वास्तव में जटिल प्रक्रियाओं का उपयोग करते हैं, वास्तव में जटिल, प्राकृतिक दिखने वाली वस्तुओं को बनाने के लिए, जैसे कि पौधे, बादल, लपटें, और आगे। यह कोडबॉक्स आपको दिखाएगा कि भग्न की कुछ अलग शैलियों को देखने के लिए एक फ्रैक्शनल मेनैगरी कैसे बनाई जाए:

जिस तरह से, हम प्रसंस्करण के साथ शुरू होने के अध्याय 9 में शुरू की गई वस्तु-उन्मुख प्रोग्रामिंग (ओओपी) अवधारणाओं पर विस्तार करना जारी रखेंगे, साथ ही साथ यह भी बताएंगे कि अन्य भाषाओं में उपयोग किए जाने वाले परिचित जीयूआई नियंत्रण बनाने के लिए महान कंट्रोलपी 5 लाइब्रेरी का उपयोग कैसे करें। ।

IFS भग्न

Iterated फ़ंक्शन सिस्टम, या IFS, प्राकृतिक दिखने वाले भग्न बनाने के लिए सबसे सरल तकनीकों में से एक है। IFS में कुछ मुट्ठी भर रूपांतरण (एक सेकंड में इन पर अधिक) होते हैं जो एक बिंदु को दूसरे में बदलने का वर्णन करते हैं। ब्लैक स्प्लेनवॉर्ट (एक प्रकार का फ़र्न) की तरह दिखने वाला बार्न्सले फ़र्न एक IFS भग्न का क्लासिक उदाहरण है, लेकिन कई किस्में हैं। लैरी रिडल ने अपने IFS सिस्टम पेज पर दूसरों का एक अच्छा ब्रेकडाउन किया है।

तकनीक इस तरह काम करती है। एक बिंदु से शुरू, आमतौर पर (0,0), आप बेतरतीब ढंग से IFS प्रणाली बनाने वाले परिवर्तनों में से एक को लागू करते हैं। फिर, एक बार जब आपके पास नया, परिवर्तित बिंदु होता है, तो आप इसे स्क्रीन पर प्लॉट करते हैं, जो प्रसंस्करण में, हम साथ करते हैं सेट() आदेश। उसके बाद, आप प्रक्रिया को फिर से उस बिंदु से शुरू करते हैं जिसे आपने अभी गणना की है।

कुछ सौ पुनरावृत्तियों के बाद, आप फ़र्न की एक भूतिया रूपरेखा देखना शुरू करेंगे। 100,000 पुनरावृत्तियों के बाद, आपको एक विस्तृत छवि दिखाई देगी जो लगभग एक प्राकृतिक वस्तु की तरह दिखाई देती है। निम्न छवि Barnsley फ़र्न के लिए IFS प्रणाली को दिखाती है, साथ ही वह छवि जिसके परिणामस्वरूप आप बार-बार प्रक्रिया को लागू करते हैं।

आइए विवरणों को थोड़ा और अनपैक करें। एक परिवर्तन एक सूत्र है ... जो, एक बिंदु को दूसरे बिंदु में बदल देता है। प्रसंस्करण के साथ शुरू होने के पृष्ठ 104 पर वर्णित ट्रांसलेशन, रोटेट और स्केल ट्रांसफ़ॉर्मेशन की तरह, IFS सिस्टम में परिवर्तन ट्रांसफ़ॉर्मेशन मैट्रिक्स को लागू करके एक नए स्थान पर एक बिंदु बनाते हैं, जो कि फ़ार्मुलों के सेट का प्रतिनिधित्व करने का एक संक्षिप्त तरीका है ।

IFS सिस्टम को परिभाषित करने वाली तालिका मैट्रिसेस में उपयोग किए गए मान प्रदान करती है। एक मैट्रिक्स में विभिन्न तत्वों को कॉलम, बी, डी, डी, ई, और एफ दर्शाते हैं। (मैं कॉलम पी के बारे में एक सेकंड में बात नहीं करूंगा।) अगला आंकड़ा दिखाता है कि IFS प्रणाली में एक पंक्ति को मैट्रिक्स में कैसे अनुवाद किया जाए:

एक उदाहरण के रूप में, यहां बार्न्सले फ़र्न के लिए 3 परिवर्तन मैट्रिक्स है जो पहले दिखाया गया था:

IFS मैट्रिक्स, पी में अंतिम कॉलम, उस आवृत्ति का प्रतिनिधित्व करता है जिसके साथ परिवर्तन का चयन किया जाता है। इसलिए, बार्न्सले फ़र्न के लिए, परिवर्तन F1 को समय का 1% चुना जाता है, f2 को 85% समय चुना जाता है, और f3 और f4 प्रत्येक चयनित 7% समय होते हैं। यदि यह थोड़ा भ्रामक है, तो सोचें कि क्या आपने 100 मार्बल्स के साथ एक बैग भरा है, प्रत्येक ने इनमें से एक फ़ंक्शन के साथ लेबल किया है। आपके पास f4 के लिए 1 संगमरमर, f2 के लिए 85, f3 के लिए 7 और f4 के लिए 7 संगमरमर हैं। प्रत्येक पुनरावृत्ति पर, आप बेतरतीब ढंग से बैग से एक संगमरमर को पकड़ते हैं, इसके लेबल को देखते हैं, संबंधित परिवर्तन को लागू करते हैं, और फिर वापस बैग में संगमरमर को छोड़ देते हैं।

controlP5

अब जब आप IFS फ़्रैक्टल्स के मूल विचार को समझ गए हैं, तो आइए, कंट्रोलपी 5 पर एक त्वरित नज़र डालते हैं, एंड्रियास श्लेगल द्वारा कोड लाइब्रेरी, जो इनकी तरह परिचित उपयोगकर्ता इनपुट नियंत्रण बनाने के लिए है:

हम ड्राइंग बनाने के लिए उपयोग किए जाने वाले पुनरावृत्तियों की संख्या सेट करने के लिए उपयोगकर्ता को अनुमति देने के लिए "घुंडी" नियंत्रण का उपयोग करने जा रहे हैं, और "रेडियो" नियंत्रण का चयन करने के लिए जिसे IFS प्रणाली प्रदर्शित करना है।

इससे पहले कि हम अपने स्केच में पुस्तकालय का उपयोग कर सकें, हमें इसे स्थापित करना होगा। पहला कदम यह सुनिश्चित करना है कि आपके पास अपनी स्केचबुक निर्देशिका में "पुस्तकालयों" नामक एक निर्देशिका है। आप संसाधन की प्राथमिकताएँ विंडो खोलकर स्केचबुक निर्देशिका पा सकते हैं। आप शीर्ष पर निर्देशिका का नाम देखेंगे:

आपके द्वारा मुख्य निर्देशिका स्थित करने के बाद, विंडो के एक्सप्लोरर, मैक के खोजक या UNIX के भरोसेमंद टर्मिनल जैसे टूल का उपयोग करें, यह देखने के लिए कि क्या "लाइब्रेरी" नामक एक उपनिर्देशिका है, यदि ऐसा है, तो आप सभी सेट हैं। यदि नहीं, तो उपनिर्देशिका बनाएं (इसे "पुस्तकालयों" का नाम देना सुनिश्चित करें)।

इसके बाद, आप controlP5 स्थापित करने के लिए तैयार हैं। कंट्रोलपी 5 मुख्य पृष्ठ पर जाएं और लाइब्रेरी के नवीनतम संस्करण को डाउनलोड करने के लिए लिंक पर क्लिक करें। (आपको स्क्रीन के शीर्ष, हरे रंग के बॉक्स में लिंक मिलेगा।) एक बार फ़ाइल डाउनलोड करने के बाद, इसे अनइंस्टॉल करें, और फ़ाइलों को अपने "पुस्तकालयों" उपनिर्देशिका में कॉपी करें। प्रसंस्करण को पुनरारंभ करें, और आपको "स्केच -> आयात लाइब्रेरी" मेनू आइटम के तहत लाइब्रेरी दिखाई देनी चाहिए।

लाइब्रेरी स्थापित होने के बाद, प्रोसेसिंग पुनः आरंभ करें। अब हम इस बारे में थोड़ी सी बात करने के लिए तैयार हैं कि परियोजना का आंशिक पक्ष क्या है।

स्केच सेट करें

वाह! यह बहुत सारी अवलोकन सामग्री थी, लेकिन अब जब नियंत्रण 5 स्थापित हो गया है तो हम पहले वर्णित IFS प्रणाली को लागू करने के लिए प्रसंस्करण का उपयोग करने के लिए तैयार हैं। प्रसंस्करण शुरू करें, और फिर पाठ संपादक में निम्न कोड पेस्ट करें। (हमेशा की तरह, आप या तो निम्न बॉक्स में सभी कोड को हाइलाइट कर सकते हैं और फिर ctrl_c को हिट कर सकते हैं, या आप controlp5_fractals.pde पर इस लिंक पर क्लिक कर सकते हैं और फिर ctrl + a, ctrl + संयोजन का उपयोग कर सकते हैं।) यहाँ कोडबॉक्स है:

उदाहरण के माध्यम से जाने पर आपके द्वारा संभवतः एक चीज़ देखी जाएगी: इसमें फ़ाइल के अंत में कई वर्ग परिभाषाएँ हैं। लक्ष्य के अंतिम कोडबॉक्स, स्वात और (सरणी सूची) में, हम सभी वर्गों को अलग-अलग टैब में रखते हैं। लेकिन, यह आवश्यक नहीं है - यह पूरी तरह से उन सभी को एक ही फ़ाइल में गांठ करने के लिए ठीक है, जैसे मैंने यहां किया है। यदि आप उन्हें अलग टैब में विभाजित करना चाहते हैं, तो बस फ़ाइल को कक्षा के समान नाम देना सुनिश्चित करें।

कोड को फायर करें और आपको इस पोस्ट की शुरुआत में वीडियो के समान कुछ देखना चाहिए। आप विभिन्न IFS भग्न में से किसी एक को चुनने के लिए रेडियो बटन पर क्लिक कर सकते हैं, और पुनरावृत्तियों की संख्या निर्धारित करने के लिए घुंडी नियंत्रक का भी उपयोग कर सकते हैं।

विचार-विमर्श

कोड तीन वर्गों को परिभाषित करता है जो परियोजना के लिए बिल्डिंग ब्लॉक के रूप में कार्य करते हैं:

  • रूपांतरण वर्ग। यह वर्ग परिवर्तन मैट्रिक्स में शामिल सभी गणित करता है। अधिकांश कोड केवल सभी चर को संग्रहीत करने के लिए समर्पित है। evalX () तथा evalY () आपके द्वारा पास किए जाने वाले बिंदु के लिए नया X और Y निर्देशांक लौटाता है।
  • IFS वर्ग। यह वर्ग IFS डेटा संरचनाओं को लागू करता है। इसमें एक ArrayList of Transform कक्षाएं होती हैं, जिन्हें बुलाया जाता है tranforms, ArrayList कहा जाता है उन परिवर्तनों की आवृत्ति वितरण का प्रतिनिधित्व करने के लिए हिस्टोग्राम (हमारे पहले के सादृश्य को विस्तार देते हुए, यह हम से यादृच्छिक परिवर्तन का चयन करने के लिए उपयोग किए जाने वाले मार्बल का बैग है) और एक विवरण। प्रमुख विधियाँ हैं: हैं addTransform (), जो एक नया ट्रांसफ़ॉर्म जोड़ता है परिवर्तन सूची; addHistogram (), जो एक नया "संगमरमर" जोड़ता है हिस्टोग्राम ट्रांसफॉर्मेशन के आधार पर आवृत्ति वितरण पी मूल्य; तथा selectRandomTransform (), जिसका उपयोग यादृच्छिक वितरण में निर्दिष्ट आवृत्ति वितरण के आधार पर परिवर्तनों में से एक का चयन करने के लिए किया जाता है हिस्टोग्राम सारणी सूची।
  • बिंदु वर्ग। एक्स धारण करता है और y भग्न में बिंदुओं के लिए समन्वय करता है।

हम मुख्य कार्यक्रम में विभिन्न तरीकों से इन वर्गों का उपयोग करते हैं। सबसे पहले, कोड के सबसे विशिष्ट भाग में क्या है, हम उन विभिन्न भग्नों को परिभाषित करने के लिए IFS और ट्रांसफ़ॉर्म का उपयोग करते हैं जिन्हें हम प्रदर्शित करना चाहते हैं। उदाहरण के लिए, यहाँ बार्न्सली फ़र्न बनाने का कोड है:

c = नया IFS ("क्लासिक बार्न्सली फ़र्न"); c.addTransform (नया ट्रांसफ़ॉर्म (0.0, 0.0, 0.0, 0.16, 0.0, 0.0, 0.01)); c.addTransform (नया ट्रांसफ़ॉर्म (0.85, 0.04, -0.04, 0.85, 0.0, 1.6, 0.85)); c.addTransform (नया ट्रांसफ़ॉर्म (0.2, -0.26, 0.23, 0.22, 0.0, 1.6, 0.07)); c.addTransform (नया ट्रांसफ़ॉर्म (-0.15, 0.28, 0.26, 0.24, 0.0, 0.44, 0.07)); patterns.add (ग);

और, यहाँ ड्रैगन वक्र को परिभाषित करने के लिए कोड है:

c = नया IFS ("ड्रैगन"); c.addTransform (नया ट्रांसफ़ॉर्म (0.5, -0.5, 0.5, 0.5, 0.0,0.0, .50)); c.addTransform (नया ट्रांसफ़ॉर्म (-0.5, -0.5,0.5, -0.5,1.0,0.0, 0.50)); patterns.add (ग);

अगला, हम नियंत्रण पी 5 नॉब और रेडियो बटन सेट करते हैं। इसके लिए 2 भागों के चरणों की आवश्यकता होती है। में पहला होता है सेट अप() विधि, जहां स्केच में दो नियंत्रण जोड़े जाते हैं। घुंडी जोड़ना काफी सीधा है, और केवल एक पंक्ति की आवश्यकता है:

iterationKnob = controlP5.addKnob ("iterationKnob", N_MIN, N_MAX, N, 10,10,50);

रेडियो बटन के लिए बस थोड़ा अधिक कोड की आवश्यकता होती है क्योंकि नियंत्रण को जोड़ने के अलावा, हमें उन वस्तुओं को भी जोड़ना होगा जिन्हें चुना जा सकता है। यह IFS पैटर्न के ArrayList के माध्यम से लूपिंग और फिर उपयोग करके किया जाता है विवरण रेडियो बटन में चयन आइटम के रूप में क्षेत्र। यहाँ कोड है:

ifsRadio = controlP5.addRadio ("ifsSelect", 70,10); for (int i = 0; i <pattern.size (); i ++) {IFS p = (IFS) pattern.get (i); ifsRadio.add (p.description, i); }

कंट्रोलपी 5 लाइब्रेरी का उपयोग करने का दूसरा भाग स्थापित करना है कार्रवाई के तरीके जब उपयोगकर्ता नियंत्रण के साथ सहभागिता करता है तो ट्रिगर हो जाता है। कुंजी उस विधि को वही नाम देने के लिए है जिसका उपयोग * विवरण * के रूप में किया जाता है जब आपने नियंत्रण जोड़ा था, नियंत्रण के उदाहरण चर का नाम नहीं। उदाहरण के लिए, जब हमने जोड़ा है ifsRadio नियंत्रण, हमने उपयोग किया ifsSelect वर्णन के रूप में। इसका मतलब है कि हमें एक संबंधित विधि की आवश्यकता होगी ifsSelect () उपयोगकर्ताओं को नियंत्रण पर किए गए किसी भी क्लिक को प्राप्त करने के लिए। इस विधि में एक पैरामीटर भी होना चाहिए जो नियंत्रण के वर्तमान मूल्य को धारण करेगा।

तो, के लिए ifsSelect () विधि, हमारे पास एक पैरामीटर है जो हमें उस सूची आइटम का सूचकांक बताएगा जो अभी चुना गया था। फिर हम सही IFS पैटर्न को पुनः प्राप्त करने के लिए उस इंडेक्स का उपयोग करेंगे और इसे प्रदर्शित होने वाला वर्तमान बना देंगे। निम्नलिखित चित्र नाटक के सभी तत्वों को संक्षेप में प्रस्तुत करता है। (ControlP5 नियंत्रण सभी कामों को थोड़ा अलग तरीके से करता है, लेकिन साइट के महान उदाहरण हैं कि उन सभी का उपयोग कैसे किया जाए।)

पहेली का अंतिम टुकड़ा पहेली है makeIFS () विधि, जो भग्न बनाने के लिए आवश्यक वास्तविक गणना करता है। क्योंकि IFS सिस्टम बहुत खूबसूरत हैं, इसलिए वास्तव में कहने के लिए बहुत कुछ नहीं है। हम बस चर में निर्दिष्ट पुनरावृत्तियों की संख्या के माध्यम से लूप करते हैं एन (जिसका मूल्य द्वारा निर्धारित किया गया है iterationKnob () विधि), वर्तमान IFS प्रणाली (जिसका मूल्य में सेट किया गया है) से एक परिवर्तन को बाहर निकालें ifsSelect () विधि), और फिर प्रत्येक बिंदु को पॉइंट ऑब्जेक्ट की सरणी में जोड़ें। हम एक्स और वाई मूल्यों की सीमाओं का भी ध्यान रखते हैं ताकि हम ड्राइंग क्षेत्र को भरने के लिए छवि को स्केल कर सकें।

अधिक: सभी कोडबॉक्स कॉलम देखें

निर्माता शेड में:


प्रसंस्करण के साथ शुरू करना कंप्यूटर प्रोग्रामिंग को प्रसंस्करण के साथ आसान तरीका सीखें, एक सरल भाषा जो आपको ड्रॉइंग, एनीमेशन और इंटरैक्टिव ग्राफिक्स बनाने के लिए कोड का उपयोग करने देती है। प्रोग्रामिंग पाठ्यक्रम आमतौर पर सिद्धांत से शुरू होते हैं, लेकिन यह पुस्तक आपको रचनात्मक और मजेदार परियोजनाओं में सही कूदने देती है। यह उन लोगों के लिए आदर्श है जो बुनियादी प्रोग्रामिंग सीखना चाहते हैं, और कुछ प्रोग्रामिंग कौशल वाले लोगों के लिए ग्राफिक्स के लिए एक सरल परिचय के रूप में कार्य करता है।

शेयर

एक टिप्पणी छोड़