ক্রিসমাস স্টার / স্টেলেটেড ডোডেকহেড্রন আঁকুন


10

বড়দিনে আমার পরিবারে কাগজের তারকারা বড় জিনিস, তাই আমি ভেবেছিলাম ভার্চুয়ালটি দুর্দান্ত হবে।

নীচে একটি নিয়মিত ডোডেকেহেড্রনের চিত্র রয়েছে ( https://en.wikedia.org/wiki/Dodecahedron থেকে , সেখানে উল্লিখিত লেখকের জন্য দায়ী))

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

পলিহেড্রোন প্রয়োগ করার সময় স্টেলেশন প্রক্রিয়া (উইকিপিডিয়া) এর মুখগুলি অন্য মুখগুলি অতিক্রম না করা পর্যন্ত প্রসারিত করা জড়িত। এইভাবে নিয়মিত ডোডেকেহেড্রন দিয়ে শুরু করে আমরা নিম্নলিখিত আকারগুলি পাই:

ছোট স্টিল্লেটেড ডোডেকাহেড্রন, গ্রেট ডোডেকাহেড্রন এবং গ্রেট স্টেল্লেটেড ডডকেহেড্রন

Http://jwilson.coe.uga.edu/emat6680fa07/thrash/asn1/stelferences.html থেকে চিত্র

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

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

কার্য

আপনার প্রোগ্রাম বা ফাংশনটি নীচের পলিহেডর মধ্যে একটিতে একটি চিত্র ফাইলে প্রদর্শিত বা আউটপুট হওয়া উচিত: নিয়মিত ডোডেকাহেড্রন, ছোট স্টিল্লেটেড ডডেকাহেড্রন, গ্রেট ডোডেকহেড্রন বা গ্রেট স্টেলিলেটেড ডোডেকহেড্রন

রঙীন স্কিমটি উপরের দ্বিতীয় চিত্র হিসাবে হওয়া উচিত। বিপরীত মুখের ছয় জোড়া প্রত্যেকের ছয়টি রঙের মধ্যে একটি লাল, হলুদ, সবুজ, সায়ান, নীল এবং ম্যাজেন্টা হবে। আপনি নিজের ভাষা বা এটির ডকুমেন্টেশনে এই নামগুলির সাথে ডিফল্ট রঙগুলি ব্যবহার করতে পারেন বা এফএফ 10000, এফএফএফএফ 100, 00 এফএফ 100, 00 এফএফএফএফ, 0000FF এবং এফএফ 100 এফএফ রঙ ব্যবহার করতে পারেন (আপনি যদি ইচ্ছা করেন তবে ঘনত্বকে ন্যূনতম 75% এ কমিয়ে এই শব্দগুলি টোন করতে পারেন, উদাহরণস্বরূপ F এর সি এর থেকে হ্রাস করে))

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

পটভূমিটি কালো, ধূসর বা সাদা হতে হবে। প্রান্তগুলি বাদ দেওয়া যেতে পারে, তবে আঁকা থাকলে কালো হওয়া উচিত।

বিধি

প্রদর্শিত পলিহেড্রন প্রস্থে 500 এবং 1000 পিক্সেলের মধ্যে হওয়া আবশ্যক (প্রস্থটিকে যে কোনও দুটি প্রদর্শিত উলম্বের মধ্যে সর্বাধিক দূরত্ব হিসাবে সংজ্ঞায়িত করা হয়েছে।)

প্রদর্শিত পলিহেড্রন অবশ্যই দৃষ্টিভঙ্গি অভিক্ষেপ (পলিহেডন থেকে কমপক্ষে 5 প্রস্থ দূরে), বা অর্থলোগ সংক্রান্ত অভিক্ষেপ (কার্যকরভাবে অসীম দৃষ্টিভঙ্গির সাথে একটি দৃষ্টিভঙ্গি অভিক্ষেপ) হতে হবে।

