2009-09-29 9 views
15

मैं buddhabrot fractal को लागू करने की कोशिश कर रहा हूं। मैं एक बात समझ नहीं पा रहा हूं: मैंने जिन सभी कार्यान्वयन का निरीक्षण किया है, वे कण से बचने के पथ की गणना करने के लिए छवि पर यादृच्छिक बिंदु चुनते हैं। वे यह क्यों करते हैं? सभी पिक्सल पर क्यों नहीं जाते?बुद्धब्रोट फ्रैक्टल

यादृच्छिक बिंदुओं का क्या उद्देश्य है? अधिक अंक बेहतर चित्र बनाते हैं, इसलिए मुझे लगता है कि सभी पिक्सेल पर जाने से सबसे अच्छी तस्वीर मिलती है - क्या मैं यहां गलत हूं?

400x400 चित्र पर कार्य करना:

अपने परीक्षण आंकड़ों से

। तो अगर मैं पूरी तरह से चला जाता हूं तो 160 000 पिक्सेल फिर से शुरू हो जाएंगे।

यादृच्छिक नमूनाकरण का उपयोग करके, चित्र केवल 1 मिलियन अंक के बाद आकार लेना शुरू कर देता है। अच्छे परिणाम लगभग 1 बिलियन यादृच्छिक बिंदु दिखाते हैं जो गणना करने में घंटों लगते हैं।

+0

आपके संपादन के संबंध में - क्या यह यादृच्छिक नमूनाकरण से परीक्षण डेटा है, या सभी पिक्सल पर जाने के बलपूर्वक बल विधि द्वारा? जबकि मैं यादृच्छिक नमूना तेजी से (औसत पर) होने की अपेक्षा करता हूं, मैं यह देखने के लिए उत्सुक हूं कि अभ्यास में आपके लिए दो तरीकों * वास्तव में * तुलना कैसे करें। – Streklin

+1

मेरी गलती इसका उल्लेख करना भूल गई। यह डेटा यादृच्छिक नमूनाकरण से है। –

+1

हम्म, संख्याएं थोड़ी अजीब लगती हैं - आप अपना यादृच्छिक नमूना कैसे कर रहे हैं - मुझे लगता है कि एक बिलियन अंक के बाद आप कम से कम कुछ बार ब्याज के हर बिंदु पर कब्जा कर लेते थे (हालांकि इसकी कोई गारंटी नहीं है वह) 160, 000 के नमूना सेट से। जब आप ब्रूट फोर्स द्वारा एक बार प्रत्येक पिक्सेल पर जाते हैं तो क्या आपको छवि की एक ही गुणवत्ता मिलती है? एक अरब अंक के बाद – Streklin

उत्तर

31

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

मैं तकनीक का आविष्कारक हूं ताकि आप इस पर भरोसा कर सकें। :-)

1

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

0

यह संभवतः Monte-Carlo method का कुछ प्रकार है, इसलिए हाँ, सभी पिक्सल पर जाकर सही परिणाम मिलेगा लेकिन बहुत समय लेने वाला होगा।

आप इसे क्यों न करें और देखें कि क्या होता है?

+5

मुझे लगता है कि आप और अन्य एक ही अस्पष्ट धारणा पर थोड़ा लटका हुआ है कि शुरुआती बिंदुओं की केवल सीमित संख्या है। पिक्सेल अंक नहीं हैं; वे वर्ग क्षेत्र हैं। किसी दिए गए पिक्सेल के भीतर अलग-अलग बिंदुओं से शुरू होने से काफी अलग ट्रैजेक्टरीज उत्पन्न हो सकते हैं। –

3

लौ फ्रैक्टल के लिए समान है: बुद्ध ब्रॉट "आकर्षण", ढूंढने के बारे में हैं, भले ही आप यादृच्छिक बिंदु से शुरू करते हैं, यह माना जाता है कि इन आकर्षक घटताओं में काफी तेजी से अभिसरण किया जाता है। आप आमतौर पर पुनरावृत्ति में पहले 10 पिक्सल पेंटिंग से बचते हैं या फिर भी, इसलिए शुरुआती बिंदु वास्तव में प्रासंगिक नहीं है, लेकिन, दो बार समान गणना करने से बचने के लिए, यादृच्छिक नमूनाकरण बेहतर होता है। जैसा कि बताया गया है, यह कलाकृतियों के जोखिम को समाप्त करता है।

लेकिन यादृच्छिक नमूनाकरण की सबसे महत्वपूर्ण विशेषता यह है कि इसमें परिशुद्धता के सभी स्तर (सिद्धांत रूप में, कम से कम) हैं। यह फ्रैक्टल के लिए बहुत महत्वपूर्ण है: उनके पास परिशुद्धता के सभी स्तरों पर विवरण है, और इसलिए सभी स्तरों से भी इनपुट की आवश्यकता है।

0

यादृच्छिक नमूना का उपयोग सटीक समाधान के लिए जितना संभव हो सके उतना करीब पाने के लिए किया जाता है, जिसमें इस तरह के मामलों की समस्या की सांख्यिकीय प्रकृति के कारण गणना नहीं की जा सकती है।

आप 'सभी पिक्सल पर जा सकते हैं', लेकिन चूंकि प्रत्येक पिक्सेल वास्तव में आयाम dx * dy के साथ कुछ वर्ग क्षेत्र है, तो आप केवल अपनी गणना के लिए num_x_pixels * num_y_pixels अंक का उपयोग करेंगे और बहुत दानेदार परिणाम प्राप्त करेंगे।

एक और तरीका एक बहुत बड़े संकल्प का उपयोग करना होगा और गणना के बाद प्रस्तुत करना होगा। यह किसी प्रकार का 'व्यवस्थित' प्रस्तुत करेगा जहां अंतिम रेंडर के प्रत्येक पिक्सेल को उप पिक्सेल की बराबर मात्रा में विभाजित किया जाता है।