কেওস গেম খেলুন


28

কেয়স খেলা ফ্র্যাক্টাল জেনারেট করতে একটি সহজ পদ্ধতি। একটি সূচনা পয়েন্ট, একটি দৈর্ঘ্যের অনুপাত আর এবং 2 ডি পয়েন্টের একটি সেট দেওয়া, বারবার নিম্নলিখিতগুলি করুন:

  • আপনার পয়েন্টের সেট থেকে, এলোমেলোভাবে (অভিন্নভাবে) একটি বাছুন।
  • গড় হিসাবে সেই বিন্দু এবং শেষ অঙ্কিত বিন্দু (বা প্রারম্ভিক বিন্দু) আর1 - আর ওজন হিসাবে ব্যবহার করে (অর্থাত্ r = 0 এর অর্থ আপনি সূচনা পয়েন্ট পাবেন, r = 1 এর অর্থ আপনি এলোমেলো পয়েন্ট পেয়েছেন এবং আর = 0.5 এর অর্থ আপনি মাঝামাঝি পয়েন্টটি পান)
  • ফলাফল পয়েন্ট আঁকুন।

উদাহরণস্বরূপ, আপনি যদি একটি সমকোণী ত্রিভুজ এবং r = 0.5 এর শীর্ষ কোণকে বেছে নিয়ে থাকেন তবে প্লট করা পয়েন্টগুলি সিয়েরপিনস্কি ত্রিভুজটি মানচিত্র করবে:

এখানে চিত্র বর্ণনা লিখুন

চিত্র উইকিপিডিয়ায় পাওয়া গেছে

আপনি এমন একটি প্রোগ্রাম বা ফাংশন লিখতে যা বিশৃঙ্খলা তৈরি করতে বিশৃঙ্খলা খেলা "খেল"।

ইনপুট

আপনি কোনও প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন এবং নিম্নলিখিত ইনপুটগুলি এআরজিভি, এসটিডিএন বা ফাংশন যুক্তির মাধ্যমে নিতে পারেন:

  • প্লট করার পয়েন্টের সংখ্যা।
  • প্রারম্ভিক স্থানাঙ্ক (যা প্লটও করতে হবে!)।
  • বিরতিতে গড় ওজন আর [0,1]
  • চয়ন করার জন্য পয়েন্টগুলির একটি তালিকা।

আউটপুট

আপনি স্ক্রিনে রেন্ডার করতে পারেন বা একটি চিত্র ফাইল লিখতে পারেন। ফলাফলটি যদি জরিমানা করা হয় তবে এটি প্রতিটি দিকে কমপক্ষে p০০ পিক্সেল হওয়া দরকার, সমস্ত পয়েন্ট অবশ্যই ক্যানভাসে থাকা উচিত এবং চিত্রের অন্তত 75৫% অনুভূমিক এবং উল্লম্ব পরিধি অবশ্যই পয়েন্টগুলির জন্য ব্যবহার করা উচিত (এটি এড়াতে হবে একটি একক কালো পিক্সেলের উত্তর দিয়ে "এটি সত্যই জুম আউট" saying এক্স এবং ওয়াই অক্ষ একই স্কেলে হতে হবে (যে 0,0 থেকে (লাইন) হল (1,1) একটি 45 ডিগ্রী কৌণিক হতে হবে) এবং প্রতিটি বিন্দু বিশৃঙ্খলার গেমে অঙ্কিত একটি একক হিসাবে প্রতিনিধিত্ব করা আবশ্যক পিক্সেল (যদি আপনার প্লট করার পদ্ধতিটি বিন্দুটিকে অ্যান্টি-এলিয়াস দেয় তবে এটি 2x2 পিক্সেলের উপরে ছড়িয়ে যেতে পারে)।

রঙগুলি আপনার পছন্দ, তবে আপনার কমপক্ষে দুটি স্বতন্ত্র রঙের দরকার: একটি ব্যাকগ্রাউন্ডের জন্য এবং একটি বিশৃঙ্খলা খেলার সময় প্লট করা বিন্দুর জন্য। আপনি কিন্তু ইনপুট পয়েন্ট প্লট করতে হবে না।

আপনার উত্তরে তিনটি আকর্ষণীয় উদাহরণ আউটপুট অন্তর্ভুক্ত করুন ।

স্কোরিং

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।

সম্পাদনা করুন: আপনাকে আর ইনপুট পয়েন্ট প্লট করার দরকার নেই, কারণ সেগুলি এখনও একক পিক্সেল হিসাবে দৃশ্যমান নয়।


" প্রতিটি পয়েন্ট প্লট করা ... একটি সিঙ্গল পিক্সেল হিসাবে অবশ্যই উপস্থাপন করা উচিত " এর অর্থ কী? এটি কি) কোনও অ্যান্টি-এলিয়জিং ব্যবহার করা উচিত নয়; বা খ) যে দ্বিতীয় বর্ণের পয়েন্টের সংখ্যাটি ইনপুট থেকে প্রথম আইটেমের সমান হতে হবে? নোট করুন যে খ) পুনরাবৃত্তি পদ্ধতির কোনও পরীক্ষা না থাকলে গ্যারান্টি দেওয়া অসম্ভব "যদি এই পিক্সেলটি পূর্বের প্লট করা কোনওটির সাথে মিলে যায়?", কারণ যদি এলোমেলো সংখ্যা নির্বাচনকারী একই সারিতে একই সময়ে পর্যাপ্ত সময় নির্বাচন করে তবে অবস্থানটি রূপান্তরিত হবে যে বিন্দু।
পিটার টেলর