পলিহেড্রোন অবশ্যই যে কোনও কোণ থেকে প্রদর্শনযোগ্য হবে। (সহজতম কোণটি বেছে নেওয়া এবং হার্ডকোডযুক্ত 2 ডি আকার তৈরি করা গ্রহণযোগ্য নয়)) কোণটি ব্যবহারকারীর দ্বারা নিম্নলিখিত যে কোনও একটি দ্বারা নির্দিষ্ট করা যেতে পারে:

  1. স্টিডিন থেকে, বা ফাংশন বা কমান্ডলাইন পরামিতি হিসাবে তিনটি আবর্তনের সাথে সম্পর্কিত তিনটি কোণের ইনপুট। এগুলি উভয়ই অুলার কোণ হতে পারে (যেখানে প্রথম এবং শেষ ঘূর্ণন একই অক্ষের সাথে হয়) বা টাইট-ব্রায়ান কোণ (যেখানে x, y এবং z অক্ষ সম্পর্কে প্রতিটি ঘূর্ণন থাকে) https://en.wikedia.org/ উইকি / এলিউর_এঙ্গলস (সহজভাবে বলতে গেলে, প্রতিটি ঘূর্ণন x, y, বা z অক্ষের প্রায় যতক্ষণ যায় ততক্ষণ যায় এবং পরপর ঘূর্ণনগুলি লম্ব অক্ষের প্রায় হয়))

  2. ব্যবহারকারীর জন্য x এবং y অক্ষ সম্পর্কে 10 ডিগ্রির বেশি নয় এমন পদক্ষেপে পলিহেড্রন ঘোরানো এবং প্রদর্শনটি রিফ্রেশ করার সুবিধা রয়েছে, যেকোন স্বেচ্ছাসেবী সংখ্যার (পর্দার Z অক্ষকে লম্ব ধরে) ref

পলিহেড্রন অবশ্যই শক্ত হতে হবে, তারের ফ্রেম নয়।

পলিহেডর আঁকার জন্য কোনও বিল্টিনের অনুমতি নেই (আমি আপনাকে দেখছি, ম্যাথামেটিকা!)

স্কোরিং

এটি কোডগল্ফ। বাইটস মধ্যে সংক্ষিপ্ত কোড।

বোনাসেস

যদি আপনি 3 ডি আঁকার জন্য বিল্টিন ব্যবহার না করেন তবে আপনার স্কোরকে 0.5 দিয়ে গুণ করুন।

আপনার স্কোরকে ০.7 দ্বারা গুণিত করুন যদি আপনি স্টোডিন থেকে প্রবেশকৃত পূর্ণসংখ্যার 1-3 দ্বারা বা ফাংশন বা কমান্ডলাইন প্যারামিটার দ্বারা ব্যবহারকারী দ্বারা নির্বাচিত ডোডকেহেড্রোনগুলির তিনটি স্টিলিলেশনগুলি প্রদর্শন করতে পারেন।

আপনি যদি উভয় বোনাসের জন্য যান তবে আপনার স্কোর 0.5 * 0.7 = 0.35 দ্বারা গুণিত হবে

দরকারী তথ্য (নীচে হিসাবে উত্স)

https://en.wikipedia.org/wiki/Regular_dodecahedron

https://en.wikipedia.org/wiki/Regular_icosahedron

ডোডেকেহেড্রোনটির 20 টির সূচি রয়েছে। এর মধ্যে 8 টি নীচের কার্টেসিয়ান (x, y, z) স্থানাঙ্কগুলির সাথে একটি ঘনক্ষেত্রের শীর্ষকে গঠন করে:

(± 1, ± 1, ± 1)

বাকি 12 টি নীচে রয়েছে (ফাই স্বর্ণের অনুপাত)

(0, ± 1 / φ, ± φ)

(± 1 / φ, ± φ, 0)

(± φ, ০, ± 1 / φ)

