आइए एक यादृच्छिक हिमपात का अनुकरण करें


10

मैंने https://mathematica.stackexchange.com/ पर यह प्रश्न देखा और मुझे लगता है कि यह बहुत अच्छा है। आइए अन्य प्रोग्रामिंग भाषाओं के साथ स्नोफ्लेक बनाएं।

यह मूल प्रश्न का एक उद्धरण है:

'तीस का मौसम ... और यह समय आ गया है जब मैंने गणितज्ञ स्टाॅक एक्सचेंज पर अपना पहला प्रश्न रखा। तो, यहाँ आप के लिए एक छुट्टी खोज ग्राफिक्स (और पी-केम?) गुरु है।

(रैंडम) स्नोफ्लेक उत्पन्न करने के लिए आपका सबसे अच्छा कोड क्या है? यादृच्छिक रूप से मेरा मतलब विभिन्न आकृतियों से है जो वास्तविक बर्फ के टुकड़ों द्वारा प्रदर्शित विविधता की नकल करेंगे। यहाँ एक विचार रखने के लिए एक कड़ी है: http://www.its.caltech.edu/~atomic/snowcrystals/ , और अधिक विशेष रूप से यहाँ विभिन्न प्रकार के स्नोफ्लेक्स हैं: http://www.its.caltech.edu/~atomic /snowcrystals/class/class.htm । यहां हम एकल स्नोफ्लेक उत्पन्न करने की कोशिश कर रहे हैं (संभवतः इसके आकार को ट्यून करने के लिए विभिन्न मापदंडों के साथ), अधिक यथार्थवादी, बेहतर। पारभासी और रंगों को जोड़ने के लिए तीन आयामी रेंडरिंग का भी स्वागत है। अपनी कल्पना को उजागर करें, सामान्य भग्न से परे जाएं!

नियम:

  • एक यादृच्छिक एकल हिमपात का एक खंड उत्पन्न करें।
  • परत छह गुना रेडियल समरूपता होनी चाहिए।
  • यह यथार्थवादी होने की जरूरत नहीं है। (लेकिन)
  • एकल वर्ण उत्तर, जैसे *, ⚹, answers, *, * की अनुमति नहीं है।
  • सबसे ऊपर उठता है जीत!

3
बेहतर एकल चरित्र आउटपुट को पसंद नहीं करता है '*⚹❅❄❆'[Math.floor(Math.random()*5)]
मैनटवर्क

1
@ nitro2k01: आप महसूस करते हैं कि उन्होंने उस सटीक गणितज्ञ का उल्लेख किया है । पोस्टिंग के पहले ही वाक्य में साइट सही है?
काइल कानोस

अरे! माफ़ करना। मैंने ईमानदारी से नियमों को सही तरीके से छोड़ दिया।
नाइट्रो 2k01

जवाबों:


14

बैश और इमेजमैजिक

#!/bin/bash

third=()
x=90
y=90
while (( x>10 )); do
  (( dx=RANDOM%10 ))
  while :; do (( dy=RANDOM%21-10 )); (( y-dy<95 )) && (( y-dy>(x-dx)/2 )) && break; done
  third+=(
    -draw "line $x,$y $(( x-dx )),$(( y-dy ))"
    -draw "line $x,$(( 200-y )) $(( x-dx )),$(( 200-y+dy ))"
    -draw "line $(( 200-x )),$y $(( 200-x+dx )),$(( y-dy ))"
    -draw "line $(( 200-x )),$(( 200-y )) $(( 200-x+dx )),$(( 200-y+dy ))"
  )
  (( x-=dx ))
  (( y-=dy ))
done

third+=(
  -draw "line 90,90 90,110"
  -draw "line $x,$y 15,100"
  -draw "line $x,$(( 200-y )) 15,100"
  -draw "line 110,90 110,110"
  -draw "line $(( 200-x )),$y 185,100"
  -draw "line $(( 200-x )),$(( 200-y )) 185,100"
  -draw 'color 20,100 filltoborder'
  -draw 'color 180,100 filltoborder'
)