@ পিটারটেলর এটি পয়েন্ট হিসাবে লোকেরা বড় বিন্দু ষড়যন্ত্র করা এড়ানোর উদ্দেশ্যে করা হয়েছিল (যেমন ম্যাথমেটিকা ​​ডিফল্টরূপে করে) তবে আমি ইতিমধ্যে লক্ষ্য করেছি যে অ্যান্টি-এলিয়াসিং সোহমের উত্তরে একক পিক্সেল নিশ্চিত করতে কিছুটা সমস্যা সৃষ্টি করে। আমি মনে করি আমি এটিকে "2x2 পিক্সেলের চেয়ে বড় হতে হবে না" এ শিথিল করব, যা সমস্ত অ্যান্টি-এলিয়জিং ঝামেলা coverেকে রাখতে হবে।
মার্টিন এন্ডার

আমি মনে করি আমি কিছু ভুল বুঝেছি: আপনি সর্বদা যে পরিকল্পনা করেছিলেন তার শেষ পয়েন্টটির 'গড়' এবং বর্তমান তালিকার একটি এলোমেলো পয়েন্ট গ্রহণ করবেন। তারপরে আপনি সেই নতুন পয়েন্টটিকে তালিকায় যুক্ত করুন। এটা কি ঠিক? মনে হচ্ছে আপনার যদি একটি 'কোণায়' অনেকগুলি পয়েন্ট থাকে তবে আপনি সেখানে আরও অনেকগুলি পেতে পারেন তবে সেই মেঘ থেকে বেরিয়ে আসার সম্ভাবনা নেই - কমপক্ষে আমার কোডটি সর্বদা একে অপরের নিকটে থাকা পয়েন্টগুলিতে খুব দ্রুত 'রূপান্তরিত' হয় to সত্যিই ছবি উন্নত।
flawr

1
@ ফ্লাওয়ার না, আপনি তালিকায় নতুন পয়েন্টটি যুক্ত করবেন না। তালিকাটি স্থির করে দেওয়া হয়েছে - অ্যালগরিদম কেবল সেই শেষ পয়েন্টটির বিষয়ে চিন্তা করে যা এর আগে তৈরি হয়েছিল।
নাথানিয়েল

ধন্যবাদ, যে অনেক ব্যাখ্যা করে, সম্ভবত প্রশ্নে স্পষ্ট করা উচিত।
flawr

উত্তর:


8

গণিত, 89