ছোট স্টিল্লেটেড ডোডেকাহেড্রন এবং গ্রেট ডোডেকহেড্রনের উত্তল হোলটি অবশ্যই একটি নিয়মিত ডোডেকহেড্রন। বহির্মুখগুলি একটি আইকোসেড্রন বর্ণনা করে।

উইকিপিডিয়া অনুসারে একটি আইকোস্যাড্রনের 12 টি শীর্ষকে (0, ± 1, ± φ) চক্রীয় অনুমানের মতো একইভাবে বর্ণনা করা যেতে পারে। ছোট স্টেলিলেটেড ডোডেকেরন এবং গ্রেট ডোডাচেড্রন (উপরের ডোডেকহেড্রোন হিসাবে একই স্কেল) এর বাহ্যিক শিখাগুলি একটি বৃহত আইকোশেড্রন গঠন করে, যেখানে উলম্বের স্থানাঙ্কগুলি (0, ± φ ^ 2, ± φ) এর চক্রীয় অনুমান হয়।

ডোডেকহেড্রন এবং আইকোসাহেড্রনের মুখগুলির মধ্যে কোণগুলি যথাক্রমে 2 আর্টিকান (ফাই) এবং আরকোসস (- (√5) / 3) হয়।

ঘোরানোর বিষয়ে টিপসের জন্য, https://en.wikedia.org/wiki/Rotation_matrix দেখুন

সম্পাদনা: ভুল করে আমি নিয়মিত ডোডেকাহেড্রনকে অনুমতি দিয়েছি এবং এখনই এটি প্রত্যাহার করতে পারি না। স্টেলেটেড পলিহেডারের তিনটিই অঙ্কনের জন্য x0.7 বোনাস। নববর্ষের দিনে আমি এই উত্তরের জন্য ১০০ এর একটি অনুগ্রহ জারি করব যা টাই বিরতি হিসাবে সংক্ষিপ্ততম কোড সহ চারটি পলিহেডারের সর্বাধিক প্রদর্শন করতে পারে।


পলিহেডর অঙ্কন করার জন্য @ লিজিয়নম্যামাল978 বিল্টইনগুলি (যেমন dodecahedron) নিষিদ্ধ। কিছু ভাষার মতো কমান্ড সহ 3 ডি মডেল তৈরির সুবিধা রয়েছে triangle[[a,b,c],[p,q,r],[x,y,z]]। এই ভাষাগুলিতে সাধারণত মডেলটি ঘোরানো এবং প্রদর্শনের জন্য অন্তর্নির্মিত থাকে, স্বয়ংক্রিয়ভাবে লুকানো মুখগুলি প্রদর্শন না করার বিষয়ে যত্ন নেওয়া ইত্যাদি Sol এর মতো সমাধানগুলি অনুমোদিত তবে বোনাসকে আকর্ষণ করবে না। বোনাসের উদ্দেশ্য হ'ল যে ভাষাগুলিতে এই সুবিধাগুলি নেই তাদের প্রতিযোগিতামূলক হতে দেওয়া এবং আরও আকর্ষণীয় সমাধান আকর্ষণ করা।
স্তর নদী সেন্ট

@ লিজিমনম্মল ৯৮78 হা, আমি জানতাম ম্যাথমেটিকাই এমন ভাষা হবে যা সমস্যার সৃষ্টি করে। Polyhedrondataএটি অনুমোদিত নয় কারণ এটি স্পষ্টতই পলিহেডর আঁকার জন্য অন্তর্নির্মিত। যদি আপনার উত্তরটি পলিহেডর আঁকার জন্য অন্তর্নির্মিত ব্যবহার না করে এবং অন্যান্য নিয়ম মেনে চলে তবে তা গ্রহণযোগ্য। আপনার বক্তব্যটি মনে হচ্ছে যে আপনার মুখগুলি সঠিকভাবে রঙ করতে হবে, Polyhedrondataতা আপনাকে কোনওভাবেই বাঁচাতে পারে না, তাই বাস্তবে এটি কিছুটা স্বেচ্ছাসেবী বাধা হতে পারে। আমি কিছুটা হলেও একমত, তবে আমি পোস্টের পরে নিয়ম পরিবর্তন করা এড়াতে সবার কাছে এটি আরও সুন্দর ire
স্তর নদী সেন্ট

