টাইলিং, প্রদত্ত ভার্টেক্স কনফিগারেশন


11

কার্য

কাজটি হল একটি বহুভুজ কনফিগারেশন প্রদত্ত বহুভুজগুলি টাইল করা।

স্কোরিং

আপনার স্কোরটি আপনার জমা দেওয়ার "জটিলতার স্তরের" সমান। জটিলতার মাত্রাগুলি संचयी, যার অর্থ # 3 এ পৌঁছানোর জন্য আপনাকে অবশ্যই # 1 & # 2 সমর্থন করতে হবে।

সমান জটিল স্তরে জমা দেওয়া বাইট গণনা দ্বারা পৃথক করা হয়; সর্বনিম্ন জয়

ইনপুট

ইনপুট হ'ল একটি ভার্টেক্স কনফিগারেশন যুক্ত একটি স্ট্রিং যা একটি শীর্ষবিন্দু চিত্র উপস্থাপন করে। এটি হল, পূর্ণসংখ্যার বিন্দুর দ্বারা পৃথক করা তালিকা, যেখানে প্রতিটি পূর্ণসংখ্যা (এন) একটি নিয়মিত এন-গনকে উপস্থাপিত করে, যা একটি সাধারণ শীর্ষবৃত্ত দ্বারা সংযুক্ত থাকে।

নিম্নলিখিত ভার্টেক্স কনফিগারেশনগুলি সমর্থন করা আবশ্যক:

  • 3.3.3.3.3.3
  • 3.3.3.3.6
  • 3.3.3.4.4 (দ্রষ্টব্য যে অর্ডারটি ভার্টেক্স চিত্রে প্রতিফলিত হয়েছে, সুতরাং নীচে পৃথক রয়েছে)
  • 3.3.4.3.4
  • 3.12.12
  • 3.4.6.4
  • 3.6.3.6
  • 4.4.4.4
  • 4.6.12
  • 4.8.8
  • 6.6.6

আউটপুট - জটিলতা স্তর # 1: ভার্টেক্স চিত্র

এই জটিলতার স্তরে, আউটপুট একটি চিত্র যা প্রদত্ত ইনপুটটির সাথে সামঞ্জস্যভাবে ভার্টেক্স চিত্র দেখায়।

ভার্টেক্স Fচিত্রটি আউটপুট হওয়া উচিত, পুরো টাইলিংয়ের নয় এমনটি বোঝানোর জন্য ইনপুটটি প্রম্পট করা হয় ।

উদাহরণস্বরূপ F3.6.3.6এই ভার্টেক্স চিত্রটি দেয়:

৩..3.৩.। ভার্টেক্স চিত্র

আউটপুট - জটিলতা স্তর # 2: টাইলিং

এই জটিলতার স্তরের আউটপুটটি এমন চিত্র যা প্রদত্ত ইনপুটটির সাথে সামঞ্জস্যভাবে ভার্টেক্স চিত্র ব্যবহার করে একটি অভিন্ন টাইলিং দেখায় ।

উদাহরণস্বরূপ 3.6.3.6এই টাইলিং দেয়:

3.6.3.6 টাইলিং

রঙ বা ফর্ম্যাট (লুফোলগুলি ব্যতীত) কোনও বিধিনিষেধ নেই।

আউটপুট - জটিলতা স্তর # 3: দ্বৈত টাইলিং

এই জটিলতার স্তরে প্রতিটি টাইলিং থেকে একটি 'ডুয়েল টাইলিং' গঠন করা যেতে পারে। এটি প্রতিটি বহুভুজের কেন্দ্র থেকে প্রতিটি সীমান্তবর্তী বহুভুজের কেন্দ্রে লাইনগুলি অঙ্কন করে অর্জিত হয়।

ডুয়াল টাইলিং একটি দ্বারা ইনপুট প্রিপেন্ডিং দ্বারা নির্দিষ্ট করা হয় V

উদাহরণস্বরূপ V3.6.3.6এই দ্বৈত আচ্ছাদন দেয় (লাল):

V3.6.3.6 টাইলিং


এর মধ্যে কয়েকটি টিলিংয়ের প্রতিশব্দ রয়েছে। উদাহরণস্বরূপ নিম্নলিখিত সব একই: 3.3.3.4.4 3.3.4.4.3 3.4.4.3.3 4.4.3.3.3 4.3.3.3.4। আমাদের কি সমস্ত প্রতিশব্দ, বা কেবল বর্ণনামূলকভাবে নীচের একটিকে (প্রশ্নে দেওয়া হিসাবে) সমর্থন করতে হবে? এছাড়াও, 3.3.3.3.6দুটি আয়না চিত্র ফর্ম উপস্থিত। আমি বুঝতে পারি হয় গ্রহণযোগ্য।
স্তর নদী সেন্ট