f[n_,s_,r_,p_]:=Graphics@{AbsolutePointSize@1,Point@NestList[#-r#+r RandomChoice@p&,s,n]}

f[10000, {0, 0}, .5, {{-(1/2), Sqrt[3]/2}, {-(1/2), -(Sqrt[3]/2)}, {1, 0}}]

গণিত গ্রাফিক্স

কিভাবে এটা কাজ করে

ম্যাথামেটিকাল ইন Graphics[]ফাংশন উৎপন্ন মাপযোগ্য গ্রাফিক্স, আপনি এটা যাই হোক না কেন আকার আপনি কেবল ছবি কোণে টেনে এনে চান রেন্ডার। প্রকৃতপক্ষে, প্রদর্শিত সমস্ত গ্রাফিক্সের প্রাথমিক আকার হ'ল ".ini" সেটিংস যা আপনি 600 বা আপনার ইচ্ছার অন্য কোনও মান নির্ধারণ করতে পারেন। সুতরাং 600x600 প্রয়োজনীয়তার জন্য বিশেষ কিছু করার দরকার নেই।

AbsolutePointSize[]জিনিস নির্দিষ্ট করে যে বিন্দু আকার ছবির আকার enlarging দ্বারা পরিবর্তন করা হবে না।

মূল কনস্ট্রাক্ট হ'ল

 NestList[#-r#+r RandomChoice@p&,s,n]

বা অ-গল্ফযুক্ত সিউডো কোডে:

 NestList[(previous point)*(1-r) + (random vertex point)*(r), (start point), (iterations)]

এটি (start point)প্রতিটি ধারাবাহিক বিন্দুতে প্রথম যুক্তিতে প্রথমে (ভেক্টোরিয়াল) ফাংশনটি শুরু করে প্রয়োগ করে একটি তালিকা তৈরি করে চলেছে, অবশেষে পরিকল্পনা করা সমস্ত গণিত পয়েন্টের তালিকাটি ফিরিয়ে দিচ্ছেPoint[]

কিছু স্ব-প্রতিলিপি উদাহরণ:

Grid@Partition[Table[
   pts = N@{Re@#, Im@#} & /@ Table[E^(2 I Pi r/n), {r, 0, n - 1}];
   Framed@f[10000, {0, 0}, 1/n^(1/n), pts], {n, 3, 11}], 3]

গণিত গ্রাফিক্স


@ MartinBüttner Instructions for testing this answer without Mathematica installed:1) ডাউনলোড এই pastebin থেকে যেমন * .CDF 2) ডাউনলোড এটি সংরক্ষণ করুন এবং ইনস্টল বিনামূল্যে সিডিএফ পরিবেশ এ (একটি ছোট ফাইল উল্ফর্যাম গবেষণা থেকে)। উপভোগ করুন। যদি এটা কাজ করে বলুন!
ডাঃ বেলিসারিয়াস

আপনার গল্ফযুক্ত সংস্করণটি বেশিরভাগ ক্ষেত্রে কাজ করে না (কমপক্ষে ভি 10 তে): কোনও স্থান ছাড়াই বা এর মাঝখানে চলে যাওয়ার #rজন্য r#আপনাকে ঘুরে আসতে হবে *
মার্টিন এন্ডার

@ মার্টিনব্যাটনার কৌতূহল! এটি ভি 9 তে আকর্ষণীয় কাজ করে (আমার কাছে এখনও ভি 10 নেই)। যাইহোক, আমি (অন্ধভাবে) #এবং r
ডাঃ বেলিসারিয়াস

আহ, এটি একটি নতুন বৈশিষ্ট্য। আপনি এখন অ্যাসোসিয়েশনগুলিতে ফাংশন প্রয়োগ করতে পারেন, সেক্ষেত্রে আপনি নামকরণের প্যারামিটারগুলি পান যা দ্বারা প্রবেশ করা যেতে পারে #key। আমি নিশ্চিত যে এটি কার্যকর হবে। :)
মার্টিন এন্ডার

8

জাভা: 246 253 447

একটি ফাংশন হিসাবে m():

void m(float[]a){new java.awt.Frame(){public void paint(java.awt.Graphics g){int i=0,x=i,y=i,v;for(setSize(832,864),x+=a[1],y+=a[2];i++<=a[0];v=a.length/2-2,v*=Math.random(),x+=(a[v+=v+4]-x)*a[3],y+=(a[v+1]-y)*a[3])g.drawLine(x,y,x,y);}}.show();}

লাইন ব্রেক (ব্যবহার দেখানোর জন্য একটি প্রোগ্রামের মধ্যে):

class P{
    public static void main(String[]a){
        new P().m(new float[]{1000000,            // iterations
                              416,432,            // start
                              0.6f,               // r
                              416,32,16,432,      // point list...
                              416,832,816,432,
                              366,382,366,482,
                              466,382,466,482});
    }

    void m(float[]a){
        new java.awt.Frame(){
            public void paint(java.awt.Graphics g){
                int i=0,x=i,y=i,v;
                for(setSize(832,864),x+=a[1],y+=a[2];
                    i++<=a[0];
                    v=a.length/2-2,v*=Math.random(),
                    x+=(a[v+=v+4]-x)*a[3],
                    y+=(a[v+1]-y)*a[3])
                    g.drawLine(x,y,x,y);
            }
        }.show();
    }
}

অঙ্কন ইনপুট পয়েন্টগুলি প্রয়োজনীয়তাগুলি থেকে সরানো হয়েছে (ইয়ে 80 বাইট!)) সেগুলি এখনও নীচের পুরানো স্ক্রিনশটগুলিতে দেখানো হয়েছে, তবে আপনি এটি চালালে তা দেখাবে না। আগ্রহী হলে সংশোধন ইতিহাস দেখুন।

ইনপুটগুলি ফ্লোটের অ্যারে হিসাবে দেওয়া হয়। প্রথমটি হচ্ছে পুনরাবৃত্তি, পরবর্তী দুটি শুরু হচ্ছে x y। চতুর্থটি হ'ল rএবং সর্বশেষে x1 y1 x2 y2 ...ফ্যাশনে স্থানাঙ্কগুলির তালিকায় আসে ।

নিনজা স্টার

1000000 400 400 0.6 400 0 0 400 400 800 800 400 350 350 350 450 450 350 450 450

এখানে চিত্র বর্ণনা লিখুন

ক্রস

1000000 400 400 0.8 300 0 500 0 500 300 800 300 800 500 500 500 500 800 300 800 300 500 0 500 0 300 300 300

এখানে চিত্র বর্ণনা লিখুন

Octochains

1000000 400 400 0.75 200 0 600 0 800 200 800 600 600 800 200 800 0 600 0 200

এখানে চিত্র বর্ণনা লিখুন


এটি আমার কম্পিউটারে কাজ করে না, এবং জাভা অভিযোগ show
অবমূল্যায়ন

@proudhaskeller show() হয় অবচিত, কিন্তু এটি এখনও কাজ করে। আপনি যখন বলেন "কাজ করে না", এর অর্থ কী? আপনি জাভা 8 না থাকে তাহলে, আপনি একটি যোগ করতে হবে finalকরতে String[]aঅন্তত প্রধান।
জিওবিটস

প্রসেসিংয়ে আপনার উত্তরকে পোর্ট করা হয়েছে এবং 100 টি অক্ষর কেটে দিন।
ব্যবহারকারী 12205

1
@ চমৎকার আপনি তা করতে পারে গ্রাফিকাল আউটপুট প্রায় কাছাকাছি কোন জাভা গলফ সঙ্গে, কিন্তু আমি মত এটাই ঠিক 100 অক্ষর: D:
Geobits

7

জাভাস্ক্রিপ্ট (E6) + এইচটিএমএল 173 176 193

সম্পাদনা: বড় কাটা, উইলিয়াম বার্বোসাকে ধন্যবাদ

সম্পাদনা করুন: 3 বাইট কম, ডকম্যাক্সকে ধন্যবাদ

173 বাইটগুলি ফাংশন এবং আউটপুট দেখানোর জন্য প্রয়োজনীয় ক্যানভাস উপাদান গণনা করছে।

টেস্ট HTML ফাইল এবং Firefox খোলা হিসাবে সংরক্ষণ করুন।

JSFiddle

নিস


মাস্ক


তুষার


গালিচা


<canvas id=C>
<script>
F=(n,x,y,r,p)=>{
  for(t=C.getContext("2d"),C.width=C.height=600;n--;x-=(x-p[i])*r,y-=(y-p[i+1])*r)
    i=Math.random(t.fillRect(x,y,1,1))*p.length&~1      
}
F(100000, 300, 300, 0.66, [100,500, 500,100, 500,500, 100,100, 300,150, 150,300, 300,450, 450,300]) // Function call, not counted
</script>

1
<canvas id=C><script>F=(n,x,y,r,p)=>{t=C.getContext("2d"),C.width=C.height=600;for(;n--;)t.fillRect(x,y,1,1),i=Math.random()*p.length&~1,x-=(x-p[i])*r,y-=(y-p[i+1])*r}</script>176 বাইট দীর্ঘ, আমি আপনার গণনা বুঝতে পারিনি
উইলিয়াম বারোবোসা

@ উইলিয়াম বারবোসা আমার উত্তরটি ভিত্তিতে সঠিক count আপনার ইঙ্গিতগুলি দিয়ে এটি আরও ভাল হয় - আপনাকে ধন্যবাদ!
edc65

1
আপনি যদি আকার সূচনা এবং y forfor(C.width=C.height=600;n--;y-=(y-p[i+1])*r)
আপডেটটিকে

6

পাইথন - 200 189

import os,random as v
def a(n,s,r,z):
    p=[255]*360000
    for i in[1]*(n+1):
        p[600*s[0]+s[1]]=0;k=v.choice(z);s=[int(k[i]*r+s[i]*(1-r))for i in(0,1)]
    os.write(1,b'P5 600 600 255 '+bytes(p))

এটিকে ফাংশন আর্গুমেন্ট হিসাবে ইনপুট নেয়, পিজিএম ফাইল হিসাবে স্টডআউটের ফলাফল লিখে। nহয় পুনরাবৃত্তি, sপ্রারম্ভিক বিন্দু, rআর, এবং zইনপুট পয়েন্টগুলির তালিকা is

সম্পাদনা: ধূসরতে আর ইনপুট পয়েন্ট আঁকবে না।

আকর্ষণীয় ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

Iterations: 100000
Starting Point: (200, 200)
r: 0.8
Points: [(0, 0), (0, 599), (599, 0), (599, 599), (300, 300)]

এখানে চিত্র বর্ণনা লিখুন

Iterations: 100000
Starting Point: (100, 300)
r: 0.6
Points: [(0, 0), (0, 599), (599, 0), (300, 0), (300, 300), (0, 300)]

এখানে চিত্র বর্ণনা লিখুন

Iterations: 100000
Starting Point: (450, 599)
r: 0.75
Points: [(0, 0), (0, 300), (0, 599), (300, 0), (599, 300), (150, 450)]

কিছু সাধারণ পাইথন চরিত্র সংরক্ষণ করে: প্রাথমিক মানগুলি p=[255]*360000যেমন ফাংশনে alচ্ছিক পরামিতি হিসাবে যেতে পারে; যদি কোনও নিয়ন্ত্রণ প্রবাহ না থাকে তবে একটি ফর লুপের বডি সমস্ত একই লাইনে যেতে পারে; আপনার কাছ থেকে বাম বন্ধনী শেভ করতে [1]*(n+1)যেমন [1]*-~n; যেহেতু আপনি ব্যবহার করবেন না iলুপ জন্য বাইরের, এটা কোড চালানোর জন্য খাটো এর nগুন বেশি exec"code;"*n); আমি মনে করি প্যারেনগুলি for i in(0,1)সরানো যেতে পারে।
xnor