উত্তর:


3

পাইথন 2.7, 949 বাইট

ম্যাটপ্লোটিলিব ব্যবহার করে প্লট করা নিয়মিত ডোডেকেহেড্রনের সমাধান এখানে। অগল্ফড কোডের জন্য রুক্ষ রূপরেখা (এখানে দেখানো হয়নি) নীচে বর্ণিত ছিল:

  • শীর্ষগুলি তৈরি করুন প্রান্তগুলি করুন (3 নিকটতম প্রতিবেশী, মডিউল scipy.spatial.KDtree এর উপর ভিত্তি করে)
  • দৈর্ঘ্য 5 (মডিউল নেটওয়ার্কেক্স) সহ গ্রাফ চক্রের ভিত্তিতে মুখগুলি তৈরি করুন
  • ফেসেনরমালগুলি তৈরি করুন (এবং বাহ্যিক মুখের সাধারণ, numpy.cross এর সাথে তাদের নির্বাচন করুন)
  • মুখের নরমালগুলির উপর ভিত্তি করে রঙিন উত্পন্ন করুন
  • ম্যাটপ্ল্লিটিব ব্যবহার করে প্লট করা
import itertools as it
import numpy as np
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import matplotlib.pyplot as plt
v=[p for p in it.product((-1,1),(-1,1),(-1,1))]
g=.5+.5*5**.5
v.extend([p for p in it.product((0,),(-1/g,1/g),(-g,g))])
v.extend([p for p in it.product((-1/g,1/g),(-g,g),(0,))])
v.extend([p for p in it.product((-g,g),(0,),(-1/g,1/g))])
v=np.array(v)
g=[[12,14,5,9,1],[12,1,17,16,0],[12,0,8,4,14],[4,18,19,5,14],[4,8,10,6,18],[5,19,7,11,9],[7,15,13,3,11],[7,19,18,6,15],[6,10,2,13,15],[13,2,16,17,3],[3,17,1,9,11],[16,2,10,8,0]]
a=[2,1,0,3,4,5,0,1,2,3,4,5]
fig = plt.figure()
ax = fig.add_subplot((111),aspect='equal',projection='3d')
ax.set_xlim3d(-2, 2)
ax.set_ylim3d(-2, 2)
ax.set_zlim3d(-2, 2)
for f in range(12):
 c=Poly3DCollection([[tuple(y) for y in v[g[f],:]]], linewidths=1, alpha=1)
 c.set_facecolor([(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0)][a[f]])
 ax.add_collection3d(c)
ax.auto_scale_xyz
plt.show()

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


3

রুবি, 784 বাইট * 0.5 * 0.7 = 274.4

আমার নিজের উত্তর, সুতরাং আমার অনুগ্রহের যোগ্য নয়।

অ-থ্রিডি বিল্টিন বোনাস এবং সমস্ত স্টেলেশন বোনাস অঙ্কন উভয়ের জন্যই উপযুক্ত।