আপনার লিঙ্ক করা পৃষ্ঠাটি প্রদত্ত তালিকার সাথে মেলে না। 3.3.3.4.4উদাহরণস্বরূপ অনুপস্থিত। en.wikedia.org/wiki/… আপনার তালিকার সাথে ঠিক মেলে। আমি বুঝতে পারি যে রূপরেখা বা ভরাট বহুভুজগুলি গ্রহণযোগ্য (বা দুটির সংমিশ্রণ?) কিছু দ্বৈত ইতিমধ্যে তালিকায় রয়েছে। উদাহরণস্বরূপ 4.4.4.4দ্বৈত নিজস্ব এবং 3.3.3.3.3.3এবং 6.6.6mutally দ্বৈত হয়। যেহেতু দ্বৈতগুলি স্বাধীনভাবে তাদের পিতামাতার সাথে প্রদর্শিত হয়, আমি বুঝতে পারি যে পিতামাতার সাথে সঠিক প্রান্তিককরণের প্রয়োজন নেই।
স্তর নদী সেন্ট

তালিকায় যেমনটি প্রদর্শিত হবে তেমন আপনাকে ইনপুট সমর্থন করতে হবে - আপনি প্রতিশব্দটি সমর্থন করতে পারেন তবে আপনার প্রয়োজন নেই - আপনাকে অবশ্যই সমস্ত দ্বৈত এমনকি স্ব-দ্বৈতকে সমর্থন করতে হবে।
jsh

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

এখন আপনি স্কোরিং পরিবর্তন করেছেন, টাই-ব্রেক কি? এটি কি এখনও সংক্ষিপ্ততম কোড? যদি তা হয়, তবে ভার্টেক্স কনফিগারেশনগুলি কি বিন্দু দ্বারা সীমিত করতে হবে বা আমরা কমা বা স্থানের মতো আরও একটি প্রতীক বেছে নিতে পারি?
স্তর নদী সেন্ট

উত্তর:


9

বিবিসি বেসিক

Rev 1 গল্ফযুক্ত কোড, 655 ASCII অক্ষর, টোকেনযুক্ত ফাইলাইজ 614

অনুসন্ধানের আগে A.B..Nসংখ্যায় স্ট্রিং হ্যাশ করে (1*A+2*B+..n*N)+nএবং কেবল একটি অনুবাদ ভেক্টর (অন্যটি কোড দ্বারা উত্পন্ন হয়) সংরক্ষণ করে ডেটা টেবিলের কিছু বড় উন্নতি, যখন আমি গল্ফিং শেষ করেছি তখন আরও ব্যাখ্যা।

t=PI*2DIMm(9)
c=0z=0INPUTz$
FORi=1TOLEN(z$)d%=VAL(MID$(z$,i))IFd%c+=1m(c)=d%i-=d%=12z+=c*d%
NEXTREPEATREADl,e,f
UNTILl=z+c
l=4-3*(m(3)MOD3=0)-8*(l=59)
DATA69,0,70,65,100,35,66,149,0,49,109,0,52,80,0,55,0,189,39,120,0,44,40,40,58,55,95,47,136,0,59,40,0
VDU23,23,3|
FORr=-9TO19FORs=-9TO9a=1+e*(r*2+s)-f*l*s/4b=1+f*(r*2+s)+e*l*s/4p=40q=0FORk=1TOm(c)/2FORj=1TOc
n=m(j)o=TAN(PI/3)IFe=109ANDn<>4o=1
w=-p*COS(t/n)-q*SIN(t/n)q=p*SIN(t/n)-q*COS(t/n)p=w
u=p:v=q
x=a:y=b
MOVEx,y
FORi=1TO14x+=u*2y+=v*2IFVAL(z$)DRAWx,y ELSEGCOL9LINEx-u-v/o,y-v+u/o,x-u+v/TAN(PI/n),y-v-u/TAN(PI/n)
w=v*COS(t/n)-u*SIN(t/n)u=v*SIN(t/n)+u*COS(t/n)v=w
NEXTNEXT
p=u:q=v
a=x:b=y
NEXTNEXTNEXT

রেভ 0 গল্ফযুক্ত কোড, 770 এএসসিআইআই অক্ষর, টোকেনযুক্ত ফাইলাইজ 728 8

আমি এখানে যা কিছু করেছি তা হ'ল মন্তব্যগুলি, অপ্রয়োজনীয় শ্বেতস্থান এবং উদ্ধৃতি চিহ্নগুলি মুছে ফেলা এবং সমস্তগুলি DATAএক লাইনে রেখে দেওয়া। আরও গল্ফ করার জন্য অবশ্যই জায়গা আছে।