6

সুপারকোলিডার - 106

সুপারক্লাইডার সঙ্গীত উত্পন্ন করার জন্য একটি ভাষা, তবে এটি একটি চিমটিতে গ্রাফিক্স করতে পারে।

f={|n,p,r,l|Window().front.drawHook_({{Pen.addRect(Rect(x(p=l.choose*(1-r)+(p*r)),p.y,1,1))}!n;Pen.fill})}

আমি কয়েকটি বাইট সংরক্ষণ করতে কিছু অস্পষ্ট সিনট্যাক্স শর্টকাট ব্যবহার করেছি - আরও পঠনযোগ্য এবং আরও মেমরি-দক্ষ সংস্করণ হ'ল

f={|n,p,r,l|Window().front.drawHook_({n.do{Pen.addRect(Rect(p.x,p.y,1,1));p=l.choose*(1-r)+(p*r)};Pen.fill})}

109 চর এ।

গণিতের উদাহরণ হিসাবে, আপনাকে 600x600 পিক্সেল পেতে উইন্ডোটিকে ম্যানুয়ালি আকার দিতে হবে। এটি করার সময় আপনাকে এটি পুনরায় আঁকতে অপেক্ষা করতে হবে।

এটি একটি মৌলিক সিয়েরপিনস্কি ত্রিভুজ তৈরি করে (এটি আগে দেখেনি কারণ এটি প্রদর্শিত হয়নি)