->t,n{o=[]
g=->a{a.reduce(:+)/5}
f=->u,v,w,m{x=u.dup;y=v.dup;z=w.dup
15.times{|i|k,l=("i".to_c**(n[i/5]/90.0)).rect
j=i%5
x[j],y[j],z[j]=y[j],x[j]*k+z[j]*l,z[j]*k-x[j]*l}
p=g[x];q=g[y];r=g[z]
a=[0,1,-i=0.382,-1][t]*e=r<=>0
b=[j=1+i,0,j,j][t]*e
c=[-i*j,-i,1,i][t]*e
d=[j*j,j,0,0][t]*e
5.times{|i|o<<"<path id=\"#{"%9.0f"%(z[i]*a+r*b+(z[i-2]+z[i-3])*c+2*r*d+999)}\"
d=\"M#{(x[i]*a+p*b)} #{(y[i]*a+q*b)}L#{(x[i-2]*c+p*d)} #{(y[i-2]*c+q*d)}L#{(x[i-3]*c+p*d)} #{(y[i-3]*c+q*d)}\"
fill=\"##{m}\"/>"}}
a=233
b=377
z=[0,a,b,a,0]
y=[a,b,0,-b,-a]
x=[b,0,-a,0,b]
w=[-b,0,a,0,-b]
f[x,y,z,'F0F']
f[w,y,z,'0F0']
f[y,z,x,'00F']
f[y,z,w,'FF0']
f[z,x,y,'F00']
f[z,w,y,'0FF']
s=File.open("p.svg","w")
s.puts'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-450 -450 900 900">',o.sort,'</svg>'
s.close}

ফাংশন পরামিতি হিসাবে ইনপুট

একটি পূর্ণসংখ্যা 0..3 নিয়মিত ডোডেকেহেড্রন, ছোট স্টিল্লেটেড ডোডেকাহেড্রন, গ্রেট স্টলেলেটেড ডোডেকহেড্রন সম্পর্কিত

এক্স, ওয়াই এবং এক্স (আবার) অক্ষ সম্পর্কে ঘোরার জন্য ডিগ্রি কোণগুলির সাথে সম্পর্কিত তিনটি পূর্ণসংখ্যার একটি অ্যারে (যথাযথ ইউলারের কোণ, যে কোনও ঘূর্ণন অর্জন করতে সক্ষম করে))

p.svgএকটি ওয়েব ব্রাউজারে প্রদর্শিত হতে পারে এমন একটি ফাইল আউটপুট করুন ।

ব্যাখ্যা

কোডের নীচে অ্যারে x, y, z এ একটি ছোট স্টিল্লেটেড ডোডেকহেড্রনের একটি মুখের বাইরের পয়েন্টগুলির স্থানাঙ্ক থাকে। এটি আইকোশেড্রোনটিতে শিলালিপি করা যেতে পারে যার 12 টি সূচকগুলি (+/- 377, + / - 233, + / - 0) এর চক্রীয় অনুমানের দ্বারা সংজ্ঞায়িত করা হয়েছে। মনে রাখবেন যে 377 এবং 233 ধারাবাহিকভাবে ফিবোনাচি সংখ্যা এবং অতএব 377/233 সুবর্ণ অনুপাতের জন্য একটি দুর্দান্ত সমীকরণ।

একটি অতিরিক্ত অ্যারে ডাব্লুতে এক্স সমান্তরাল থাকে -1 দ্বারা গুণিত, এক্স প্লেনে প্রতিবিম্বের সমতুল্য। এক্স, ওয়াই, জেড এবং ডাব্লু, ওয়াই, জে এর বিভিন্ন চক্রীয় ক্রমের সাথে প্রতিটি রঙের জন্য একবার ফাংশন এফ 6 বার বলা হয়।

তিনটি আবর্তন n [] এ পরামিতি হিসাবে পাস করা হয়। রুবিতে পাপ এবং কস ব্যবহার করতে, এটি করা দরকার include Math। এড়াতে, কোণটির কোসাইন এবং সাইন -1 এর বর্গমূলকে "i"একটি শক্তিতে (ডিগ্রি / 90-এ কোণে) বাড়িয়ে প্রাপ্ত করা হয় এই সংখ্যার আসল এবং কল্পিত অংশগুলি কে (কোসাইন) এবং l এ সঞ্চিত রয়েছে সাইন)

