একটি হাইপারকিউব ঘোরান


27

ভূমিকা

একটি হাইপারকিউব / টেসারেক্ট একটি সাধারণ ঘনক্ষেত্রের 4 মাত্রিক সমতুল্য। এটি একটি কিউব নেট নিয়ে, এটি তৃতীয় মাত্রায় প্রসারিত করে তৈরি করা হয়েছে, তারপরে - চতুর্থ মাত্রা ব্যবহার করে - একে হাইপারকিউবে ভাঁজ করে। এটি মূলত একটি ঘনক্ষেত্র, যেখানে প্রতিটি পক্ষই কিউব।

হাইপারকিউব তৈরি করতে আপনার 16 ডি ভেক্টর (একটি x, ক y, ক zএবং একটি wউপাদান সহ একটি ভেক্টর ) প্রয়োজন। এই ভেক্টরগুলি নিম্নলিখিত:

A(0, 0, 0, 0); B(1, 0, 0, 0); C(1, 0, 1, 0); D(0, 0, 1, 0); E(0, 1, 0, 0); F(1, 1, 0, 0); G(1, 1, 1, 0); H(0, 1, 1, 0); 
I(0, 0, 0, 1); J(1, 0, 0, 1); K(1, 0, 1, 1); L(0, 0, 1, 1); M(0, 1, 0, 1); N(1, 1, 0, 1); O(1, 1, 1, 1); P(0, 1, 1, 1);

হাইপারকিউবের 24 টি মুখ রয়েছে। নিম্নলিখিত তালিকায় সেগুলির প্রত্যেকটি রয়েছে (প্রতিটি গোষ্ঠী একটি কোয়াড চিহ্নিত করে):

ABFE, CDHG, BCGF, DAEH, DCBA, FEHG
IJNM, KLPO, JKON, LIMP, LKJI, PMNO
ABJI, DCKL, BCKJ, DAIL, FEMN, GHPO, FGON, EHPM, EAIM, BFNJ, CGOK, HDLP

এই সমস্ত তথ্য সহ, আপনার প্রযুক্তিগতভাবে কোডে একটি হাইপারকিউব রয়েছে। এটি ঘোরানোর জন্য আপনার প্রতিটি ঘূর্ণমান বিমানের জন্য 6 টি আলাদা ম্যাট্রিকেস প্রয়োজন, ওয়াইজেড, এক্সজেড, এক্সওয়াই, এক্সডাব্লু, ওয়াইডাব্লু এবং জেডডাব্লু প্লেনগুলির জন্য একটি। আপনার প্রতিটি ম্যাট্রিক্স হওয়ার পরে, আপনাকে কিউবারের শিখরগুলি তাদের দিয়ে গুণ করতে হবে।

নিম্নলিখিত চিত্রগুলি প্রতিটি ম্যাট্রিক্সের গঠন দেখায়:

ওয়াইজেড বিমানের আবর্তনের জন্য:

এক্সজেড বিমানের ঘূর্ণনের জন্য:

এক্সওয়াই বিমানের আবর্তনের জন্য:

এক্সডাব্লু বিমানের আবর্তনের জন্য:

YW বিমানের আবর্তনের জন্য:

জেডডাব্লু বিমানের আবর্তনের জন্য:

ঘূর্ণন এই ক্রমে প্রয়োগ করা হয়।

এত কিছুর পরেও আপনার একটি ঘোরানো হাইপারকিউব রয়েছে। এখন আপনি এটি আঁকা প্রয়োজন। আপনার কাছে প্রেরণের (x, y, z, w)জন্য দৃষ্টিকোণ প্রজেক্টের সাথে মিলিত একটি অর্থোোনাল প্রজেকশন ব্যবহার করা উচিত (2x/(2+z), 2y/(2+z))

ইনপুট

আপনার ইনপুটটি 0 (সমেত) এবং 360 এর মধ্যে exclusive টি পূর্ণসংখ্যা (একচেটিয়া)। এগুলি হাইপারকিউবের বিভিন্ন ঘূর্ণমান প্লেনের ডিগ্রিগুলিতে আবর্তনের প্রতিনিধিত্ব করে।

আউটপুট

আপনার আউটপুটটি একটি একক চিত্র হতে হবে যাতে হাইপারকিউব থাকে। ডিসপ্লেটি একটি রাস্টারাইজড ইমেজ, ভেক্টর ইমেজ বা এএসসিআইআই আর্ট হতে পারে। আউটপুট চিত্রটি কমপক্ষে 100 * 100 পিক্সেল হওয়া উচিত, এবং কিউবকে কমপক্ষে 50% পর্দা নিতে হবে। যে কোনও ডিফল্ট চিত্র আউটপুট ফর্ম্যাট অনুমোদিত।

পরীক্ষার মামলা

0 0 0 0 0 0

0 0 0 0 0 30

30 0 0 0 0 30