f.(20000,100@100,0.5,[0@600,600@600,300@0])

এটি এক ধরণের সিয়েরপিনস্কি পেন্টাগনের ধরণের জিনিস তৈরি করে:

f.(100000,100@100,1-(2/(1+sqrt(5))),{|i| (sin(i*2pi/5)+1*300)@(1-cos(i*2pi/5)*300)}!5)

এখানে চিত্র বর্ণনা লিখুন

6 পয়েন্ট সহ একই জিনিস মাঝখানে একটি উল্টো কোচ তুষারপাত ছেড়ে দেয়:

f.(100000,100@100,1/3,{|i| (sin(i*2pi/6)+1*300)@(1-cos(i*2pi/6)*300)}!6)

এখানে চিত্র বর্ণনা লিখুন

অবশেষে, এখানে এস এর উত্তর থেকে 3 ডি পিরামিডগুলিতে একটি রাইফ রয়েছে। (নোট করুন যে শেডিং এফেক্ট পেতে আমি দুটি পয়েন্টের মধ্যে দু'বার ব্যবহার করেছি।)

f.(150000,100@100,0.49,[300@180, 0@500,0@500,350@400,600@500,250@600])

এখানে চিত্র বর্ণনা লিখুন


6

পাইথন, 189 183 175

সম্পাদনা: বিপরীত আর অনুপাত ঠিক করেছে এবং কয়েকটি বাইট সংরক্ষণ করার জন্য বি ও ডাব্লু চিত্রটিতে স্যুইচ করেছে।

হিসাবে পয়েন্ট সংখ্যা, হিসাবে nপ্রথম পয়েন্ট p, অনুপাত হিসাবে rএবং পয়েন্ট তালিকা হিসাবে লাগে l। মডিউলটি বালিশের প্রয়োজন।

import random,PIL.Image as I
s=850
def c(n,p,r,l):
    i=I.new('L',(s,s));x,y=p;
    for j in range(n):w,z=random.choice(l);w*=r;z*=r;x,y=x-x*r+w,y-y*r+z;i.load()[x,s-y]=s
    i.show()

উদাহরণ:

আমি চিত্রটির কেন্দ্রের চারদিকে বৃত্তে পয়েন্ট তৈরি করছি

points = [(425+s*cos(a)/2, 425+s*sin(a)/2) for a in frange(.0, 2*pi, pi/2)]
c(1000000, (425, 425), 0.4, points)

এখানে চিত্র বর্ণনা লিখুন

XOXO পুনরাবৃত্তি, 0.4 থেকে 0.6 থেকে অনুপাত পরিবর্তন করে

এখানে চিত্র বর্ণনা লিখুন

একরকম তুষার ফ্লেক

stars = [(425+s*cos(a)/2,425+s*sin(a)/2) for a in frange(.0,2*pi, pi/4)]
c(1000000, (425, 425), 0.6, stars)

এখানে চিত্র বর্ণনা লিখুন


পিছন ফিক্সিং সম্পর্কে জানিনা r জিনিস, কিন্তু আপনি এই একটি প্রোগ্রাম ব্যবহার করে বেশ কয়েকটি অক্ষর সংরক্ষণ করতে পারবেন n,p,r,l=input()। আপনি *=অপারেশন এবং ব্যবহার থেকে বন্ধনীগুলি সরাতে পারেন import random as R
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান দুর্ভাগ্যক্রমে, আমার উত্তরটি সংশোধন করা অপ্টিমাইজেশনটিকে অকার্যকর করে দেয় *=:(। inputকাজটি করা খুব ভাল লাগবে, এবং আমদানি বর্তমানে সর্বাধিক সংক্ষিপ্ত রূপই সম্ভব (বা আমি কোনও কিছু মিস করেছি?)।)
আন্তঃরক্ত তৈরি করা হয়েছে বিড়াল

আমি প্রায় নিশ্চিত লাইন হতে পারে am import random as R,PIL.Image as Iএবং তারপর random.choiceহতে পারে R.choice। হ্যাঁ, ইনপুট ব্যবহার করা খোঁড়া, তবে আপনি পরীক্ষার জন্য ফাংশন সংস্করণটি ব্যবহার করতে পারেন এবং input()একটি ভাল স্কোরের জন্য পোস্ট করতে পারেন ! 1! : পি
FryAmTheEggman

ওহ, আমি সবেমাত্র এলোমেলো সংজ্ঞা দিয়ে লক্ষ্য করেছি যে 0 টি অক্ষর বাঁচায়। ওফস: এস যাইহোক, আমি আরও বুঝতে পারি যে গণিতটি আপনার বন্ধু: y=x*(1-r)+w== y=x-x*r-w
FryAmTheEggman

@ ফ্রাইআম দ্য এজম্যান আমার বক্তব্য ছিল: পি। তবে গণিতের জন্য ধন্যবাদ
তেহ ইন্টারনেটস

4

জাভাস্ক্রিপ্ট (407) (190)

আমি আমার স্ক্রিপ্ট এবং গল্ফিংয়ের বিষয়ে কোনও প্রতিক্রিয়া পেয়ে খুশি কারণ আমি জেএস = এর সাথে আরামদায়ক নই)) (এটি নিজের ব্যবহারের জন্য নির্দ্বিধায় অনুভব করুন / এটি আপনার নিজের জমা দেওয়ার জন্য পরিবর্তন করুন!)