ঘোরার আগে, x এবং y মানের বিনিময় হয়। তারপরে ম্যাট্রিক্সের গুণটি y অক্ষরের সম্পর্কে ঘোরানোর জন্য y এবং z মানগুলিতে প্রয়োগ করা হয়। মান বিনিময় তিনটি আবর্তকে একটি লুপে চালিত করতে সক্ষম করে।

এখনও অবধি, আমাদের কেবলমাত্র পয়েন্টগুলির একটি রিং রয়েছে। বাকিটি পেতে, আমাদের পেন্টাগন / তারাটির কেন্দ্র খুঁজে বের করতে হবে। এটি পি, কিউ, আর-তে সংরক্ষিত 5 টি শীর্ষ কোণের স্থানাঙ্কগুলির গড় সন্ধান করে করা হয়।

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

মুখটি 5 টি ত্রিভুজ দ্বারা নির্মিত, যার শীর্ষে ছোট স্টেলেটেড ডোডেকএহেড্রন এবং মুখের কেন্দ্রস্থলের বাইরের দিকের কোণগুলি রৈখিক সংমিশ্রণ। ছোট স্টলেলেটেড ডোডেকহেড্রনের ক্ষেত্রে, ত্রিভুজগুলির টিপসের জন্য আমরা একটি = 1 এবং খ = 0 নির্ধারণ করেছি (এক্স, ওয়াই, জেড থেকে অবদান 1 এবং পি, কিউ, আর থেকে 0) contribution ত্রিভুজের 2 টি বেস শীর্ষকে জন্য আমরা সি = -0.382 (এক্স, ওয়াই, জেড থেকে অবদান 1 / সুবর্ণ অনুপাত ^ 2) এবং d = 1.382 (পি, কিউ, আর এর অবদান) নির্ধারণ করেছি theণাত্মক অবদানের কারণটি হ'ল যে ত্রিভুজ এর বেস অনুপাত বিপরীতমুখী টিপস, যা মুখের বিপরীত দিকে আছে পদে সংজ্ঞায়িত করা হয়। প্রাপ্ত স্থানাঙ্কগুলি প্রয়োজনীয় হিসাবে ই দ্বারা গুণিত হয়।

চারটি নামবিহীন অ্যারে যাদের মানগুলি a,b,c,dনিয়মিত ডোডেকাহেড্রন, ছোট স্টেলিলেটেড ডোডেকাহেড্রন, গ্রেট ডোডেকহেড্রন এবং গ্রেট স্টেলেটেড ডোডেকহেড্রনের জন্য প্রয়োজনীয় মানগুলি অন্তর্ভুক্ত করা হয়েছে, পরিবর্তনশীল অনুসারে নির্বাচিত tনোট করুন যে ছোট স্টিল্লেটেড ডোডেকহেড্রন এবং গ্রেট ডোডেকহেড্রন, a + b = c + D = 1। A + b = c + d টি সম্পর্ক অন্যান্য আকারের ক্ষেত্রে প্রযোজ্য তবে ভিন্ন স্কেল প্রয়োগ করা হয়।

প্রতিটি ত্রিভুজটির জন্য এসভিজি কোডের একটি লাইন তৈরি করা হয়। এটিতে একটি ত্রিভুজটির 3 টি সূক্ষ্মের z স্থানাঙ্কের যোগফল, ত্রিভুজের তিনটি স্থানাঙ্কের শীর্ষ বিস্তৃত বিবরণ এবং একটি বর্ণ রয়েছে। নোট করুন যে আমরা orthographic প্রক্ষেপণে z অক্ষটি নীচে দেখি। এইভাবে 2D x = 3 ডি x এবং 2 ডি y = 3 ডি। লাইন যুক্ত করা হয়h.

