গাসকেট বয়ন - একটি সিয়ের্পিস্কি গিঁট আঁকুন


33

একটি পূর্ণসংখ্যা N> = 2 দেওয়া, একটি চিত্র তৈরি করুন যা ডিগ্রি এন এর সিয়েরপিয়স্কি নট দেখাচ্ছে produce

উদাহরণস্বরূপ, এখানে 2, 3, 4 এবং 5 ডিগ্রির নট রয়েছে:

ডিগ্রি 2 ডিগ্রি 3 ডিগ্রি 4 ডিগ্রি 5

পূর্ণ আকার দেখতে চিত্রগুলিতে ক্লিক করুন (চিত্রটি আরও বেশি ডিগ্রি করুন)।

সবিস্তার বিবরণী

  1. ডিগ্রি এন এর একটি সের্পিয়স্কি নটটি গাইড পয়েন্ট হিসাবে ডিগ্রি এন এর সিয়ের্পস্কি ত্রিভুজের কোণটি ব্যবহার করে অঙ্কিত হয়। ডিগ্রি এন এর একটি সের্পিয়স্কি ত্রিভুজটি ডিগ্রি এন -1 এর তিনটি সিয়ের্পস্কি ত্রিভুজ বৃহত্তর ত্রিভুজের মধ্যে সাজানো। ডিগ্রি 0 এর একটি সিয়েরপিস্কি ত্রিভুজ একটি সমবাহু ত্রিভুজ।
  2. ক্ষুদ্রতম উপাদান ত্রিভুজগুলির পাশের দৈর্ঘ্য 64৪ রয়েছে যা সিয়েরপিয়স্কি ত্রিভুজ দেয় যার উপর গিঁটের সামগ্রিক পাশের দৈর্ঘ্য ভিত্তিক হয় 64 * 2 ^ n
  3. বাইরের ত্রিভুজের কেন্দ্রটি চিত্রের কেন্দ্রে অবস্থিত। এটি শীর্ষ এবং নীচে সমান সাদা স্থান দেয় না
  4. আউটপুট পার্শ্ব দৈর্ঘ্যের একটি বর্গক্ষেত্র ইমেজ সিলিং (64 * 2 ^ n * 2 / ROOT3)যেখানে সিলিং (x) এরহয় ceiling(x)চেয়ে ক্ষুদ্রতম পূর্ণসংখ্যা বড় বা এক্স এর সমান। ত্রিভুজটির কেন্দ্র চিত্রের কেন্দ্রস্থলে থাকা অবস্থায় অন্তর্নিহিত সিয়ের্পস্কি ত্রিভুজের শীর্ষ শীর্ষটিটি ইমেজের মধ্যে অন্তর্ভুক্ত করার জন্য এটি যথেষ্ট বড়।
  5. একক বক্ররেখাটি অবশ্যই নিজের উপর দিয়ে চলে যেতে হবে, কঠোরভাবে পর্যায়ক্রমে। সলিউশনগুলি তার ওপরে ওভারের চেয়ে বেশি বা তার পরে অধীনের মধ্যে নির্বাচন করতে পারে।
  6. উদাহরণ চিত্রগুলি কালো অগ্রভাগ এবং সাদা পটভূমি দেখায়। আপনি যে কোনও দুটি সহজেই আলাদা আলাদা রঙ বেছে নিতে পারেন। অ্যান্টি-এলিয়জিং অনুমোদিত তবে প্রয়োজনীয় নয়।
  7. দুটি আরক মিলিত হয় বা বাঁকটি নিজের উপর দিয়ে বা এর নীচে চলে যায় এমন ফাঁকাগুলি অবশ্যই থাকবে না।
  8. আউটপুট কোনও রাস্টার ফর্ম্যাট চিত্র ফাইলে বা কোনও ভেক্টর ফর্ম্যাট চিত্র ফাইলে থাকতে পারে যা সঠিক ডিফল্ট প্রদর্শন আকার অন্তর্ভুক্ত করে। আপনি যদি সরাসরি স্ক্রিনে প্রদর্শন করেন তবে এটি অবশ্যই এমন ফর্মের মধ্যে থাকতে হবে যা স্ক্রিনের চেয়ে বড় হওয়ার পরে পুরো চিত্রটি দেখতে স্ক্রোলিংকে মঞ্জুরি দেয়।