পঠন ইনপুট ( এডসি 65 এর প্রবেশের সাথে তুলনা করার জন্য আমি ইনপুটটি গণনা করি না)):

p=prompt;n=p();[x,y]=p().split(',');r=p();l=p().split(';').map(e=>e.split(','));

ক্যানভাস সেটআপ এবং গণনা

d=document;d.body.appendChild(c=d.createElement('canvas'));c.width=c.height=1000;c=c.getContext('2d');
for(;n--;c.fillRect(x,y,2,2),[e,f]= l[Math.random()*l.length|0],x-=x*r-e*r,y-=y*r-f*r);

কিছুটা বেশি অবারিত (উদাহরণের ইনপুট সহ যেখানে আসল ইনপুট প্রম্পটগুলি সবেমাত্র মন্তব্য করা হয়েছে, তাই ব্যবহারের জন্য প্রস্তুত):

p=prompt;
n=p('n','4000');
[x,y]=p('start','1,1').split(',');
r=p('r','0.5');
l=p('list','1,300;300,1;300,600;600,300').split(';').map(e=>e.split(','));d=document;
d.body.appendChild(c=d.createElement('canvas'));
c.width=c.height=1000;c=c.getContext('2d');
for(;n--;c.fillRect(x,y,2,2),[e,f]= l[Math.random()*l.length|0],x-=x*r-e*r,y-=y*r-f*r);

উদাহরণ

for(k = 0; k<50; k++){
rad = 10;
l.push([350+rad*k*Math.cos(6.28*k/10),350+rad*k*Math.sin(6.28*k/10)]);
}
r = 1.13;

এখানে চিত্র বর্ণনা লিখুন

r = 0.5;list = [[1,1],[300,522],[600,1],[300,177]];

এখানে চিত্র বর্ণনা লিখুন

r = 0.5
list = [[350+350*Math.sin(6.28*1/5),350+350*Math.cos(6.28*1/5)],
[350+350*Math.sin(6.28*2/5),350+350*Math.cos(6.28*2/5)],
[350+350*Math.sin(6.28*3/5),350+350*Math.cos(6.28*3/5)],
[350+350*Math.sin(6.28*4/5),350+350*Math.cos(6.28*4/5)],
[350+350*Math.sin(6.28*5/5),350+350*Math.cos(6.28*5/5)],


[350+90*Math.sin(6.28*1.5/5),350+90*Math.cos(6.28*1.5/5)],
[350+90*Math.sin(6.28*2.5/5),350+90*Math.cos(6.28*2.5/5)],
[350+90*Math.sin(6.28*3.5/5),350+90*Math.cos(6.28*3.5/5)],
[350+90*Math.sin(6.28*4.5/5),350+90*Math.cos(6.28*4.5/5)],
[350+90*Math.sin(6.28*5.5/5),350+90*Math.cos(6.28*5.5/5)]];

এখানে চিত্র বর্ণনা লিখুন


আপনি কোনটি বোঝাতে চান?
flawr

ওহ ধন্যবাদ আমাকে বলার জন্য, আমি শীঘ্রই জমাটি আপডেট করব!
flawr

আপনি আমার উত্তরটি যুক্ত করেছেন, তবে আমি ক্যানভাসের সেটআপটি গণনা করছি। আমি শুধু ফাংশন কল একক লাইন গণনা করি না। যাইহোক দুর্দান্ত চিত্রগুলি, স্বতঃস্ফূর্তভাবে প্রথম চিত্র।
edc65