t=PI*2DIMm(9)
c=0INPUTz$
FORi=1TOLEN(z$)d%=VAL(MID$(z$,i))IFd%c+=1:m(c)=d%:i-=d%=12
NEXTREPEATREADl$,e,f,g,h
UNTILMID$(z$,1-(VAL(z$)=0))=l$
DATA3.3.3.3.3.3,240,0,120,70,3.3.3.3.6,200,70,40,210,3.3.3.4.4,80,0,40,150,3.3.4.3.4,-40,150,150,40,3.12.12,300,0,150,260,3.4.6.4,220,0,110,188,3.6.3.6,160,0,80,140,4.4.4.4,80,0,0,80,4.6.12,0,380,330,-190,4.8.8,272,0,136,136,6.6.6,240,0,120,70
VDU23,23,3|
FORr=-9TO19 FORs=0TO9a=1+e*r+g*s
b=1+f*r+h*s
p=40q=0FORk=1TOm(c)/2FORj=1TOc
n=m(j)o=TAN(PI/3):IFe=220ANDn<>4o=1
w=-p*COS(t/n)-q*SIN(t/n)q=p*SIN(t/n)-q*COS(t/n)p=w
u=p:v=q
x=a:y=b
MOVEx,y
FORi=1TO14x+=u*2y+=v*2IFVAL(z$)DRAWx,y ELSEGCOL9LINEx-u-v/o,y-v+u/o,x-u+v/TAN(PI/n),y-v-u/TAN(PI/n)
w=v*COS(t/n)-u*SIN(t/n)u=v*SIN(t/n)+u*COS(t/n)v=w
NEXTNEXT
p=u:q=v
a=x:b=y
NEXTNEXTNEXT

ব্যাখ্যা

এটি আমার আগের স্তর 1 উত্তরটির ধারাবাহিকতা, তবে আমি এটি আলাদাভাবে পোস্ট করার সিদ্ধান্ত নিয়েছিলাম কারণ এটি দীর্ঘ।

স্তর 2

এটি আমার পূর্ববর্তী উত্তর থেকে আমার "স্তর 1.5" টেম্পলেটগুলির অনুবাদ দ্বারা অর্জন করা হয়েছে। প্রতিটি টাইলিংয়ের জন্য দুটি অনুবাদ ভেক্টর হার্ডকডযুক্ত। আমি 80 এবং উচ্চতা 70 এর একটি বিস্ময়কর ত্রিভুজ একটি সমবাহু ত্রিভুজের খুব ভাল অনুমান এবং (56,56)এটি হাইপোপেনিউস ভেক্টর সহ একটি ডান ত্রিভুজটি একটি অনুমিতি দৈর্ঘ্য 80 এর খুব কাছাকাছি রয়েছে বলে আমি সুবিধা গ্রহণ করি take

স্তর 3

দ্বৈতগুলি প্লট করার জন্য, বহুভুজের একটি প্রান্তটি প্লট করার পরিবর্তে, আমরা বহুভুজের কেন্দ্রে একটি প্রান্তটি মাঝের অংশ থেকে প্লট করব। এটি প্রান্তের ডান কোণে এবং 1/TAN/(PI/n)ভেক্টরের (ইউ, ভি) দৈর্ঘ্য রয়েছে যা ঘুরিয়ে ঘুরিয়ে প্রান্তের অর্ধেক দীর্ঘ হয়।

দুর্ভাগ্যবশত, কারণ tilings নির্দিষ্ট বহুভুজ 3.3.3.3.6এবং 3.4.6.4স্পষ্টভাবে অঙ্কিত করা হয় না, তারা অঙ্কিত হবে না যদি আমরা শুধুমাত্র এই করেনি। সুতরাং স্পোকটি বহুভুজ থেকে বাহ্যিক প্রসারিত হয়। বাহ্যিক এক্সটেনশন ভেরিয়েবল দ্বারা নিয়ন্ত্রিত হয় o

ডিফল্টরূপে এক্সটেনশনটি ত্রিভুজের কেন্দ্রে পৌঁছানোর জন্য পর্যাপ্ত, তবে 3.4.6.4স্কোয়ারগুলির ডুয়ালগুলি আঁকার জন্য এটি আরও প্রসারিত করা দরকার যা স্পষ্টভাবে চক্রান্ত করা হয়নি। হেক্সাগন এবং ত্রিভুজগুলি স্পষ্টভাবে প্লট করা হলে, অনুপস্থিত স্কোয়ারগুলি পূরণ করার জন্য পর্যাপ্ত বর্ধিতাংশ প্রয়োগ করা হয়, তবে পার্শ্ববর্তী ত্রিভুজগুলিতে জালিয়াতিপূর্ণ রেখাগুলি এড়াতে স্কোয়ারগুলি স্পষ্টভাবে প্লট করা হলে স্বাভাবিক এক্সটেনশন প্রয়োগ করা হয়।

স্পোক এক্সটেনশানগুলি ছাড়া এগুলি দেখতে তাদের দেখতে কেমন। দ্বৈত প্যাটার্নের গর্তগুলি পরিষ্কারভাবে দেখা যায়। সঠিক আউটপুট উত্তরের নীচে মূল ছবিতে দেখা যাবে

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

মন্তব্য কোড

