मैं शायद यह कैसे करूं, इसलिए मैं कुछ कला नियंत्रण बनाए रख सकता हूं और संभावित रूप से इसे सिर्फ एक बार प्राप्त करने के लिए एक प्रक्रियात्मक पद्धति को मोड़ने की कोशिश में लंबा समय नहीं बिताना चाहिए।
सबसे पहले, मैन्युअल रूप से अपनी कला "पूल" के रूप में चाय पत्ती के थक्कों के कई स्प्राइट बनाएं - प्रत्येक एक पूरे कप के चाय के पत्तों के रूप में नहीं, बल्कि एक छोटे समूह की तरह। कहो, उनमें से 20 या तो?
फिर उनमें से एक यादृच्छिक संख्या को "कप" बेस पर यादृच्छिक निर्देशांक पर रखें। प्रत्येक एक यादृच्छिक रोटेशन और स्केल प्लस यादृच्छिक क्षैतिज और / या ऊर्ध्वाधर मिररिंग दें। यह एक अच्छा परिणाम बनाने के लिए चाहिए।
यह दृष्टिकोण आपको व्यक्तिगत क्लंप बनाने के लिए कलात्मक स्वतंत्रता देगा, जबकि आप चाहते हैं कि विभिन्न प्रकार के परिणामों की अनुमति हो (जैसा कि चुनने के लिए पर्याप्त स्प्राइट्स मानते हुए)।
इसके अतिरिक्त, इस (और पेरलिन शोर सहित किसी भी यादृच्छिक विधि) के साथ, आप वास्तव में प्रतिलिपि प्रस्तुत करने योग्य परिणाम बनाने के लिए एक ज्ञात बीज के साथ प्रक्रिया की शुरुआत में यादृच्छिक संख्या जनरेटर को बीज कर सकते हैं। यदि आप बीज को बचाते हैं, तो आप अनुक्रम शुरू होने से ठीक पहले फिर से उसी पैटर्न को फिर से बनाने में सक्षम हैं। आप मजेदार चीजें भी कर सकते हैं जैसे कि उनके नाम में कोई व्यक्ति टाइप करता है, अक्षरों को एक संख्या (राशि ASCII, आदि) में बदल दें, फिर बीज का उपयोग उस प्रकार के रूप में करें "यह चाय पत्ती पैटर्न आपके लिए अनुकूलित है!" चीज़।
यहाँ कुछ छद्मकोड है, जो मेरा मतलब है, अगर यह मदद करता है ...
var sprites = [...]; // Array of tea leaf sprites
var n_leaves = rand(5)+5; // Random number of leaves from 5-9
for (i=0; i<n_leaves; i++) {
var sprite_index = rand(sprites.length); // Random sprite index
var r = rand(CUP_DIAMETER); // Random radius for point on disk calc
var theta = rand(2*PI); // Random theta (rotation) for point on disk
var sprite_x = sqrt(r) * cos(theta); // Sprite X
var sprite_y = sqrt(r) * sin(theta); // Sprite Y
var sprite_rotation = rand(2*PI); // Sprite rotation
var sprite_scale = rand(1) + 0.5; // Sprite scale from 0.5 to 1.5
var sprite_h_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror horizontally
var sprite_v_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror vertically
draw_sprite(sprite_index, sprite_x, sprite_y, sprite_rotation, sprite_h_mirror, sprite_v_mirror);
}
एक डिस्क में एक यादृच्छिक बिंदु कैसे चुनें और मैं उस पूरे sqrt / sin / cos चीज़ का उपयोग क्यों कर रहा हूं, इस बारे में एक महान चर्चा के लिए http://mathworld.wolfram.com/DiskPointPicking.html देखें ।