0 0 0 30 30 30

45 45 45 0 0 0

45 45 45 45 45 45

চিত্রগুলি পূর্ণ আকারে দেখতে একটি নতুন ট্যাবে খুলুন।

বিধি

  • ডিফল্ট বিধি প্রযোজ্য
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ
  • বাইটস মধ্যে সংক্ষিপ্ত কোড

কেন আপনি অন্য পোস্ট নাক করে?
আর

@ এশিয়াআইʀᴋ আমি এটিকে সর্বশেষ পর্যালোচনার জন্য আড্ডায় পোস্ট করেছি
বালিন্ট

7
যেমন আমি স্যান্ডবক্সে দুটি পৃথক অনুষ্ঠানে নির্দেশ করেছি, প্রদর্শনের জন্য প্রক্ষেপণের বিবরণ অসম্পূর্ণ কারণ এটি ধরে নিয়েছে যে প্রজেক্টটি প্রজেক্ট করা হবে ত্রি-মাত্রিক যেখানে এটি প্রকৃতপক্ষে স্পষ্টতই 4-মাত্রিক।
পিটার টেলর

2
@ লেজারড্রোগ আমি মনে করি যে 'ইউ' অবশ্যই 'এন' হওয়া উচিত।
বেকার

2
@ বিলিন্ট চ্যালেঞ্জের জন্য ধন্যবাদ, আমি এটি উপভোগ করেছি। আশা করি আমরা আরও উত্তর এবং বিভিন্ন পন্থা পেয়ে যাব। : ডি
বেকার

উত্তর:


9

অক্টাভা, 474 433 429 বাইট

function H(a,b,c,d,e,f) C=@cosd;S=@sind;R=[1,0,0,0;0,C(e),0,-S(e);0,-S(e)*S(f),C(f),-C(e)*S(f);0,S(e)*C(f),S(f),C(e)*C(f)]*[C(c)*C(d),-S(c)*C(d),0,S(d);S(c),C(c),0,0;0,0,1,0;-C(c)*S(d),S(c)*S(d),0,C(d)]*[C(b),S(a)*S(b),C(a)*S(b),0;0,C(a),-S(a),0;-S(b),S(a)*C(b),C(a)*C(b),0;0,0,0,1]*(dec2bin(0:15)'-48.5);Z=R(3,:)+2;R=2*R./Z;Q=[1,2,10,12,11,9,10,14,16,12,4,8,16,15,11,3,7,15,13,9,1,5,13,14,6,8,7,5,6,2,4,3,1];plot(R(1,Q),R(2,Q));

ঘোরান:

function H(a,b,c,d,e,f) 
C=@cosd;S=@sind;
R=[1,0,0,0;0,C(e),0,-S(e);0,-S(e)*S(f),C(f),-C(e)*S(f);0,S(e)*C(f),S(f),C(e)*C(f)]*
  [C(c)*C(d),-S(c)*C(d),0,S(d);S(c),C(c),0,0;0,0,1,0;-C(c)*S(d),S(c)*S(d),0,C(d)]*
  [C(b),S(a)*S(b),C(a)*S(b),0;0,C(a),-S(a),0;-S(b),S(a)*C(b),C(a)*C(b),0;0,0,0,1]*
  (dec2bin(0:15)'-48.5);
Z=R(3,:)+2;
R=2*R./Z;
Q=[1,2,10,12,11,9,10,14,16,12,4,8,16,15,11,3,7,15,13,9,1,5,13,14,6,8,7,5,6,2,4,3,1];
plot(R(1,Q),R(2,Q));

ঘূর্ণন ম্যাট্রিক্স এখনও বাইটের অনেক গ্রাস, কিন্তু Eulerian চক্র বেশ ভাল কাজ থেকে পরিদর্শন ছেদচিহ্ন সংখ্যা হ্রাস 96 33 120 নিচে।

4-বিট বাইনারি উপস্থাপনা গ্রহণ করে এবং এমএসবিটিকে [0:15]এক্স-কো-অর্ডিনেট এবং এলএসবি-ডাব্লু -কো-অর্ডিনেট হিসাবে বিবেচনা করে ভার্টিসগুলি তৈরি করা হয় ।

সম্পাদনা: সমস্ত ঘূর্ণন ম্যাট্রিক্সের প্রাক-গুণিত করা একটি দুঃস্বপ্ন ছিল, যে কারণে আমি প্রথমে এটি ব্যবহার করিনি, তবে সেগুলি জোড়া জোড়ায় প্রাক গুণিত করে ৪১ বাইট সংরক্ষণ করেছি। সর্বোত্তম সংমিশ্রণের জন্য এখন সন্ধান করুন। :) ম্যাট্রিককে ত্রিশ দ্বারা গুণ করা কোনও প্রাক-গুণ এর চেয়ে খারাপ ছিল, তাই আমি যুগল-ভিত্তিক পদ্ধতির সাথে খুশি হব।


আউটপুট:

H(0,0,0,0,0,0)

এইচ (0,0,0,0,0,0)

H(0,0,0,0,0,30)

এইচ (0,0,0,0,0,30)

H(30,0,0,0,0,30)

এইচ (30,0,0,0,0,30)

H(0,0,0,30,30,30)

এইচ (0,0,0,30,30,30)

H(45,45,45,0,0,0)

এইচ (45,45,45,0,0,0)

H(45,45,45,45,45,45)

এইচ (45,45,45,45,45,45)


সম্পাদনা: আমি বোকা। সর্বত্র একই পরিবর্তনশীল দ্বারা বোকা বানানো ... [আপনি কি নিশ্চিত যে আপনি সম্পূর্ণ প্রাক গুণিত ম্যাট্রিক্সটি চান না? :) i.imgur.com/nkM6y6g.png]
অ্যালগমির