আর্ক সেন্টার, ব্যাসার্ধ এবং বেধ নির্ধারণ করা হচ্ছে

  1. গিঁটটি একটি বৃত্তাকার আর্কগুলির একটি সিরিজ হিসাবে নির্মিত হয়েছে যা এমন বিন্দুতে মিলিত হয় যেখানে তাদের স্পর্শক সমান্তরাল হয়, একটি বিরামবিহীন যোগ দিতে। এই আরকগুলি অ্যানুলার সেক্টর হিসাবে প্রদর্শিত হয় (বেধ সহ আর্কস)।
  2. এই চাপগুলির কেন্দ্রগুলি হ'ল উল্টো দিকে ত্রিভুজগুলির ক্ষুদ্রতম কোণগুলি। এই জাতীয় প্রতিটি ভার্টেক্স হুবহু একটি চাপের কেন্দ্রস্থল।
  3. প্রতিটি চাপের ব্যাসার্ধ থাকে 64 * ROOT3 / 2
  4. ব্যতিক্রমটি হ'ল তিনটি বাহ্যতম ত্রিভুজগুলির (বৃহত্তর ত্রিভুজের কোণে) অর্কগুলির একটি কেন্দ্র রয়েছে যা দুটি সংলগ্ন অভ্যন্তরীণ কোণের মধ্যবিন্দু এবং এর ব্যাসার্ধ রয়েছে 64 * (ROOT3 / 2-1 / 2)
  5. প্রতিটি চাপটি মোট বেধ (অভ্যন্তরীণ ব্যাসার্ধ এবং বাহ্যিক ব্যাসার্ধের মধ্যে পার্থক্য) সহ উপস্থাপিত হয় 64 * (ROOT3 / 2) / 4এবং এর কালো সীমানাগুলির প্রতিটি বেধের বেধ 64 * (ROOT3 / 2) / 16থাকতে হবে এবং কেবল একটি দৃ stri় স্ট্রিপ নয়।

পরিমাপ ইউনিট

  1. সমস্ত দূরত্ব পিক্সেলে রয়েছে (1 সংলগ্ন পিক্সেলের মধ্যে অনুভূমিক বা উল্লম্ব দূরত্ব)।
  2. 3 এর বর্গমূল অবশ্যই 7 টি গুরুত্বপূর্ণ ব্যক্তির সাথে সঠিক হতে হবে। এটি হ'ল আপনার গণনা অবশ্যই এটির মতো একটি ROOT3 ব্যবহারের সমতুল্য1.7320505 <= ROOT3 < 1.7320515

স্কোরিং

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


যারা ভাবছেন তাদের জন্য, এন = 0 এবং এন = 1 অন্তর্ভুক্ত নয় কারণ এগুলি একটি চেনাশোনা এবং একটি ট্রেফয়েলের সাথে সামঞ্জস্য করে, যা N> = 2 এর জন্য প্রযোজ্য প্যাটার্নটির সাথে বেশ মেলে না। আমি আশা করব যে এই চ্যালেঞ্জের সর্বাধিক পদ্ধতির জন্য 0 এবং 1 এর জন্য বিশেষ কেস কোড যুক্ত করা দরকার, তাই আমি সেগুলি বাদ দেওয়ার সিদ্ধান্ত নিয়েছি।


1
সমস্ত সংখ্যা কীসের সাথে সম্পর্কিত তা দেখানোর জন্য চিত্রটি কী সাহায্য করবে?
ট্রাইকোপল্যাক্স