convert \
  -size '200x200' \
  xc:skyblue \
  -background skyblue \
  -stroke 'white' \
  -strokewidth 1 \
  -fill 'white' \
  -bordercolor 'white' \
  -fuzz 10% \
  "${third[@]}" \
  -rotate 120 \
  -crop '200x200' \
  "${third[@]}" \
  -rotate 120 \
  -crop '200x200' \
  "${third[@]}" \
  -draw 'ellipse 100,100 15,15 0,360' \
  x:

नमूना रन:

bash-4.1$ for i in {1..30}; do ./showflake.sh "showflake-$i.png"; done

bash-4.1$ montage showflake-*.png x:

स्नोफ्लेक मोंटाज


5

जावास्क्रिप्ट

यहां स्थित फिडल

अधिक फैंसी फेल्ड यहां स्थित है

यह गोल्फ नहीं है, लंबे शॉट से नहीं। इसके अलावा पेरलिन शोर समारोह और रैंडम रैंडम की आवश्यकता होती है (दोनों फिडल में शामिल हैं, पेरलिन के लिए रैंडम रैंडम की जरूरत है)। फिडल भी पसंदीदा ट्रैक रखने के लिए वर्तमान बीज प्रदर्शित करता है;)

function DoFlake(canvas){
    var width = canvas.width;
    var height = canvas.height;

    var ctx = canvas.getContext('2d');
    var thing = document.createElement('canvas'); thing.width = 128; thing.height = 32;
    var thingctx = thing.getContext('2d');
    var noise = new ImprovedPerlin((new Date()).getTime());

    var wDiv = 1/64;
    var y = 7/32;
    var z = 2/11;

    for(var x = 0; x < 128; x++){
        var h = 32 - (x * 32 / 128);
        h += 16 * noise.Noise(4 * x * wDiv, y, z);
        h += 8 * noise.Noise(8 * x * wDiv, y, z);
        h += 4 * noise.Noise(16 * x * wDiv, y, z);
        h += 2 * noise.Noise(32 * x * wDiv, y, z);
        h += 1 * noise.Noise(64 * x * wDiv, y, z);

        thingctx.fillRect(x, 0, 1, h);
    }

    ctx.translate(128,128);
    var angle = Math.PI / 3;
    for(var i = 0; i < 6; i++){
        ctx.rotate(angle);
        ctx.drawImage(thing, 0, 0);
        ctx.scale(1, -1)
        ctx.drawImage(thing, 0, 0);
        ctx.scale(1, -1);
    }
}

0

ZXSpectrum बेसिक, 21

ठीक है, मैं 6 गुना समरूपता नहीं कर सकता, लेकिन मैं यादृच्छिकता के सभी प्रकार प्राप्त कर सकता हूं

ZX स्पेक्ट्रम का उपयोग: एमुलेटर यहाँ

याद रखें कि ZX स्पेक्ट्रम में कीवर्ड एक एकल वर्ण हैं

OVER 1
PLOT 40,40
DRAW 40,40,RND*5000

एमुलेटर पर इन कमांड को दर्ज करने के लिए:

TAB ,1 ENTER
क्यू 40,40 ENTER
डब्ल्यू 40,40, TAB tCTRL+ B5000ENTER

(क्या आपको स्पेक्ट्रम कीबोर्ड पसंद नहीं है)


यह काम नहीं करता। यह या तो "बी इंटेगर ऑफ रेंज, 0: 1" को आउटपुट करता है या कुछ अजीब डोनट आकार प्रदान करता है।
लार्स एबर्ट

स्पेक्ट्रम कोड के बारे में बुरी बात यह है कि प्लॉट कभी-कभी स्क्रीन स्पेस की न्यूनतम मात्रा से अधिक हो जाते हैं। अलग-अलग पैटर्न और आकार प्राप्त करने के लिए ड्रा में तीसरा नंबर बदलें
SeanC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.