@ অ্যালগমির হ্যাঁ, আমি যদি সঠিকভাবে মনে করি তবে পুরো গুণিত ম্যাট্রিক্স প্রায় দ্বিগুণ হয়ে গেছে।
বেকার

এটি এর মতো আরও হওয়া উচিত, ম্যাক্সিমার বোকা " সরলিকরণগুলি
algmyr

গণিতে দু: খজনক ব্যর্থ হওয়ার জন্য এখানে আপনার কোডের আরও গল্ফযুক্ত সংস্করণ, 330 বাইট: পেস্ট.আই
পি

14

পুনশ্চ 1075 732 683 640 631 601 590 545 542 526 514 478 470

ম্যাট.পিএস এবং জি ব্যবহার করে ।

সম্পাদনা করুন: -343 প্রয়োগকারী বাইনারি-এনকোডিং প্রজেক্টের ভেক্টর এবং ইউলিরিয়ান সার্কিটহৃতঅন্যান্য উত্তর থেকে ধার করা। এবং জি লাইব্রেরি থেকে বাইনারি-টোকেন-স্ট্রিং প্রয়োগ করেছেন।
সম্পাদনা করুন: -49 পুনরায় সংজ্ঞায়িত sin cosএবং negসংক্ষিপ্ত নাম।
সম্পাদনা করুন: -৩৩ অনুক্রমের জন্য সংক্ষিপ্ত নাম সংজ্ঞায়িত করা হয়েছে 0 0 0 1 1 0
সম্পাদনা: -9 al (অর্থাত্ aload) এর চেয়ে কম (")@। ফ্যাক্টরড 3 কল idi(যেমন। idiv) ডু -কিছুই না করে 1 idiv
সম্পাদনা: -30 জি থেকে প্রয়োগিত অন্তর্নিহিত সংজ্ঞা ব্লক
Edit সম্পাদনা: -10 আরও কয়েকটি ত্রি-ব্যবহৃত সিকোয়েন্স।
সম্পাদনা: -45i j k l m n কোণগুলির জন্য চলকগুলি সরান এবং সর্বদা বর্তমান কোণটি সংজ্ঞায়িত করুন tএবং কোণগুলির ফাংশনগুলি (গ্লোবাল) এর মান ব্যবহার করেtপরিবর্তনশীল। ঘূর্ণন ম্যাট্রিক্সের tমান প্রস্তুত না হওয়া অবধি কোড-বর্ণনার কার্যকরকরণ স্থগিত করুন ।
সম্পাদনা করুন: -3 সরান <16>$ie। closepath। এবং একটি স্থান।
সম্পাদনা করুন: -16 ঘূর্ণন ম্যাট্রিক্স ( J K Lএবং M) এর ইউনিট ভেক্টর থেকে কারখানার বাইরে অ্যারে বন্ধনীগুলি । পুনরায় আবেদন বাদ moজন্য modএবং suজন্য sub
সম্পাদনা করুন: -12 ইন-লাইনে প্রকল্প-এবং-আঁকার ফাংশন এবং (এখন খালি) এনকোলেসিং অভিধান মুছে ফেলুন।
সম্পাদনা করুন: -36 একটি স্ট্রিংতে সার্কিট (অর্থাত্ মুখগুলি ) এনকোড করা হয়েছে ।
সম্পাদনা: -8 শীর্ষে অ্যারের সংজ্ঞা সরান V। পরিবর্তে, স্ট্যাক ছেড়ে এবংdupপ্রয়োজন অনুসারে কাজ করার কপি (একবারে প্রথমে এবং আবার লুপের শেষে) এছাড়াও, বাইনারি-টোকেন-স্ট্রিং থেকে কয়েকটি অপারেটরকে সংক্ষিপ্ত নামগুলিতে ফিরে অনুবাদ করেছেন যেখানে বিটিএস কোনও সঞ্চয় দেয়নি, (I)$এখন fora(যেমন forall)) if duহতে পারে (T8)$, তবে if duস্পষ্টতই এটি একটি ভাল পছন্দ (এটি গল্ফ , প্রতি সেফ অবসেশন নয় )। এছাড়াও, সঞ্চালন scale সামনে translate , তাই অনূদিত স্থানাঙ্ক হতে পারে 3এবং 4পরিবর্তে 300এবং 400