আমি আমার উত্তরটি গল্ফ করার আগে / কোণগুলি যুক্ত করার আগে, 7 টি উল্লেখযোগ্য চিত্রগুলি কি লাইনটির বেধ ইত্যাদির মতো ছোট বিবরণের জন্য সত্যই প্রয়োজনীয়? "7 টি উল্লেখযোগ্য পরিসংখ্যান বা 1 পিক্সেল, যেটি বড় হোক" এর মতো নির্ভুলতা আরও উপযুক্ত বলে মনে হয়।
স্তর নদী সেন্ট

চিত্রের আকারটি ইনপুট দিয়ে স্কেল করার পরে @ লিভেলরিভারস্ট, এমনকি significant টি উল্লেখযোগ্য পরিসংখ্যান বৃহত্তর এন এর জন্য 1 পিক্সেলের যথার্থতার জন্য অপর্যাপ্ত I've আমি আড্ডায় কিছু আলোচনার পরে 7 টি গুরুত্বপূর্ণ ব্যক্তির উপর স্থির হয়েছি, যাতে সমস্ত উত্তর একই রকম থাকে মান।
ট্রাইকপ্লেক্স

হ্যাঁ এটি আরও বড় এন এর জন্য ছবিটির স্কেলিংয়ের জন্য প্রয়োজনীয়। একটি 1000000 x 1000000 চিত্রের 7 টি উল্লেখযোগ্য পরিসংখ্যান 0.1 পিক্সেলের সাথে মিলে যায় তবে মধ্যবর্তী গণনার সাথে এটি এর চেয়েও খারাপ হতে পারে। আমি কেবল ভাবি stroke-width:3.464102এবং অনুরূপটি যদি অতিরিক্ত 1 পিক্সেলের নির্ভুলতা পাওয়া যায় তবে কিছুটা অতিরিক্ত। আমি এগিয়ে যাব এবং এটি এর মতো অন্তর্ভুক্ত করব, যদিও এটি যদি রায় হয়।
স্তর নদী সেন্ট

উত্তর:


27

রুবি, 1168 932

গত রাত থেকে একটি ভুল সংশোধন করেছেন, স্পষ্ট করার পরে আরও গল্ফ করা।

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

কোড

