আসুন একটি এলোমেলো তুষারপাত অনুকরণ করা যাক


10

আমি দেখেছি এই প্রশ্নের উপর https://mathematica.stackexchange.com/ এবং আমি মনে করি এটা বেশ ভাল। আসুন অন্যান্য প্রোগ্রামিং ভাষার সাথে স্নোফ্লেক তৈরি করি।

এটি মূল প্রশ্নের একটি উদ্ধৃতি:

'এই মরসুমে ... এবং প্রায় ম্যাথমেটিকা ​​স্ট্যাক এক্সচেঞ্জে আমি আমার প্রথম প্রশ্নটি উত্থাপন করেছি। সুতরাং, এখানে গ্রাফিক্স (এবং পি-কেম?) গুরুদের জন্য আপনার ছুটির খোঁজ রয়েছে।

একটি (এলোমেলো) স্নোফ্লেক তৈরি করার জন্য আপনার সেরা কোডটি কী? এলোমেলোভাবে আমার অর্থ হ'ল বিভিন্ন আকারের সাথে যা প্রকৃত তুষারফ্লাক দ্বারা প্রদর্শিত বৈচিত্রকে নকল করবে। একটি ধারণা পেতে এখানে একটি লিঙ্ক রয়েছে: http://www.its.caltech.edu/~atomic/snowcrystals/ , আরও বিশেষত এখানে বিভিন্ন ধরণের তুষারপাত রয়েছে: http://www.its.caltech.edu/~atomic /snowcrystals/class/class.htm । এখানে আমরা একটি একক তুষারকণা তৈরি করার চেষ্টা করছি (সম্ভবত এটির আকারের সাথে বিভিন্ন প্যারামিটার সহ) আরও বেশি বাস্তববাদী, আরও ভাল। ত্রিমাত্রিক রেন্ডারিংস, স্বচ্ছ এবং রঙ যুক্ত করার জন্যও স্বাগত। আপনার ফ্যান্টাসি প্রকাশ করুন, স্বাভাবিক ফ্র্যাক্টাল ছাড়িয়ে যান!

নিয়মাবলী:

  • এলোমেলো একক স্নোফ্লেক তৈরি করুন।
  • ফ্লেকের ছয়গুণ র‌্যাডিয়াল প্রতিসম হওয়া উচিত।
  • এটি বাস্তবসম্মত হওয়ার দরকার নেই। (তবে পছন্দ করুন)
  • *, ⚹, ❅, ❄, like এর মতো একক অক্ষরের উত্তরগুলির অনুমতি নেই।
  • বেশিরভাগ উজ্জ্বল জয়!

3
একক চরিত্রের আউটপুটগুলি পছন্দ করা ভাল '*⚹❅❄❆'[Math.floor(Math.random()*5)]
manatwork

1
@ নাইট্রো ২ কে ০১: আপনি বুঝতে পেরেছেন যে পোস্টিংয়ের প্রথম বাক্যেই তিনি সেই সঠিক গণিত.এসই সাইটটি উল্লেখ করেছিলেন, তাই না?
কাইল কানোজ

ওহো দুঃখিত. আমি সৎভাবে নিয়ম থেকে ডেকে এলাম।
nitro2k01

উত্তর:


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

জেডএক্সস্পেক্ট্রাম বেসিক, 21

ঠিক আছে, আমি 6 টি ভাঁড়ের প্রতিসাম্যতা করতে পারি না, তবে আমি সমস্ত ধরণের এলোমেলোভাবে পেতে পারি

জেডএক্স স্পেকট্রাম ব্যবহার করে: এমুলেটর এখানে

মনে রাখবেন কীওয়ার্ডগুলি জেডএক্স স্পেকট্রামের একক অক্ষর

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

এমুলেটরটিতে এই আদেশগুলি প্রবেশ করতে:

TAB ,1 ENTER
q 40,40 ডাব্লু ENTER
40,40, TAB tCTRL+ B5000ENTER

(আপনি কেবল বর্ণালী কীবোর্ড ভালবাসেন না)


এটা কাজ করে না. এটি হয় "বি পূর্ণসংখ্যা, 0: 1" এর বাইরে চলে যায় বা কিছু অদ্ভুত ডোনাট আকার দেয়।
লার্স এবার্ট

বর্ণালী কোড সম্পর্কে খারাপ জিনিস হ'ল প্লটগুলি কখনও কখনও পর্দার স্থানের সর্বনিম্ন পরিমাণ ছাড়িয়ে যায়। বিভিন্ন নিদর্শন এবং আকার পেতে ড্রয়ের তৃতীয় নম্বরটি পরিবর্তন করুন
সানসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.