আহ আমি তা লক্ষ্য করিনি, আমি কেবল এটিকে 'তুলনীয়' করতে চেয়েছিলাম, তবে যখন আমি জেএস-এর উপর নির্ভর করতে চেষ্টা করি তখনই খুব কঠিন =) @ মার্টিনব্যাটনার আপডেটেড, এখন যে আমি সঠিকভাবে বুঝতে পেরেছিলাম আমি বেশিরভাগ অংশ অপসারণ করতে সক্ষম হয়েছি আবর্জনা =)
flawr

3

প্রক্রিয়াজাতকরণ, 153

প্রসেসিংয়ের জন্য জিওবিটসের জাভা উত্তরকে পোর্ট করা হয়েছে এবং আরও কিছু গল্ফিং করেছিলেন, ফলে 100 টি অক্ষর হ্রাস পেয়েছে। আমি মূলত প্রক্রিয়াটি সক্রিয় করার উদ্দেশ্যে রেখেছিলাম, তবে ইনপুট সীমাবদ্ধতাগুলি এটির উপর খুব কঠোর (প্রসেসিংয়ের স্টিডিন বা আরজিভি নেই, যার অর্থ প্রসেসিংয়ের নেটিভ draw()লুপটি ব্যবহার না করে আমার নিজের ফাংশনটি লিখতে হবে )।

void d(float[]a){int v;size(600,600);for(float i=0,x=a[1],y=a[2];i++<a[0];v=(int)random(a.length/2-2),point(x+=(a[v*2+4]-x)*a[3],y+=(a[v*2+5]-y)*a[3]));}

লাইন ব্রেক সহ সম্পূর্ণ প্রোগ্রাম:

void setup() {
  d(new float[]{100000,300,300,.7,0,600,600,0,600,600,0,0,400,400,200,200,400,200,200,400}); 
}
void d(float[]a){
  int v;
  size(600,600);
  for(float i=0,x=a[1],y=a[2];
      i++<a[0];
      v=(int)random(a.length/2-2),point(x+=(a[v*2+4]-x)*a[3],y+=(a[v*2+5]-y)*a[3]));
}

উপরের প্রোগ্রামটি ক্রস দেয়: এখানে চিত্র বর্ণনা লিখুন

d(new float[]{100000,300,300,.65,142,257,112,358,256,512,216,36,547,234,180,360}); 

এটি পিরামিড দেয়: এখানে চিত্র বর্ণনা লিখুন

d(new float[]{100000,100,500,.5,100,300,500,100,500,500});

এটি সিয়েরপিনস্কি ত্রিভুজ দেয়: এখানে চিত্র বর্ণনা লিখুন


4
আমি পিরামিডগুলির 3 ডি এফেক্ট পছন্দ করি। :)
মার্টিন এন্ডার

1

অসম্পূর্ণ "রেফারেন্স বাস্তবায়ন", পাইথন

আপডেট : অনেক বেশি, দ্রুত (প্রস্থের আদেশ অনুসারে)

ইন্টারেক্টিভ শেল পরীক্ষা করে দেখুন!

ফাইলটি সম্পাদনা করুন এবং এতে সেট interactiveকরুন True, তারপরে এর মধ্যে একটি করুন:

polygon numberOfPoints numeratorOfWeight denominatorOfWeight startX startY numberOfSides বহুভুজ তৈরি করে, সংরক্ষণ করে এবং প্রদর্শন করে।

points numberOfPoints numeratorOfWeight denominatorOfWeight startX startY point1X point1Y point2X point2Y ... অনুমান যা চাইবে তা করে।

এখানে চিত্র বর্ণনা লিখুন

import matplotlib.pyplot as plt
import numpy as np
from fractions import Fraction as F
import random
from matplotlib.colors import ColorConverter
from time import sleep
import math
import sys
import cmd
import time

def plot_saved(n, r, start, points, filetype='png', barsize=30, dpi=100, poly=True, show=False):
    printed_len = 0

    plt.figure(figsize=(6,6))
    plt.axis('off')

    start_time = time.clock()
    f = F.from_float(r).limit_denominator()

    spts = []
    for i in range(len(points)):
        spts.append(tuple([round(points[i].real,1), round(points[i].imag,1)]))

    if poly:
        s = "{}-gon ({}, r = {}|{})".format(len(points), n, f.numerator, f.denominator)
    else:
        s = "{} ({}, r = {}|{})".format(spts, n, f.numerator, f.denominator) 

    step = math.floor(n / 50)

    for i in range(len(points)):
        plt.scatter(points[i].real, points[i].imag, color='#ff2222', s=50, alpha=0.7)

    point = start
    t = time.clock()

    xs = []
    ys = []

    for i in range(n+1):
        elapsed = time.clock() - t
        #Extrapolation
        eta = (n+1-i)*(elapsed/(i+1))
        printed_len = rewrite("{:>29}: {} of {} ({:.3f}%) ETA: {:.3f}s".format(
                s, i, n, i*100/n, eta), printed_len)
        xs.append(point.real)
        ys.append(point.imag)
        point = point * r + random.choice(points) * (1 - r)

    printed_len = rewrite("{:>29}: plotting...".format(s), printed_len)
    plt.scatter(xs, ys, s=0.5, marker=',', alpha=0.3)

    presave = time.clock()
    printed_len = rewrite("{:>29}: saving...".format(s), printed_len)
    plt.savefig(s + "." + filetype, bbox_inches='tight', dpi=dpi)

    postsave = time.clock()
    printed_len = rewrite("{:>29}: done in {:.3f}s (save took {:.3f}s)".format(
                            s, postsave - start_time, postsave - presave),
                            printed_len)

    if show:
        plt.show()
    print()
    plt.clf()