সবশেষে, সমস্ত ফাংশন কল শেষ হয়ে গেলে, h এর বাছাই করা হয় যাতে সর্বোচ্চ z মান (সামনে) এর ত্রিভুজগুলি শেষের চক্রান্ত করা যায় এবং পুরো জিনিসটি যথাযথ শিরোনাম এবং পাদচরণের পাঠ্য সহ একটি svg ফাইল হিসাবে সংরক্ষণ করা হয়।

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

h=->t,n{                                              #t=type of polygon,n=angles of rotation
o=[]                                                  #array for output
g=->a{a.reduce(:+)/5}                                 #auxiliary function for finding average of 5 points

f=->u,v,w,m{x=u.dup;y=v.dup;z=w.dup                   #function to take 5 points u,v,w and plot one face (5 triangles) of the output in colour m 

  15.times{|i|                                        #for each of 3 rotation angle and 5 points
    k,l=("i".to_c**(n[i/5]/90.0)).rect                #calculate the cos and sine of the angle, by raising sqrt(-1)="i" to a power
    j=i%5                                             #for each of the 5 points
    x[j],y[j],z[j]=y[j],x[j]*k+z[j]*l,z[j]*k-x[j]*l}  #swap x and y, then perform maxtrix rotation on (new) y and z.

  p=g[x];q=g[y];r=g[z]                                #find centre p,q,r of the face whose 5 points (in the case of small stellated dodecahedron) are in x,y,z

  e=r<=>0                                             #if r is positive, face is front. if negative, face is back, so we need to transform it to opposite face.
  a=[0,              1,    -0.382,    -1][t]*e        #contribution of 5 points x,y,z to triangle tip vertex coordinates
  b=[1.382,          0,     1.382,     1.382][t]*e    #contribution of centre p,q,r to triangle tip vertex coordinates
  c=[-0.528,        -0.382, 1,         0.382][t]*e    #contribution of 5 points x,y,z to coordinates of each triangle base vertex 
  d=[1.901,          1.382, 0,         0][t]*e        #contribution of centre p,q,r to coordinates of each triangle base vertex

  5.times{|i|
  o<<"<path id=\"#{"%9.0f"%(z[i]*a+r*b+(z[i-2]+z[i-3])*c+2*r*d+999)}\"
d=\"M#{(x[i]*a+p*b)} #{(y[i]*a+q*b)}L#{(x[i-2]*c+p*d)} #{(y[i-2]*c+q*d)}L#{(x[i-3]*c+p*d)} #{(y[i-3]*c+q*d)}\"
fill=\"##{m}\"/>"}                                    #write svg code for this triangle 
}

  a=233                                               #a,b =coordinate standard values 
  b=377
  z=[0,a,b,a,0]                                       #z coordinates for one face of stellated dodecahedron 
  y=[a,b,0,-b,-a]                                     #y coordinates
  x=[b,0,-a,0,b]                                      #x coordinates
  w=[-b,0,a,0,-b]                                     #alternate  x coordinates

  f[x,y,z,'F0F']                                      #call f
  f[w,y,z,'0F0']                                      #to plot
  f[y,z,x,'00F']                                      #each
  f[y,z,w,'FF0']                                      #face
  f[z,x,y,'F00']                                      #in
  f[z,w,y,'0FF']                                      #turn

  s=File.open("p.svg","w")                            #sort output in o, plot front triangles last
  s.puts'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-450 -450 900 900">',o.sort,'</svg>'
  s.close                                             #add header and footer, and save as svg
}

t=gets.to_i
n=[]
3.times{n<<gets.to_i}
h[t,n]

আউটপুট

ছোট স্টিল্লেটেড ডোডেকহেড্রনের জন্য (শীঘ্রই অন্যান্য বহুভুজের কিছু চিত্র যুক্ত করবে)

1,0,0,0 হোম পজিশন

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

30 ডিগ্রি নীচে 1,30,0,0 ঘোরান

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