n=gets.to_i
r=64*w=0.75**0.5
m=1<<n-2
z=128*m/w
a=(s="<path style='fill:none;stroke:black;stroke-width:3.464102' transform='translate(%f %f)'
")%[0,r-r*m*8/3]+"d='M18.11943,-2A#{b=r-6*w-32} #{b} 0 0,0 #{-b} 0#{k='A%f %f 0 0 '%([58*w]*2)}0 0,38.71692
M28.58980,1.968882#{l='A%f %f 0 0 '%([70*w]*2)}0 #{c=r+6*w-32} 0A#{c} #{c} 0 0,0 #{-c} 0#{l}0 -9 44.65423'/>"
p=2
m.times{|i|(i*2+1).times{|j|(p>>j)%8%3==2&&a<<s%[128*(j-i),r*3+r*i*4-r*m*8/3]+
"d='M-55,44.65423#{k}0 11.5,25.11473#{l}1 35.41020,1.968882
M-64,51.48786#{l}0 20.5,30.31089#{k}1 36.82830,13.17993
M-82.17170,-2.408529#{l}1 -11.5,25.11473#{k}0 0,38.71692
M-81.52984 8.35435#{k}1 -20.5,30.31089#{l}0 -9,44.65423
M9,44.65423#{k}0 81.52984,8.35435
M0,51.48786#{l}0 91.17169,13.17993'/>"}
p^=p*4}
puts "<svg xmlns='http://www.w3.org/2000/svg' viewBox='#{-z} #{-z} #{e=2*z+1} #{e}' width='#{e}px' height='#{e}px'>"+
"<g transform='rotate(%d)'>#{a}</g>"*3%[0,120,240]+"</svg>"

আউটপুট এন = 4

স্ট্যাক এক্সচেঞ্জ দ্বারা উদ্ধার। মূল হিসাবে অনেক ভাল দেখাচ্ছে।

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

প্রথমে আমি http://euler.nmt.edu/~jstarret/sierpinski.html এর মতো কিছু বিবেচনা করেছি যেখানে ত্রিভুজটি তিনটি ভিন্ন বর্ণের স্ট্র্যান্ডে বিভক্ত হয়ে গেছে, যার প্রতিটিই এক কোণ থেকে অন্য কোণে একটি পথ তৈরি করে। অসম্পূর্ণ চেনাশোনাগুলি সেখানে অসম্পূর্ণ হেক্সাগন হিসাবে দেখানো হয়েছে। হেক্সাগনগুলির অভ্যন্তরে বৃত্তগুলি লিপিবদ্ধ করে দেখায় যে বৃত্তের ব্যাসার্ধটি sqrt(3)/2দৈর্ঘ্যের দৈর্ঘ্যের চেয়ে কয়েক গুণ হওয়া উচিত । প্রদর্শিত হিসাবে স্ট্র্যান্ডগুলি পুনরাবৃত্তভাবে তৈরি করা যেতে পারে, তবে একটি যুক্ত জটিলতা রয়েছে কারণ কোণগুলি বৃত্তাকার করা প্রয়োজন এবং কোন দিকে বাঁকানো উচিত তা জানা মুশকিল, তাই আমি এই পদ্ধতির ব্যবহার করিনি use

আমি যা করেছি তা নিম্নরূপ ছিল।

নীচের চিত্রটিতে আপনি দেখতে পাচ্ছেন যে এন = 2 ইউনিট (সবুজ রঙে) এর সাথে অনুভূমিক মোচড় রয়েছে যা সিয়েরপিনস্কি ত্রিভুজটিতে সজ্জিত এবং অতিরিক্ত ব্রিজিং টুইস্টগুলি (নীল রঙে)

এটি সাধারণ জ্ঞান যে প্যাসকের ত্রিভুজটির বিজোড় সংখ্যাগুলি সিয়ারপিনস্কি ত্রিভুজ তৈরি করে। বাইনারি ডিজিটের একটি সিয়ারপিনস্কি ত্রিভুজটি সংখ্যার সাথে শুরু করে p=1এবং পুনরাবৃত্তভাবে এটির সাথে জোরে অঙ্কের মাধ্যমে উপমা পদ্ধতিতে পাওয়া যেতে পারে p<<1

আমি এই পদ্ধতিকে সংশোধন করেছি, আরম্ভ করে p=2এবং পুনরাবৃত্তভাবে জোর করে p*4। এটি জিরোস কলামগুলির সাথে বিকল্প হিসাবে একটি সিয়ারপিনস্কি ত্রিভুজ দেয়।

এখন আমরা রাইটশিফট পি ব্যবহার করে শেষ তিনটি বিট পরীক্ষা করে দেখতে পারি %8। যদি সেগুলি হয় তবে 010আমাদের একটি এন = 2 ইউনিটের অন্তর্গত সবুজ রঙের বাঁকটি আঁকতে হবে। যদি সেগুলি হয় তবে 101আমাদের একটি নীল, ব্রিজিং টুইস্ট আঁকতে হবে। এই উভয় সংখ্যার জন্য একসাথে পরীক্ষার জন্য আমরা মডুলো খুঁজে পাই %3এবং এটি 2 হলে আমাদের পাকটি আঁকতে হবে।

অবশেষে, অনুভূমিক মোচড়ের অতিরিক্ত, আমরা দুটি কপি 120 এবং 240 ডিগ্রি দিয়ে আবর্তিত তির্যকগুলি আঁকতে এবং ছবিটি সম্পূর্ণ করার জন্য তৈরি করি। যা অবশিষ্ট রয়েছে তা কোণ যুক্ত করা।

মন্তব্য করা কোড

n=gets.to_i

#r=vertical distance between rows 
r=64*w=0.75**0.5

#m=number of rows of horizontal twists
m=1<<n-2

#z=half the size of the viewport
z=128*m/w

#s=SVG common to all paths
s="<path style='fill:none;stroke:black;stroke-width:3.464102' transform='translate(%f %f)'
"

#initialize a with SVG to draw top corner loop. Set k and l to the SVG common to all arcs of 58*w and 70*w radius 
a=s%[0,r-r*m*8/3]+
"d='M18.11943,-2A#{b=r-6*w-32} #{b} 0 0,0 #{-b} 0#{k='A%f %f 0 0 '%([58*w]*2)}0 0,38.71692
M28.58980,1.968882#{l='A%f %f 0 0 '%([70*w]*2)}0 #{c=r+6*w-32} 0A#{c} #{c} 0 0,0 #{-c} 0#{l}0 -9 44.65423'/>"

#p is the pattern variable, top row of twists has one twist so set to binary 00000010
p=2

#loop vertically and horizontally
m.times{|i|
 (i*2+1).times{|j|

   #leftshift p. if 3 digits inspected are 010 or 101 
   (p>>j)%8%3==2&&

   #append to a, the common parts of a path...
   a<<s%[128*(j-i),r*3+r*i*4-r*m*8/3]+

   #...and the SVG for the front strand and left and right parts of the back strand (each strand has 2 borders)
"d='M-55,44.65423#{k}0 11.5,25.11473#{l}1 35.41020,1.968882
M-64,51.48786#{l}0 20.5,30.31089#{k}1 36.82830,13.17993
M-82.17170,-2.408529#{l}1 -11.5,25.11473#{k}0 0,38.71692
M-81.52984 8.35435#{k}1 -20.5,30.31089#{l}0 -9,44.65423
M9,44.65423#{k}0 81.52984,8.35435
M0,51.48786#{l}0 91.17169,13.17993'/>"}

#modify the pattern by xoring with 4 times itself for the next row
p^=p*4}

#output complete SVG of correct size with three copies of the finished pattern rotated through 0,120,240 degrees.
puts "<svg xmlns='http://www.w3.org/2000/svg' viewBox='#{-z} #{-z} #{e=2*z+1} #{e}' width='#{e}px' height='#{e}px'>"+
"<g transform='rotate(%d)'>#{a}</g>"*3%[0,120,240]+"</svg>"

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


আপনি যেখানে বলছেন "আসল হিসাবে অনেক বেশি ভাল দেখাচ্ছে" এটি যে কেউ বুঝতে পারে না তার জন্য "(পুরো আকারটি দেখতে চিত্রটিতে ক্লিক করুন)" এর মতো কিছু যুক্ত করা উপযুক্ত।
ট্রাইকোপল্যাক্স

@ থ্রিচোপ্লেক্স ইমেজটিতে ক্লিক করার ঘটনা আমার কাছে ঘটেনি। তবে যাইহোক, এটি একটি পিএনজি, কারণ স্ট্যাক এক্সচেঞ্জ এসভিজি চিত্রগুলি গ্রহণ করে না, তাই প্রান্তগুলি ইচ্ছাকৃতভাবে অস্পষ্ট করা হয়েছে। আমার স্থানীয় এসভিজি ফাইলে অনেকগুলি কৃপণ প্রান্ত রয়েছে এবং আরও ভাল দেখাচ্ছে।
স্তর নদী সেন্ট

ইমেজ আকারে ট্রিকোপলাক্স দ্রুত সমাধান করা হয়েছে। অন্য দিন গল্ফ হবে।
স্তর নদী সেন্ট

1
+1 দুর্দান্ত কাজ। আমি বিশেষত রঙিন কোডেড ডায়াগ্রামের সাথে বিস্তারিত ব্যাখ্যা পছন্দ করি।
ট্রাইকোপ্লাক্স

1
হাইপারলিঙ্ক মারা গেছে।
mbomb007
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.