def rewrite(s, prev):
    spaces = prev - len(s)
    sys.stdout.write('\r')
    sys.stdout.write(s + ' '*(0 if spaces < 0 else spaces))
    sys.stdout.flush()
    return len(s)

class InteractiveChaosGame(cmd.Cmd):
    def do_polygon(self, args):
        (n, num, den, sx, sy, deg) = map(int, args.split())
        plot_saved(n, (num + 0.0)/den, np.complex(sx, sy), list(np.roots([1] + [0]*(deg - 1) + [-1])), show=True)

    def do_points(self, args):
        l = list(map(int, args.split()))
        (n, num, den, sx, sy) = tuple(l[:5])
        l = l[5:]
        points = []
        for i in range(len(l)//2):
            points.append(complex(*tuple([l[2*i], l[2*i + 1]])))
        plot_saved(n, (num + 0.0)/den, np.complex(sx, sy), points, poly=False, show=True)

    def do_pointsdpi(self, args):
        l = list(map(int, args.split()))
        (dpi, n, num, den, sx, sy) = tuple(l[:6])
        l = l[6:]
        points = []
        for i in range(len(l)//2):
            points.append(complex(*tuple([l[2*i], l[2*i + 1]])))
        plot_saved(n, (num + 0.0)/den, np.complex(sx, sy), points, poly=False, show=True, dpi=dpi)

    def do_default(self, args):
        do_generate(self, args)

    def do_EOF(self):
        return True

if __name__ == '__main__':
    interactive = False
    if interactive:
        i = InteractiveChaosGame()
        i.prompt = ": "
        i.completekey='tab'
        i.cmdloop()
    else:
        rs = [1/2, 1/3, 2/3, 3/8, 5/8, 5/6, 9/10]
        for i in range(3, 15):
            for r in rs:
                plot_saved(20000, r, np.complex(0,0), 
                            list(np.roots([1] + [0] * (i - 1) + [-1])), 
                            filetype='png', dpi=300)

এটি চালানো ছাড়া, দারুণ অর্থ কী তা আমার কোনও ধারণা নেই । সম্ভবত আপনি ব্যাখ্যা করতে পারেন, বা এমন কিছু চিত্র দেখিয়েছেন যা এটি সংক্ষিপ্ত থেকে আলাদা করে তোলে?
জিওবিটস

দাবিত্যাগ এবং ছবি অন্তর্ভুক্ত করার জন্য @ জিওবিটস সম্পাদনা করেছেন :)
সোহম চৌধুরী

4
যদি আপনি অন্য উত্তরটিতে আলাদা শিরোনামের (উদাহরণস্বরূপ উগল্ফড রেফারেন্স বাস্তবায়ন) এর অন্তর্ভুক্ত করেন তবে আমি অগ্রাধিকার দেব যেহেতু কেবল বর্ণহীন কোড পোস্ট করা প্রযুক্তিগতভাবে "উত্তর নয়" is
মার্টিন এন্ডার

-2

পাইথন (২০২ টি চর)

হিসাবে পয়েন্ট সংখ্যা n, গড় ওজন হিসাবে হিসাবে হিসাবে r, এক হিসাবে শুরু পয়েন্ট tuple sএবং XY tupleগুলি তালিকা হিসাবে পয়েন্ট তালিকা গ্রহণ করে l

import random as v,matplotlib.pyplot as p
def t(n,r,s,l):
 q=complex;s=q(*s);l=[q(*i)for i in l];p.figure(figsize=(6,6))
 for i in range(n):p.scatter(s.real,s.imag,s=1,marker=',');s=s*r+v.choice(l)*(1-r)
 p.show()

@ মার্টিনবাটনার আমি কি নির্দিষ্ট ধরণের ইনপুট নিচ্ছি তা অনুমান করে?
সোহম চৌধুরী

1
এছাড়াও, আমার মেশিনে, ফলাফলটি 600x600 পিক্সেল নয়, x এবং y এর দৈর্ঘ্যের বিভিন্ন স্কেল রয়েছে এবং পয়েন্টগুলি 1 পিক্সেলের বেশি coverেকে দেয়।
মার্টিন এন্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.