1,0,30,0 ডান 30 ডিগ্রি ঘোরান (দ্রষ্টব্য: নিখুঁত দিকের দর্শন জন্য, ঘূর্ণনটি atan(1/golden ratio)= 31.7 ডিগ্রি হবে, সুতরাং আমরা এখনও নীল একটি ছোট স্লাইভার দেখতে পাবো)

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

1,0,20,0 ডান 20 ডিগ্রি ঘোরান

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

1,60,10, -63 নীচে, ডান এবং উপরে ঘোরান (কেবলমাত্র 3 টি আবর্তনের সাথে অভিমুখে উদাহরণ)

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

0,30,0,0 নিয়মিত ডোডেকেহেড্রন

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

2,0,20,0 দুর্দান্ত ডোডেকেহেড্রন

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

3,45,45,45 দুর্দান্ত স্টলেলেটেড ডোডকেহেড্রন এখানে চিত্র বর্ণনা লিখুন


3

গণিত, 426 424 বাইট

Graphics3D[{Red,Yellow,Green,Cyan,Blue,Magenta}~Riffle~(a=Partition)[Polygon/@Uncompress@"1:eJxtkjEKwkAURNeoySYgeAVP4QFsrcTGTiyUBcEith7A2wgKgpVH8/vgs2TYZmAyw9/5k784XDbHVwihnxisU39N9SiEdI8GO/uWHpXBtjFAgJ7HToFl5WabEdJ+anCqDb6dU9RP65NR59EnI0CZDAWYjFmomBmPCn3/hVVwc9s4xYd66wYqFJVvhMz75vWlHIkhG2HBDJ1V3kYps7z7jG6GomIu/QUJKTGkdtlX2pDM8m6pydyzHIOElBhyG6V9cxulzPldaVJ6lpuUkKUTzWcm+0obkrn0f3OT0rMc0jDkD37nlUo="~a~3~a~5,2],Boxed->1<0]

Graphics3Dআকারটি প্রদর্শন করতে অন্তর্নির্মিত ব্যবহার করে । বেশিরভাগ বাইটগুলি সংকুচিত ভার্টেক্স অবস্থানগুলি দ্বারা নেওয়া হয়, তবে এটি পরে Partitionরূপে ব্যবহারযোগ্য একটি ফর্ম রূপে রূপান্তরিত হয় Polygon। অবশেষে:

নোট করুন যে এই আকৃতিটি ক্লিক করে এবং টেনে নিয়ে ঘোরানো যেতে পারে।


ওএমজি, আমি নিয়মিত ডডিকেহেড্রন মুছে ফেলছিলাম! আমি যতদূর বলতে পারি (ম্যাথমেটিকাকে আমি জানি না বা আছে) এটি নিয়মের সাথে মেনে চলে, সুতরাং +1।
স্তর নদী সেন্ট

@ স্টিভেরিলিল আমি মনে করি না যে এটি আকারটি খুব বেশি বদলে দেবে, তবে আমি এটিকে আবার স্ক্র্যাচ থেকে পুনর্লিখন করতে পছন্দ করব না।
LegionMammal978

আপনার উত্তর বৈধ থাকবে, আমি বিধি পরিবর্তন করতে যাচ্ছি না, এটি খারাপ ফর্ম হবে। তবে তিনটি স্টেলিলেটেড পলিহেডারের ০.7 বোনাস ছাড়াও, আমি উত্তরের জন্য একটি অনুদানের প্রস্তাব দিয়েছি যা বেশিরভাগ চারটি পলিহেডর উত্পাদন করতে পারে। আপনি যদি নিজের উত্তরটি আপডেট করার সিদ্ধান্ত নিয়ে থাকেন তবে আমি মনে করি আপনি অ্যালগোরিদমিকভাবে স্থানাঙ্কগুলি তৈরি করে (বয়সের প্রচুর পরিমাণে সাশ্রয় করতে পারেন (প্রশ্নের দরকারী তথ্য বিভাগটি দেখুন)))
লেভেল রিভার সেন্ট

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