আমার আগের উত্তর থেকে পার্থক্য ইনলাইন নির্দেশিত

  t=PI*2                                          :REM constant Tau = PI*2

  DIMm(9)                                         :REM declare array for the numbers in the input
  c=0                                             :REM number of polygons in the list

  INPUTz$
  FORi=1TOLEN(z$)                                 :REM for each character in the input
    d%=VAL(MID$(z$,i))                            :REM use VAL to return the numeric value of the substring to the right and store to integer variable
    IF d% c+=1 :m(c)=d%: i-=d%=12                 :REM if the last character read was a number, d% contains it, otherwise 0. Advance c and store to m. If it is 12, increment i to skip a character.
  NEXT

  REM BLOCK OF NEW CODE to define vectors (e,f) and (g,h) for each possible tiling

  REPEAT
    READ l$,e,f,g,h                               :REM read an entire line of the data below
  UNTIL MID$(z$,1-(VAL(z$)=0))=l$                 :REM abort the loop when l$ coincides with the input. the MID$ strips off the 'V' from the input where necessary.

  DATA"3.3.3.3.3.3",240,0,120,70
  DATA"3.3.3.3.6",200,70,40,210
  DATA"3.3.3.4.4",80,0,40,150
  DATA"3.3.4.3.4",-40,150,150,40
  DATA"3.12.12",300,0,150,260
  DATA"3.4.6.4",220,0,110,188
  DATA"3.6.3.6",160,0,80,140
  DATA"4.4.4.4",80,0,0,80
  DATA"4.6.12",0,380,330,-190
  DATA"4.8.8",272,0,136,136
  DATA"6.6.6",240,0,120,70

  VDU23,23,3|                                           :REM change linewidth to 3 (default is 1)

  REM END BLOCK OF NEW CODE

  FORr=-9TO19 FORs=0TO9                                 :REM two new loops for translations

      a=1+e*r+g*s                                       :REM modified code for
      b=1+f*r+h*s                                       :REM coordinates to start drawing at


      p=40:q=0                                          :REM vector of first line

      FORk=1TOm(c)/2                                    :REM draw half as many vertex figures as there are sides on the last polygon in the list

        FORj=1TOc                                       :REM for each polygon on the list
          n=m(j)                                        :REM n=number of sides
          o=TAN(PI/3): IF e=220 AND n<>4 o=1            :REM new code for the spoke extension 1/o. 

          w=-p*COS(t/n)-q*SIN(t/n)                      :REM rotate the starting vector anticlockwise by the internal angle of the current polygon
          q=p*SIN(t/n)-q*COS(t/n)                       :REM to avoid overlapping the previous one, if any.
          p=w

          u=p:v=q                                       :REM make a local copy of the vector and coordinates
          x=a:y=b                                       :REM to avoid corruption of p,q,a,b during the drawing of the polygon
          MOVE x,y                                      :REM move the graphics cursor to the start without drawing
          FORi=1TO14                                    :REM do 14 iterations regardless of the number of sides on the polygon
            x+=u*2                                      :REM increment x and y by the vector representing the side
            y+=v*2                                      :REM the value is double (u,v) to facilitate drawing duals later

            REM if z$ begins with a numeric character, draw an edge. If not, change to red and draw a spoke.
            IFVAL(z$) DRAW x,y ELSE GCOL9: LINEx-u-v/o,y-v+u/o,x-u+v/TAN(PI/n),y-v-u/TAN(PI/n)             

            w=v*COS(t/n)-u*SIN(t/n)                     :REM rotate the vector clockwise
            u=v*SIN(t/n)+u*COS(t/n)                     :REM through the external angle of the polygon
            v=w
          NEXT                                          :REM draw next edge of the current polygon
        NEXT                                            :REM draw next polygon of the current vertex

        p=u:q=v                                         :REM once the vertex is finished, we will be two sides around the perimeter of the last polygon.
        a=x:b=y                                         :REM copy the position and direction data into p,q,a,b.
      NEXT                                              :REM draw next vertex figure

    NEXT                                                :REM close the two new translation loops
  NEXT

আউটপুট

প্রোগ্রামটি প্রতিটি রানের জন্য কেবল একটি টাইলিং বা দ্বৈত সম্পাদন করে। তবে এটি লাল রঙে ডুয়ালগুলি প্লট করে। স্থান বাঁচাতে, আমি নিয়মিত টাইলিংয়ের উপরে দ্বৈতকে উচ্চমানের জন্য পর্দাটি সাফ না করে দুবার প্রোগ্রামটি চালিয়েছি।

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


8

ম্যাথামেটিকাল

স্তর 1 এ বেসিক টাইল টেমপ্লেট রয়েছে যা বিমানকে টাইল করতে বারবার স্ট্যাম্প করা হয়।

স্তর 2 টাইলিং করে।

এখনও 2 টি টিলিং রয়েছে যা আমি অর্জন করতে পারিনি। অনুবাদগুলির পাশাপাশি এগুলি রোটেশন প্রয়োজন বলে মনে হয়।

স্তর 1: ভার্টেক্স চিত্র (559 বাইট)