(mat.ps)run 3(G)run $
t sin
A neg
t cos
0 0
0 1
1 0
2 mu Z 2(!V)@
idi 2 mo .5 su
(>8)$
[F D]
[D E]
[E D]
[D F]

3 4 100(&>88)$(,)# div(<N)#[E 15{[I 1 H I 2 H I 4 H ex 8 H]}fo]E
5{ARGUMENTS 1(XK/)$/t ex d{{J[0 C B 0][0 A C 0]K}{[C 0 A 0]L[B 0
C 0]K}{[C B D][A C D]M K}{[C D A]L M[B D C]}{J[0 C 0 B]M[0 A 0
C]}{J L[D C B][D A C]}}(>K)$[(>?)$]transpose matmul}fo
du(019;:89=?;37?>:26><804<=576451320){48 su get al po{W
Z Y X}{(>3)$}fora X G Y G{li}(D)#{mov}if du}fora(HB)#

3 4এবং 100দ্বিতীয় ব্লক প্রথম লাইনে প্রতিনিধিত্বমূলক কেন্দ্র-X, কেন্দ্র-Y এবং স্কেল প্যারামিটার যথাক্রমে হয়, পৃষ্ঠাতে আঁকার (কেন্দ্র স্থানাঙ্ক দ্বারা গুন করা হয় scale)। (300,400) পিএস ইউনিটগুলিতে মার্কিন অক্ষরের আকারের কাগজের (612,792) প্রায় কেন্দ্রস্থল।

আপনি যদি মোটামুটি পোস্টস্ক্রিপ্ট অনুসরণ করতে পারেন তবে গুরুত্বপূর্ণ উদ্ভট বিষয়গুলি হ'ল অন্তর্নিহিত পদ্ধতি ব্লক এবং এনকোডেড অপারেটরের স্ট্রিং। যেমন ওয়ার্কফাইলে মন্তব্য দ্বারা দেখানো হয়েছে, নীচে, প্রথম ব্লকের প্রতিটি লাইনকে স্পষ্টতই এ, বি, সি ইত্যাদি নামকরণ করা হয়েছে, সুতরাং, যেমন eg F E Dউত্পাদন করবে 1 0 0 1 0 0। এনকোডেড অপারেটর স্ট্রিংয়ের জন্য, সিস্টেম নাম সারণি থেকে অপারেটরগুলি নির্বাচন করতে বাইটগুলি ব্যবহার করে, অপারেটর কলগুলির ক্রমানুসারে $ #বা @তাত্ক্ষণিক ক্রিয়াকলাপের জন্য, PLRM 3ed পরিশিষ্ট এফ। এই বৈশিষ্ট্যগুলি এবং আরও অনেকগুলি জি লাইব্রেরির সাথে পোস্টস্ক্রিপ্টের জন্য উপলব্ধ ( এখন mat.ps ফাংশনগুলিও অন্তর্ভুক্ত রয়েছে)।

Workfile:

(mat.ps)run 3(G)run $
t sin %/A
A neg %/B
t cos %/C
0 0 %/D
0 1 %/E
1 0 %/F
2 mu Z 2(!V)@ %/G  %ad div %add div %108 1 54
idi 2 mo .5 su %idiv mod sub %/H %106 169 51
(>8)$ %/I %exch dup
[F D] %/J
[D E] %/K
[E D] %/L
[D F] %/M


3 4
100(&>88)$ %currentlinewidth exch dup dup %38
(,)#  %scale %139-95=44
div(<N)# %div setlinewidth %54 155-95=60 %translate %173-95=78
%/V
[E 15{[ I
    1 H I
    2 H I
    4 H ex
    8 H]}fo]

E 5{ARGUMENTS 1(XK/)$ %index get cvr %88 75 47
    /t ex d %exch def %62 51
    {{J[0 C B 0][0 A C 0]K} 
     {[C 0 A 0]L[B 0 C 0]K} 
     {[C B D][A C D]M K} 
     {[C D A]L M[B D C]}
     {J[0 C 0 B]M[0 A 0 C]}
     {J L[D C B][D A C]}}
    (>K)$ %exch get %62 75
    [
        (>?)$ %exch exec %62 63
    ]
    transpose matmul
}fo %for
du %dup
%d %def
%{transpose matmul}fora d

%[E 9 11 10 8 9 13 15 11 3 7 15 14 10 2 6 14 12 8 0 4 12 13 5 7 6 4 5 1 3 2 0]
%<0001090b0a08090d0f0b03070f0e0a02060e0c0800040c0d050706040501030200>
%          abcdef
%0123456789:;<=>?
(019;:89=?;37?>:26><804<=576451320)
{48 su get % 169 75 %V (>K)$ %sub %exch get

    al po %aload pop %2 117
    {W Z Y X}{(>3)$ %exch def
    }fora %forall %2 117  62 51 73
    X G
    Y G
    {li}(D)# %stopped
    {mov}
    if du%(T8)$ %if %84 du %dup 56
}
%<49a7a1>$ %forall stroke showpage %73 167-95=72 161-95=66
fora(HB)#

অসম্পূর্ণ এবং হালকা মন্তব্য করেছেন:

300 400 translate   %roughly center of letter paper
currentlinewidth
100 dup dup scale
div setlinewidth    %scale x100, reduce line-width/100
(mat.ps)run         %load matrix library
ARGUMENTS aload pop{f e d c b a}{exch cvr def}forall  %define args as 
                                 % a,b,etc and convert to real numbers
/m{2 mod .5 sub}def
/P{aload pop{w z y x}{exch def}forall   %P: [x y z w]  project-and-draw  -
    x 2 mul z 2 add div 
    y 2 mul z 2 add div 
    {lineto}stopped{moveto}if %catch(&handle!) nocurrentpoint error in lineto
}bind def
/V[0 1 15{    % generate vectors with a for-loop
    [ exch
        dup m
        1 index 2 idiv m
        2 index 4 idiv m
        4 3 roll 8 idiv m
    ]
}for]
[[[1 0 0 0][0 a cos a sin neg 0][0 a sin a cos 0][0 0 0 1]] 
     [[b cos 0 b sin 0][0 1 0 0][b sin neg 0 b cos 0][0 0 0 1]] 
     [[c cos c sin neg 0 0][c sin c cos 0 0][0 0 1 0][0 0 0 1]] 
     [[d cos 0 0 d sin][0 1 0 0][0 0 1 0][d sin neg 0 0 d cos]]
     [[1 0 0 0][0 e cos 0 e sin neg][0 0 1 0][0 e sin 0 e cos]]
     [[1 0 0 0][0 1 0 0][0 0 f cos f sin neg][0 0 f sin f cos]]]
{transpose matmul} forall def   % apply array of rotations and define

%Eulerian circuit (borrowed and adjusted for 0-based indexing)
[0 1 9 11 10 8 9 13 15 11 3 7 15 14 10 2 6 14 12 8 0 4 12 13 5 7 6 4 5 1 3 2 0]

% the main program!
% on the stack is the Eulerian circuit array
{
    V exch get  %lookup index in (sextuply-transformed) vertex array
    P           %call project-and-draw
} forall
closepath stroke %draw it, don't just think about it

showpage % gs's cmd-line-args option automatically sets -dBATCH,
    % so without a showpage, gs will immediately exit before you
    % can look at the picture :(

আমার আউটপুটগুলির মধ্যে কয়েকটি প্রশ্নের উদাহরণগুলির আয়না চিত্র।

জন্য gs -- hc.ps 0 0 0 0 0 0, আমি পেয়েছি:
এখানে চিত্র বর্ণনা লিখুন

gs -- hc.ps 0 0 0 0 0 30
এখানে চিত্র বর্ণনা লিখুন

gs -- hc.ps 30 0 0 0 0 30
এখানে চিত্র বর্ণনা লিখুন

gs -- hc.ps 0 0 0 30 30 30
এখানে চিত্র বর্ণনা লিখুন

gs -- hc.ps 45 45 45 0 0 0
এখানে চিত্র বর্ণনা লিখুন

gs -- hc.ps 45 45 45 45 45 45
এখানে চিত্র বর্ণনা লিখুন

বোনাস অ্যানিমেশন আমি এই প্রোগ্রামটি দিয়ে তৈরি করেছি। এই চিত্রটি ঘূর্ণন ক্রমের সাথে সামঞ্জস্য করে 0 30 60 0 i i , যেখানে আমি 0 থেকে 360 পর্যন্ত 2 এর মধ্যে আছি।
এখানে চিত্র বর্ণনা লিখুন


2
কি দারুন. গাণিতিক সমস্যার জন্য একটি পোস্টস্ক্রিপ্ট উত্তর।
TuxCraftting

@ TùxCräftîñg যতক্ষণ আপনি সহজেই ম্যাট্রিক্স গুণণ করতে পারবেন এই প্রশ্নটিতে আসলে তেমন গণিত নেই। একে ডিউডনির দ্য আর্মচেয়ার ইউনিভার্স পড়ার পর থেকেই আমি এই প্রোগ্রামটি লিখতে চেয়েছিলাম ।
লুসার ড্রোগ

জি লাইব্রেরিতে নতুন ফাংশন যুক্ত হয়েছে। এখানে ব্যবহার করতে পারবেন না তবে এটি 307 বাইট সংস্করণটিকে অনুমতি দেয় ।
লুসার droog

8

সি # + ইউনিটি, 1060 845 835 বাইট

সি # ≈ জাভা

ধরে নিন যে এই ফাংশনটি একটি স্ক্রিপ্টে রাখা হয়েছে MainCamera

সম্পাদনা করুন:
ইউলেরিয়ান চক্রটি ব্যবহার করে 19 বাইট সংরক্ষণ করা ~ 200 বাইট সংরক্ষণের পরামর্শের জন্য @ টুক্কাএক্সকে ধন্যবাদ।

Golfed:

void d(float[]r){transform.position=Vector3.back*2;GetComponent<Camera>().backgroundColor=Color.black;Vector4[]p=new Vector4[16];Matrix4x4[]m=new Matrix4x4[6];int i=0;for(;i<16;i++)p[i]=new Vector4(i%2,i/2%2,i/4%2,i/8%2)-new Vector4(.5f,.5f,.5f,.5f);int[,]X={{6,8,1,12,7,11},{5,0,0,0,5,10},{10,10,5,15,15,15}};for(i=0;i<6;i++){m[i]=Matrix4x4.identity;r[i]=Mathf.Deg2Rad*r[i];float c=Mathf.Cos(r[i]),s=Mathf.Sin(r[i]);m[i][X[1,i]]=c;m[i][X[2,i]]=c;m[i][X[0,i]]=s;m[i][X[0,i]%4*4+X[0,i]/4]=-s;}for(i=0;i<16;i++)foreach(Matrix4x4 x in m)p[i]=x*p[i];int[]F={0,1,9,11,10,8,9,13,15,11,3,7,15,14,10,2,6,14,12,8,0,4,12,13,5,7,6,4,5,1,3,2,0};LineRenderer l=new GameObject().AddComponent<LineRenderer>();l.SetVertexCount(33);l.material=new Material(Shader.Find("Sprites/Default"));l.SetWidth(.03f,.03f);for(i=0;i<33;i++)l.SetPosition(i,p[F[i]]);

নিউলাইনস + ইন্ডেন্টেশন + সম্পূর্ণ শেল:

using UnityEngine;
using System.Collections;

public class h : MonoBehaviour {

    void d(float[]r)
    {
        transform.position=Vector3.back*2.5f;
        GetComponent<Camera>().backgroundColor=Color.black;
        Vector4[]p=new Vector4[16];
        Matrix4x4[]m=new Matrix4x4[6];
        int i=0;
        for(;i<16;i++)p[i]=new Vector4(i%2,i/2%2,i/4%2,i/8%2)-new Vector4(.5f,.5f,.5f,.5f);
        int[,]X={{6,8,1,12,7,11},{5,0,0,0,5,10},{10,10,5,15,15,15}};
        for (i=0;i<6;i++){
            m[i]=Matrix4x4.identity;
            r[i]=Mathf.Deg2Rad*r[i];
            float c=Mathf.Cos(r[i]);
            float s=Mathf.Sin(r[i]);
            m[i][X[1,i]]=c;
            m[i][X[2,i]]=c;
            m[i][X[0,i]]=s;
            m[i][X[0,i]%4*4+X[0,i]/4]=-s;
        }
        for (i=0;i<16;i++)foreach(Matrix4x4 x in m)p[i]=x*p[i];
        int[]F={0,1,9,11,10,8,9,13,15,11,3,7,15,14,10,2,6,14,12,8,0,4,12,13,5,7,6,4,5,1,3,2,0};
        LineRenderer l=new GameObject().AddComponent<LineRenderer>();
        l.SetVertexCount(33);
        l.material=new Material(Shader.Find("Sprites/Default"));
        l.SetWidth(.03f,.03f);
        for (i=0;i<33;i++)
            l.SetPosition(i,p[F[i]]);
        l.gameObject.tag = "Player";
    }
    public float[] input;
    void Start()
    {
        d(input);
    }
}

ঘূর্ণন ম্যাট্রিক্স বা আঁকতে হবে এমন "মুখগুলি" তৈরির কোনও সাধারণ সূত্র আমি বের করতে পারিনি, যাতে হার্ড-কোডের জন্য প্রচুর বাইট ব্যয় করতে হয়। আমি @ বিকারের কাছ থেকে ইউলিরিয়ান চক্র ধার নিয়েছি। এছাড়াও, ইউনিটি বিল্ট-ইনগুলি চূড়ান্তভাবে ভার্জোজ।

আপনি সমস্ত পরীক্ষার কেস অনলাইনে যাচাই করতে পারবেন ।


আমি এখানে প্রথমবারের মতো একটি সি # + ইউনিটির উত্তর দেখেছি। +1
ড্যানTheMan

আমি প্রতি মনে 0.5fকমে যাবে .5fএবং 0.01fকরতে .01f। আমি আরও মনে করি যে পূর্ণসংখ্যার অ্যারেগুলি int[]একাধিকবার বলার পরিবর্তে কমা দিয়ে পৃথক করা যায় ।
ইয়াতসি

@ ব্লু ওহ, আপনি ঠিক বলেছেন! কিছু সময়ের জন্য সি # ব্যবহার করা হয়নি তাই শেষ টিপ সম্পর্কে নিশ্চিত ছিল না।
ইয়াতসি

@TuukkaX আমার আগের মন্তব্য উপেক্ষা করুন, আমি ব্যবহার করতে পারেন int[,]। তবুও, আপনাকে ধন্যবাদ।
নীল

আপনার এখনও একটি Vector4(0.5f,0.5f,0.5f,0.5f)যা কমে যেতে পারে Vector4(.5f,.5f,.5f,.5f)
ইয়াতসি

6

জাভাস্ক্রিপ্ট ES6, 584 বাইট

f=(...R)=>(P=s=>[...s].map(i=>parseInt(i,16)),C=document.createElement`canvas`,X=C.getContext`2d`,X.translate((C.width=300)/2,(C.height=300)/2),X.lineWidth=0.01,X.scale(100,100),X.beginPath(),P("0267fd9804c8ab915dcefb37546ea2310").map((e,i)=>{[x,y,z]=P("084c2a6e195d3b7f").map(i=>[...(1e3+i.toString(2)).slice(-4)].map(i=>i-0.5)).map(e=>(R.map((R,i,_,M=Math,C=M.cos(r=R*M.PI/180),S=M.sin(r))=>((a,b,s=1)=>[e[a],e[b]]=[C*e[a]-s*S*e[b],s*S*e[a]+C*e[b]])(...[[1,2],[0,2,-1],[0,1],[0,3,-1],[1,3],[2,3]][i])),e))[e];[x,y]=[2*x/(2+z),2*y/(2+z)];i?X.lineTo(x,y):X.moveTo(x,y)}),X.stroke(),C)

"Ungolfed":

f=(...R)=>(                                                              // function that accepts rotations in the following form: f(a,b,c,d,e,f)
    P=s=>[...s].map(i=>parseInt(i,16)),                                  // function to convert strings to hex-arrays
    V=P("084c2a6e195d3b7f")                                              // vertices encoded as hex values ( [0,1,1,0] -> 6 )
        .map(i=>[...(1e3+i.toString(2)).slice(-4)].map(i=>i-0.5))        // convert hex values to vertices, center the hypercube
        .map(e=>(R.map((R,i,_,M=Math,C=M.cos(r=R*M.PI/180),S=M.sin(r))=> // convert angles to degrees, precalculate sin and cos values
        ((a,b,s=1)=>[e[a],e[b]]=[C*e[a]-s*S*e[b],s*S*e[a]+C*e[b]])       // apply matrix transforms to all vertices
        (...[[1,2],[0,2,-1],[0,1],[0,3,-1],[1,3],[2,3]][i])),e)),        // list of encoded matrix transforms
    C=document.createElement`canvas`,X=C.getContext`2d`,                 // create image to draw on
    X.translate((C.width=300)/2,(C.height=300)/2),                       // setup image dimensions, center transform
    X.lineWidth=0.01,X.scale(100,100),X.beginPath(),                     // setup line, scale the transform and begin drawing
    P("0267fd9804c8ab915dcefb37546ea2310").map((e,i)=>{                  // hypercube edge path indices encoded as hex values
        [x,y,z]=V[e];[x,y]=[2*x/(2+z),2*y/(2+z)];                        // project vertex
        i?X.lineTo(x,y):X.moveTo(x,y)}),X.stroke(),                      // draw vertex
    C)                                                                   // return image

এটি ক্রিয়াতে দেখুন (ক্রমাগত ঘোরার জন্য সংশোধিত):

with(document)with(Math)with(document.getElementById`canvas`)with(getContext`2d`){render=()=>{requestAnimationFrame(render);clearRect(0,0,width,height);save();K=performance.now();R=[K*0.01,K*0.02,K*0.03,K*0.04,K*0.05,K*0.06];X=s=>[...s].map(i=>parseInt(i,16));V=X("084c2a6e195d3b7f").map(i=>[...(1e3+i.toString(2)).slice(-4)].map(i=>i-0.5)).map(e=>(R.map((R,i,_,C=cos(r=R*PI/180),S=sin(r))=>((a,b,s=1)=>[e[a],e[b]]=[C*e[a]-s*S*e[b],s*S*e[a]+C*e[b]])(...[[1,2],[0,2,-1],[0,1],[0,3,-1],[1,3],[2,3]][i])),e));translate((width=300)/2,(height=300)/2);lineWidth=0.01;scale(100,100);beginPath();X("0267fd9804c8ab915dcefb37546ea2310").map((e,i)=>{[x,y,z]=V[e];[x,y]=[2*x/(2+z),2*y/(2+z)];i?lineTo(x,y):moveTo(x,y)});stroke();restore();};render();}
<html><body><canvas id="canvas"></canvas></body></html>

ফাংশনটি এইচটিএমএল 5 ক্যানভাস অবজেক্ট দেয়, document.body.appendChild(f(0,0,0,0,0,0))উদাহরণস্বরূপ এটির পৃষ্ঠাতে আপনাকে এটি যুক্ত করতে হবে ।

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


চতুর, আপনি ম্যাট্রিক্স রূপান্তরগুলি নিয়ে কী করছেন তা নির্ধারণ করতে আমার কিছুটা সময় লেগেছে। : ডি এছাড়াও, আমি আপনার কোড স্নিপেটটি কাজ করতে পারি না ... এটি আমাকে একটি অপ্রয়োজনীয় "স্ক্রিপ্ট ত্রুটি" দিচ্ছে। লাইনে 0
বেকার

@ বেকার আপনি কোন ব্রাউজার ব্যবহার করছেন? আমি এটি সর্বশেষতম ফায়ারফক্সে পরীক্ষা করেছি।
ডেন্ড্রোবিয়াম

আমি সাফারি 9.1.1 এ আছি। আমাকে অন্য একটি চেষ্টা করুন।
বেকার

1
হ্যাঁ, ক্রোম ঠিক ঠিক কাজ করে।
বেকার

1
সাফারি হ'ল বাজে। কিছু কাজ করে কিনা তা পরীক্ষা করতে এটি ব্যবহার করবেন না।
প্যাট্রিক রবার্টস

1

গণিত, 453 415 বাইট *

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

Graphics[Line[Table[{2#/(2+#3),2#2/(2+#3)}&@@Map[Dot@@Table[Table[If[n==m==#2||n==m==#,Cos[#3],If[n==#2&&m==#,If[#2==1&&(#==3||#==4),1,-1]Sin[#3],If[n==#&&m==#2,If[#2==1&&(#==3||#==4),-1,1]Sin[#3],If[n==m,1,0]]]],{n,4},{m,4}]&[k[[1]],k[[2]],a[[k[[3]]]]°],{k,{{4,3,6},{4,2,5},{4,1,4},{2,1,3},{3,1,2},{3,2,1}}}].#&,Tuples[{0,1},4]-.5,{1}][[i]],{i,{1,2,10,12,11,9,10,14,16,12,4,8,16,15,11,3,7,15,13,9,1,5,13,14,6,8,7,5,6,2,4,3,1}}]]]

* আমি গণনা করছি °এবং ==প্রতিটি একক বাইট হিসাবে গণিতের একক চরিত্র হিসাবে তারা প্রতিনিধিত্ব করা হয়। আমি মনে করি এটি ন্যায়সঙ্গত যেহেতু প্রচুর ভাষায় অদ্ভুত অক্ষর এনকোডিং ব্যবহার করা হয়।

মন্তব্যে অসম্পূর্ণ। ইনপুট হিসাবে উপরে শীর্ষে কোডিং করা হয় a={30,0,0,0,0,30};। আমি আমার স্কোরের দিকে এটি গণনা করি না।


a = {45, 45, 45, 45, 45, 45};



(* #2,#-th rotation matrix as a funciton of #3 *)
(* Using the \
#-notation saved 6 bytes over the more common function definition \
notation*)
r = 
  Table[If[n == m == #2 || n == m == #, Cos[#3], 
     If[n == #2 && m == #, 
      If[#2 == 1 && (# == 3 || # == 4), 1, -1] Sin[#3], 
      If[n == # && m == #2, 
       If[#2 == 1 && (# == 3 || # == 4), -1, 1] Sin[#3], 
       If[n == m, 1, 0]]]], {n, 4}, {m, 4}] &;

(* Total rotation matrix. Need six of them. Function of the six \
angles to rotate.*)

u = Dot @@ 
     Table[r[k[[1]], 
       k[[2]], \[Degree]*
        a[[k[[3]]]]], {k, {{4, 3, 6}, {4, 2, 5}, {4, 1, 4}, {2, 1, 
         3}, {3, 1, 2}, {3, 2, 1}}}].# &;



(* List of all vertices of the hypercube *)
t = Tuples[{0, 1}, 4];
t -= .5;
v = Map[u, t, {1}];

(*projection*)
p = {2 #/(2 + #3), 2 #2/(2 + #3)} &;

(*Eulerian tour*)

l = Table[
   p @@ v[[i]], {i, {1, 2, 10, 12, 11, 9, 10, 14, 16, 12, 4, 8, 16, 
     15, 11, 3, 7, 15, 13, 9, 1, 5, 13, 14, 6, 8, 7, 5, 6, 2, 4, 3, 
     1}}];
Graphics[Line[l]]

0 0 0 0 0 30

0 0 0 30 30 30

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

405 10 -14 -8 -9 205

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

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