nGon[n_]:=
{ColorData[46,"ColorList"][[n]],Polygon@Switch[n,
3,{{0,0},{-1/2,.866},{-1,0},{0,0}},
4,{{0,0},{0,1},{-1,1},{-1,0},{0,0}},
6,Table[{Cos[i 2Pi/n],Sin[i 2Pi/n]}+{-.5,.866},{i,0,n}],
8,Table[1.31{Cos[i Pi/4],Sin[i Pi/4]}+{-0.5`,1.207},{i,1/2,9}],
_,Table[2{Cos[i 2Pi/n],Sin[i 2Pi/n]}+{-0.5176,1.932},{i,1/2,13}]]}
innerAngle[n_]:=180-360/n
g[{}]=0;
g[a_]:=-(Plus@@innerAngle/@a)

h[{{},__,out_}]:=out
h[{list_,angles_,out_}]:=(
z=GeometricTransformation[nGon[l=list[[1]]],RotationTransform[g[angles] Degree]];
h[{Rest@list,Append[angles,l],Append[out,z]}])

পরীক্ষামূলক

Row[Graphics[{EdgeForm[{Blue}], #}, 
      ImageSize -> 70] & @@ {h[{#, {}, {}}]} & /@ {{3, 3, 3, 3, 3, 
    3}, {3, 3, 3, 3, 6}, {3, 3, 3, 4, 4}, {3, 3, 4, 3, 4}, {3, 12, 
    12}, {3, 4, 6, 4}, {3, 6, 3, 6}, {4, 4, 4, 4}, {4, 6, 12}, {4, 8, 
    8}, {6, 6, 6}}]

স্ট্যাম্পের


স্তর 2: টাইলিং (690 অতিরিক্ত বাইট)

বিধিগুলি প্রতিটি কনফিগারেশনের জন্য টাইলিং অফসেট এবং ইনডেন্টগুলি ফেরত দেয়।

r হ'ল মূল ফাংশন যা কাতরতা আউটপুট করে।

pটেম্পলেট এবং সম্পর্কিত টাইলিং দেখায়। সাদা স্পেসগুলি টেম্পলেট দ্বারা আচ্ছাদিত নয়গুলির সাথে সমান।

rules={
{3,6,3,6}-> {2,3.47,0,0},
{4,4,4,4}-> {1,1,0,0},
{6,6,6}-> {3,2.6,1.5,0},
{3,3,3,3,3,3}-> {1.5,1.74,0,.9},
{3,3,3,3,6}-> {2,2.6,-0.4,1.8},

{4,6,12}->{4.2,4.9,0,2.5},
{3,3,4,3,4}-> {1.87,1.86,-.5,-0.5},
{4,8,8}-> {3.4,3.4,0,0},
{3,3,3,4,4}-> {2,1.87,.52,0},
{3,12,12}-> {3.82,6.73,0,0},
{3,4,6,4}-> {1.4,4.3,0(*1.375*)-1,-2.4}};


r[nGons_]:=
Module[{horizHop,vertHop,indent,downIndent},
{horizHop,vertHop,indent,downIndent}=(nGons/.rules);
Graphics[{EdgeForm[{Blue}],Table[GeometricTransformation[h[{#,{},{}}]&/@{nGons},
TranslationTransform[{
If[MemberQ[{{3,3,4,3,4},{3,3,3,3,6},{3,4,6,4}},nGons],indent *row,indent Boole[OddQ[row]]]+col horizHop,
If[MemberQ[{{3,3,4,3,4},{3,3,3,3,6},{3,4,6,4}},nGons],downIndent *col,downIndent Boole[OddQ[col]]]-row vertHop}]],
{col,0,5},{row,0,4}]},ImageSize-> 250]]

p[nGon_]:=Row[{Graphics[{EdgeForm[{Blue}],h[{nGon,{},{}}]},ImageSize->70],r@nGon}];

পরীক্ষামূলক

ত্রিভুজাকার টাইলিং

p[{3, 3, 3, 3, 3, 3}]

ত্রিকোণ


ষড়্ভুজাকার

p[{6, 6, 6}]

ষড়্ভুজাকার


বর্গক্ষেত্র

p[{4, 4, 4, 4}]

বর্গক্ষেত্র


অজানা

p[{3, 3, 4, 3, 4}]

archimedes1


কাটা বর্গক্ষেত্র

p[{4, 8, 8}]

কাটা বর্গক্ষেত্র


trihexagonal

p[{3, 6, 3, 6}]

trihexagonal


ষড়ভুজকে কাটা হয়েছে

p[{3, 12, 12}]

ষড়ভুজকে কাটা হয়েছে


নামহীন

p[{3, 3, 3, 3, 6}]

ঢালু


বর্ধিত ত্রিভুজাকার

p[{3, 3, 3, 4, 4}]

বর্ধিত ত্রিভুজাকার


খুঁজে বের করার জন্য টিলিংস

বাম


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

মিকি, একটি টাইলের উল্লম্ব এবং অনুভূমিক স্থানচ্যুতি সারি নং, কল নংয়ের উপর নির্ভর করবে। অফসেটগুলি হাতের ক্ষেত্রে অনন্য ব্যবহার করে। আমি একে একে তাদের কাজ করছি এবং পরে সাধারণীকরণ করব।
ডেভিডসি

@ ডেভিডকারারহর দুর্দান্ত শুরু। আমি স্কোরিং মানদণ্ডে একটি পরিবর্তন করেছি যা আপনাকে প্রভাবিত করতে পারে।
jsh

ভাল পর্যন্ত! যদি আপনি আপনার অনুভূমিক অনুবাদটি 3.3.3.3.3.3অর্ধেক দ্বারা কমিয়ে দেন , যাতে ইউনিটগুলি ওভারল্যাপ হয়, আপনি সেই হীরা থেকে মুক্তি পেতে পারেন এবং সেই টাইলিং ঠিক করতে পারেন। আপনার এখনও আরও কিছু করার আছে 3.3.3.3.6, 3.4.6.4এবং 4.6.12যদিও।
স্তর নদী সেন্ট

পুনরায় 4.6.12 anyone know what it should look like?- সমস্ত প্রয়োজনীয় টিলিংস en.wikedia.org/wiki/… এ রয়েছে । প্রশ্নে আমার মন্তব্য দেখুন। এই উল্লিখিত এক একটি ভিন্ন পাতা মধ্যে প্রশ্ন। তবে 4.6.12যাইহোক যে পৃষ্ঠায় প্রদর্শিত হয়।
স্তরের নদী সেন্ট

6

আর

ধাপ 1

টাইলস তৈরিতে আমার চেষ্টা এখানে। পরের দিকে আসতে টাইলস। এটি ইনপুটটিকে বৈধতা দেয় না, সুতরাং ইনভালিডগুলি কিছু অদ্ভুত টাইলস আঁকবে। প্রথম লাইনের পরে ইনপুট টাইপ করা হয়

i=as.numeric(unlist(strsplit(readline(),"[.]")))
e=c()
for(n in 1:length(i)){
    o=sum(c(0,180-360/i[1:n-1]))
    for(z in 1:i[n]){
        e=c(e,(360/i[n])*(z-1)+o)
    }
}
f=pi/180
plot(c(0,cumsum(sin(e*f))),c(0,cumsum(cos(e*f))),type="l")

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

পদক্ষেপ # 1, # 2 এবং # 3: 1898

অবশেষে এটি ফিরে পেয়েছিলাম। এর বেশিরভাগটি অফসেট সেট করা এবং বিশেষ কেসগুলি হ্যান্ডল করার সাথে গ্রহণ করা হয় :)। সম্পাদনা করুন: দ্বৈতগুলির জন্য ভি পতাকা এখন পরিচালনা করা হয়

সাধারণ প্রক্রিয়াটি হ'ল:

  • ইনপুট নিন এবং একটি তালিকা তৈরি করুন
  • প্রাথমিক টাইল আঁকার জন্য কোণগুলির একটি তালিকা তৈরি করুন
  • প্রান্তটি দ্বিখণ্ডিত করতে প্রতিটি বহুভুজ কেন্দ্রগুলি এটি টালি এবং তাদের থেকে ভেক্টরগুলির গণনা করুন
  • টাইল সেটটি আঁকছে তা নির্ধারণ করুন এবং কোণ অফসেটগুলির একটি তালিকা তৈরি করুন। কিছু টাইলগুলিতে অতিরিক্ত গর্তগুলি যোগ করা হয় যাতে তারা গর্ত পূরণ করতে সহায়তা করে।
  • টাইলস আঁকুন
  • দ্বৈত অঙ্কন করুন

আমি সম্ভবত এখনও এই কিছুটা আরও গল্ফ করতে পারেন।

##Get input (Enter by itself then type in the tile scheme)
i=strsplit(readline(),"[.]")[[1]]
## Run once i is set
q=0
if(substr(i[1],1,1)=="V"){q=1;i[1]=substr(i[1],2,9)}
i=as.numeric(i)
f=pi/180
e=x=y=q=p=c()
l=length(i)
d=1/(2*tan(pi/3))
g=1/(2*sin(pi/3))
for(n in 1:l){o=sum(c(0,180-360/i[1:n-1]))
r=1/(2*sin(pi/i[n]))
a=o+(180-360/i[n])/2
b=1/(2*tan(pi/i[n]))+d
for(z in 1:i[n]){x=c(x,r*sin(a*f))
y=c(y,r*cos(a*f))
q=c(q,b)
p=c(p,(360/i[n])*(z-1)+o-90)
e=c(e,(360/i[n])*(z-1)+o)}}
if(sum(i)==18&l==6){h=c(60,0);w=c(60,120)}
if(sum(i)==18&l==5){h=c(0,0,60);w=c(60,120,60)
e=c(e,0,-60,60,180,60,180)
x=c(x,g*sin(-30*f),g*sin(-30*f),g*sin(90*f))
y=c(y,1+g*cos(-30*f),1+g*cos(-30*f),1)
q=c(q,d+d,d+d,d+d)
p=c(p,-30,90,-30)}
if(sum(i)==17&l==5&sum(abs(diff(c(i,i[1]),1)))==2){h=c(0,0);w=c(90,60)}
if(sum(i)==17&l==5&sum(abs(diff(c(i,i[1]),1)))==4){h=c(0,30);w=c(270,300)}
if(sum(i)==17&l==4){h=c(0,30,-30);w=c(60,30,90)
e=c(e,150,120,210,300)
x=c(x,sin(150*f)+g*sin(90*f),sin(150*f)+sin(210*f)/2)
y=c(y,cos(150*f)+(1/(2*cos(pi/3)))*cos(90*f),cos(150*f)+cos(210*f)/2)
q=c(q,1,1)
p=c(p,210,120)}
if(sum(i)==18&l==4){h=c(0,0);w=c(120,120)}
if(sum(i)==16&l==4){h=c(0,0);w=c(90,90)}
if(sum(i)==27&l==3){h=c(0,-30,0,30);w=c(60,90,120,150,180)}
if(sum(i)==22&l==3){h=c(0,-30,30,90,60,30)
w=c(90,150,120,90,60,30)
e=c(e,0,-30,-60,30,120,210,30,90,150)
q=q-d+1/(2*tan(pi/4));q[13]=q[17]=q[21]=q[21]+3}
if(sum(i)==20&l==3){h=c(0,-45,-90);w=c(90,0,45)}
if(sum(i)==18&l==3){h=c(0,60,0,-60);w=c(0,60,120,60)}
hx=sum(sin(h*f))
hy=sum(cos(h*f))
wx=sum(sin(w*f))
wy=sum(cos(w*f))
plot(0,0,type="n")
par(pin=c(5,5),usr=c(0,20,0,20))
for(c in -20:20){for(j in -20:20){lines(c((c*hx)+(j*wx)+0,(c*hx)+(j*wx)+cumsum(sin(e*f))),c((c*hy)+(j*wy)+0,(c*hy)+(j*wy)+cumsum(cos(e*f))),type="l")
if(q){for(n in 1:length(x)){lines(c((c*hx)+(j*wx)+x[n],(c*hx)+(j*wx)+x[n]+q[n]*sin(p[n]*f)),c((c*hy)+(j*wy)+y[n],(c*hy)+(j*wy)+y[n]+q[n]*cos(p[n]*f)),col="RED")}}}}

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


বাহ, আমার পিছনে মাত্র 4 ঘন্টা। এবং তারা দেখতে খুব সুন্দর, +1! আপনি কি এখনও সব মামলা দিয়ে কাজ করেছেন?
লেভেল নদী সেন্ট

@ স্টিভেরিলিল ধন্যবাদ এবং এটি প্রশ্নের সমস্ত ক্ষেত্রে কাজ করে।
মিকিটি

4

বিবিসি বেসিক

Http://www.bbcbasic.co.uk/bbcwin/bbcwin.html এ এমুলেটরটি ডাউনলোড করুন

স্তর 1

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

স্তর 1.5

১.৫ স্তরটি আমার নিজস্ব পদবি, তবে এটি আমার পদ্ধতির একটি গুরুত্বপূর্ণ মাইলফলক।

শীর্ষস্থানীয় চিত্রগুলি অনুবাদ করা সর্বদা সঠিক টাইলিংয়ের দিকে যায় না। কিছু ক্ষেত্রে লাইনগুলি অনুপস্থিত।

এটির জন্য আমার সমাধানটি হ'ল বৃহত্তম বহুভুজকে ঘুরে দেখার জন্য, সেই বহুভুজের প্রতিটি দ্বিতীয় ভার্টেক্সের জন্য শীর্ষস্থানীয় চিত্র অঙ্কন। এটি সমস্ত ক্ষেত্রে একটি সাধারণ সমাধান। নোট করুন যে বৃহত্তম বহুভুজটি সর্বদা একটি সমান সংখ্যক পক্ষের থাকে এবং বহুভুজের আশেপাশে ঘুরতে যাওয়ার সাথে ভার্টেক্সের চিত্রটি প্রায়শই ঘড়ির কাঁটা / অ্যান্টিલોকওয়াইজ দিকে পরিবর্তিত হয়। এটি সবচেয়ে স্পষ্টর সাথে দেখা যেতে পারে 4.6.12তবে এটি সত্য 4.8.8এবং এটিও 3.12.12: কোনও নির্দিষ্ট 8-গন বা 12-গন থেকে দেখা গেলে, বিকল্প বিভাজনগুলি একে অপরের মিরর চিত্র। এটি ঘটছে যা কিছুটা স্পষ্টতই, এর সাথে 3.3.3.4.4এবং 3.3.4.3.4: যখন কোনও নির্দিষ্ট বর্গক্ষেত্র থেকে দেখা হয় তখন বিকল্প উল্লম্বগুলি একে অপরের মিরর চিত্র।

বহুভুজের চারপাশে 2 টি সরানোর জন্য আমি যে অ্যালগরিদম ব্যবহার করি তা হ'ল বহুভুজটির কতগুলি কিনারা নির্বিশেষে সর্বদা প্রান্ত-অঙ্কন লুপের 14 পুনরাবৃত্তিগুলি করা। 8 টি 16 এর একটি ফ্যাক্টর, অতএব যখন অষ্টাগণগুলি আঁকতে গ্রাফিক্স কার্সারটি 16-14 = 2 শীর্ষে শুরু হয়েছিল যেখানে এটি শুরু হয়েছিল। 3- 4- 6- এবং 12- সমস্ত জনের 12 টির গুণক দিক রয়েছে তাই গ্রাফিক্স কার্সারটি যেখানে শুরু হয়েছিল তার আগে 14-12 = 2 শীর্ষে শেষ হবে ends

পরিসংখ্যান নীচে দেখা যাবে। কাল আমি টাইলিং শেষ করার জন্য সঠিক অনুবাদগুলি নিয়ে কাজ করার আশাবাদী। সমস্ত ক্ষেত্রে পর্যাপ্ত রেখাগুলি কেবলমাত্র অনুবাদ সহ মাত্রা 2 এ পূর্ণ হয়। কিছু ক্ষেত্রে ন্যূনতম প্রয়োজনীয়তার চেয়ে অনেক বেশি অঙ্কিত হয়, তবে ওভারল্যাপ নিয়ে কোনও সমস্যা নেই: নিয়মগুলি কেবল একবার লাইন আঁকার বিষয়ে কিছুই বলে না :-)

সাধারণভাবে, বৃহত্তম বহুভুজ হল তালিকার শেষটি। দুর্ভাগ্যক্রমে একটি মামলা রয়েছে যেখানে এটি এমনটি নয়: 3.4.6.4সুতরাং এই ক্ষেত্রে অঙ্কিত চিত্রটি ষড়্ভুজকের পরিবর্তে একটি বর্গক্ষেত্রকে কেন্দ্র করে। কেবল মাত্র অনুবাদগুলি ব্যবহার করে স্তর 2 সম্পূর্ণ করার জন্য পর্যাপ্ত রেখা রয়েছে, যদিও এমন কিছু স্কোয়ার থাকবে যা স্পষ্টভাবে আঁকেনি। এটি স্তরের 3 তে কিছু সমস্যা উপস্থিত করবে (ভাগ্যক্রমে আমি মনে করি এটি কীভাবে সমাধান করা যায় আমি জানি)) একইভাবে 3.3.3.3.6কেবল মাত্র অনুবাদগুলি ব্যবহার করে স্তর 2 সম্পূর্ণ করার জন্য পর্যাপ্ত রেখা রয়েছে তবে কিছু নির্দিষ্ট ত্রিভুজ থাকবে যা স্পষ্টভাবে আঁকেনি।

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

কোড

1.5 স্তরের কোডটি মন্তব্য করা হয়েছে, কেবলমাত্র 1 স্তরের কোড সক্রিয় করা হয়েছে। A দিয়ে শুরু হয় চারটি লাইন REMREM1.5 টি স্তর সক্রিয় করতে এইগুলি সরান ।

  t=PI*2                                          :REM constant Tau = PI*2
  DIMm(9)                                         :REM declare array for the numbers in the input
  c=0                                             :REM number of polygons in the list

  INPUTz$
  FORi=1TOLEN(z$)                                 :REM for each character in the input
    d%=VAL(MID$(z$,i))                            :REM use VAL to return the numeric value of the substring to the right and store to integer variable
    IF d% c+=1 :m(c)=d%: i-=d%=12                 :REM if the last character read was a number, d% contains it, otherwise 0. Advance c and store to m. If it is 12, increment i to skip a character.
  NEXT

  FORi=1TOc PRINTm(i),:NEXT                       :REM parsing check for debugging.


  a=601:b=601                                     :REM coordinates to start drawing at
  p=40:q=0                                        :REM vector of first line

  REM FORk=1TOm(c)/2                              :REM draw half as many vertex figures as there are sides on the last polygon in the list

  FORj=1TOc                                       :REM for each polygon on the list
    n=m(j)                                        :REM n=number of sides

    w=-p*COS(t/n)-q*SIN(t/n)                      :REM rotate the starting vector anticlockwise by the internal angle of the current polygon
    q=p*SIN(t/n)-q*COS(t/n)                       :REM to avoid overlapping the previous one, if any.
    p=w

    u=p:v=q                                       :REM make a local copy of the vector and coordinates
    x=a:y=b                                       :REM to avoid corruption of p,q,a,b during the drawing of the polygon
    MOVE x,y                                      :REM move the graphics cursor to the start without drawing
    FORi=1TO14                                    :REM do 14 iterations regardless of the number of sides on the polygon
      x+=u*2                                      :REM increment x and y by the vector representing the side
      y+=v*2                                      :REM the value is double (u,v) to facilitate drawing duals later
      IFVAL(z$) DRAW x,y ELSE LINEx-u,y-v,x-u,y-v :REM if the first character of the input is a number, draw the side of the polygon. The ELSE part is unfinished and will be for drawing duals.
      w=v*COS(t/n)-u*SIN(t/n)                     :REM rotate the vector clockwise
      u=v*SIN(t/n)+u*COS(t/n)                     :REM through the external angle of the polygon
      v=w
    NEXT                                          :REM draw next edge of the current polygon
  NEXT                                            :REM draw next polygon of the current vertex

  REM p=u:q=v                                     :REM once the vertex is finished, we will be two sides around the perimeter of the last polygon.
  REM a=x:b=y                                     :REM copy the position and direction data into p,q,a,b.
  REM NEXT                                        :REM draw next vertex figure

স্তর 2 এবং 3

আমার অন্য উত্তর দেখুন।

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