একটি সাধারণ কিউব আঁকুন


10

একটি বাস্তব 3 মাত্রিক ঘনক্ষেত্র আঁকার বিষয়ে আমাদের কাছে একটি চ্যালেঞ্জ নেই, তাই এখানে এটি চলে যায়:

চ্যালেঞ্জ

আপনার কাজটি দৃষ্টিকোণ সহ একটি ঘোরানো, ঘনক্ষেত্র আঁকুন। এটি একটি পৃথক উইন্ডোতে বা চিত্র হিসাবে থাকতে পারে।

ইনপুট

আপনার ইনপুটটি 0 থেকে 359.99 এর মধ্যে 3 পৃথক সংখ্যা ... এটি ডিগ্রিতে x, y এবং z অক্ষের চারপাশে ঘূর্ণনকে উপস্থাপন করে।

0 0 0
30 0 40
95 320 12

আউটপুট

আপনি এটি আলাদা উইন্ডোতে প্রদর্শন করতে পারেন বা একটি চিত্র সংরক্ষণ করতে পারেন। আপনি যে কোনও ধরণের প্রদর্শন (ভেক্টর ভিত্তিক, রাস্টারাইজড ইত্যাদি) ব্যবহার করতে পারেন।

সম্পাদনা: এএসসিআইআইকে কেবল পাঠ্য আউটপুট সহ গল্ফিং ভাষাগুলির অনুমতি দেওয়ার অনুমতি দেওয়া হয়।

রাস্টারাইজড বা ASCII গ্রাফিক্সের আউটপুট অবশ্যই কমপক্ষে 50 * 50 (রাস্টারাইজেশনের জন্য পিক্সেল, ASCII এর জন্য অক্ষর) হতে হবে

অতিরিক্ত তথ্য

ধনাত্মক z অক্ষটি উইন্ডোটি থেকে নির্দেশ করে, এক্স অক্ষটি অনুভূমিক এবং y অক্ষটি উল্লম্ব। মূলত ওপেনএল স্ট্যান্ডার্ড

কোনও নির্দিষ্ট অক্ষের নেতিবাচক দিকের ঘনক্ষেত্রের দিকে নজর দেওয়া যদি ঘড়ির কাঁটার বিপরীতে থাকে তবে যেমন y অক্ষের জন্য নিচের দিকে তাকান।

Cameraণাত্মক z দিকের কিউব থেকে যুক্তিসঙ্গত দূরত্বে ক্যামেরাটি z অক্ষে থাকা উচিত, কিউবটি (0; 0; 0) এ হওয়া উচিত। দ্য. কিউবটিও পুরোপুরি দৃশ্যমান হওয়া দরকার এবং অঙ্কন ফ্রেমের কমপক্ষে 50% নেওয়া উচিত। ক্যামেরাটি কিউবে ধনাত্মক z দিকের দিকে তাকাতে হবে।

কিউবের ঘূর্ণনগুলি x-> y-> z ক্রমে প্রয়োগ করা হয়।

কিউবটি কেন্দ্রের চারদিকে ঘোরানো হয়, সরানো হয় না।

2 ডি স্পেসে কিউব প্রজেক্ট করতে, আপনাকে পয়েন্ট এবং ক্যামেরার মধ্যে z- অক্ষের সমান্তরাল দূরত্বের সাথে কিউবের x এবং y স্থানাঙ্কগুলি ভাগ করতে হবে।

বিধি

রেন্ডারিং লাইব্রেরিগুলি অনুমোদিত, তবে অনুভূমিকগুলি কোডে সংজ্ঞায়িত করা দরকার। 3 ডি কিউব মডেল শ্রেণি নেই।

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

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


1
এটি কি ওয়্যারফ্রেম হতে হবে?
Rɪᴋᴇʀ

পয়েন্টগুলির জন্য একটি অ্যালগরিদম অন্তর্ভুক্ত করার জন্য যত্নশীল?
লিকি নুন

3
কোন ক্রম / দিকনির্দেশগুলি আবর্তিত হয়? ক্যামেরা কোথা থেকে দেখছে? আমাদের কোন ধরণের প্রজেকশন ব্যবহার করতে হবে?
flawr

6
তবে আমি যেমন বলেছি, আবর্তনগুলি কার্যকর হবে না। আপনি এখন এটি সংজ্ঞায়িত হিসাবে, ঘনক্ষেত্রটি যদি ক্ষেত্রের বাইরে চলে যায় তবে উদাহরণস্বরূপ x অক্ষের চারদিকে ঘোরানো। স্যান্ডবক্স ব্যবহার করুন ।
flawr

6
@ EᴀsᴛᴇʀʟʏIʀᴋ google will tell you the formula. না , চ্যালেঞ্জগুলি পোস্টের শৃঙ্খলে অন্তর্ভুক্ত , যতটা সম্ভব সমাধান করার জন্য প্রয়োজনীয় উপাদান এবং তথ্য থাকতে হবে । শুধু বুঝতে শুরু করার জন্য আমার গুগলিং বা উইকিপিডিয়া-ইনিংয়ের দরকার নেই।
বিড়াল

উত্তর:


2

জুতা (রুবি) 235 231

স্ক্র্যাচ থেকে সমস্ত কিছু গণনা করা।

Shoes.app{p,a,b,c=ARGV.map{|j|j.to_f/90}
k=1+i="i".to_c
p=(0..3).map{|j|y,z=(k*i**(j+a)).rect
x,z=(((-1)**j+z*i)*i**b).rect
q=(x+y*i)*i**c
[90*(k+q/(z-4)),90*(k+q/(4+z))]}
4.upto(15){|j|line *(p[j%4][0].rect+p[(j+j/4)%4][1].rect)}}

কমান্ডলাইন থেকে কল যেমন shoes cube3d.rb 0 30 0

ধারণাটি হ'ল এক সাথে 3 ডি তে একটি টেট্রহেড্রনের চারটি শীর্ষে উত্পন্ন / ঘোরানো। তারপরে, এগুলিকে 2 ডি তে হ্রাস করার সাথে সাথে আমরা বিপরীত টেট্রেহেড্রনের চারটি উল্লম্বটি তৈরি করি (মোট 8 টি উল্লম্বটি কিউবের সমান হয় being) এটি 4 টি দেহের ত্রিভুজের সাথে সংযুক্ত 4 টি উল্লম্ব দেয়। অবশেষে 2 ডি কোণটি লাইন দ্বারা সংযুক্ত করা হয়: মূল টিট্রেহেড্রনের প্রতিটি শীর্ষটিকে ঘনকটির 12 টি প্রান্ত এবং 4 টি দেহ তির্যক গঠন করে বিপরীতমুখী টেটারহেড্রনের প্রতিটি শীর্ষবিন্দুর সাথে অবশ্যই সংযুক্ত থাকতে হবে। ক্রমটি নিশ্চিত করে যে শরীরের তির্যকগুলি প্লট করা হয়নি।

পরীক্ষার ক্ষেত্রে আউটপুট

নোট করুন, শেষ দুটি পরীক্ষার মামলার সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য z অক্ষটি সম্পর্কে ঘূর্ণনটি দর্শকের পিওভি থেকে ঘড়ির কাঁটার দিকে। এটি অবশ্য অনুমানের সাথে বৈপরীত্য বলে মনে হচ্ছে। রোটেশন দিকটি *i**c-> সংশোধন করে বিপরীত হতে পারে/i**c

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

ungolfed

Shoes.app{
  p,a,b,c=ARGV.map{|j|j.to_f/90}   #Throw away first argument (script name) and translate next three to fractions of a right angle.
  k=1+i="i".to_c                   #set up constants i=sqrt(-1) and k=1+i

  p=(0..3).map{|j|                 #build an array p of 4 elements (each element wil be a 2-element array containing the ends of a body diagonal in complex number format)
    y,z=(k*i**(j+a)).rect          #generate 4 sides of square: 1+i,i-1,-1-i,-i+1, rotate about x axis by a, and store in y and z as reals 
    x,z=(((-1)**j+z*i)*i**b).rect  #generate x axis displacements 1,-1,1,-1, rotate x and z about y axis by b, store in x and z as reals
    q=(x+y*i)*i**c                 #rotate x and y about z axis, store result in q as complex number
  [90*(k+q/(z-4)),90*(k+q/(4+z))]} #generate "far" vertex q/(4+z) and "near" vertex q/-(4-z) opposite ends of body diagonal in 2d format.

  4.upto(15){|j|                   #iterate through 12 edges, use rect and + to convert the two complex numbers into a 4 element array for line method
    line *(p[j%4][0].rect+         #cycle through 4 vertices of the "normal" tetrahedron
     p[(j+j/4)%4][1].rect)         #draw to three vertices of the "inverted" tetrahedron. j/4=1,2,3, never 0
  }                                #so the three edges are drawn but the body diagonal is not.
}

নোট করুন যে historicalতিহাসিক কারণে 90 এর স্কেল ফ্যাক্টরটি 9 নং লাইনে প্রয়োগ করা হয়েছে (গল্ফিংয়ের জন্য লাইন 2-তে 90 ডিগ্রি হিসাবে একই হিসাবে বেছে নেওয়া হয়েছে) তবে শেষ পর্যন্ত এই নির্দিষ্ট মানটি ব্যবহার করার ক্ষেত্রে কোনও গল্ফিং সুবিধা ছিল না, তাই এটি একটি পরিণত হয়েছে স্বেচ্ছাসেবী পছন্দ।


3

এইচটিএমএল / সিএসএস / জেএস, 9৩৯ বাইট, সম্ভবত অ-প্রতিযোগিতামূলক

তবে আমি কেবল সিএসএস 3 ডি রূপান্তরগুলি প্রদর্শন করতে চেয়েছিলাম।


এটি আসলে বেশ ঝরঝরে দেখাচ্ছে। আমি এর আগে CSS3 রূপান্তরগুলির সাথে অভিজ্ঞতা অর্জন করেছি তবে এতে আমার সমস্যা ছিল।
বিলিন্ট

আপনার মনে হচ্ছে ভুল ক্রমে আবর্তন রয়েছে। এটি x তারপর y তারপর z হওয়া উচিত। আপনি z তারপর y তারপর এক্স আছে। @ বুলিন্ট নিশ্চিত করতে পারেন।
লেভেল রিভার সেন্ট

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

আপনি কি এখনও একটি বাইট গণনা প্রদান করতে পারেন? উত্তরগুলি প্রতিদ্বন্দ্বিতাপূর্ণ হলেও তাদের সর্বদা একটি বাইট গণনা থাকা উচিত
ডাউনওয়েট

@ ডাউনগোট গল্ফড বা অবরুদ্ধ?
নীল

0

ম্যাপেল, ১৩০ + ১৪ (প্রগতিতে)

with(plots):f:=(X,Y,Z)->plot3d(0,x=0..1,y=0..1,style=contour,tickmarks=[0,0,0],labels=["","",""],axes=boxed,orientation=[Z,-X,Y]);

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

এটি কোনও বাক্সের মধ্যে একটি ধ্রুবক ফাংশন প্লট করে, তারপরে টিক্স, লেবেল এবং ফাংশনটি নিজেই আড়াল করার জন্য প্লটের বিকল্পগুলি ব্যবহার করে। projection=.5বিকল্পগুলিতে যুক্ত করা ক্যামেরাকে আরও কাছে নিয়ে আসে, দৃষ্টিকোণ দর্শন সক্ষম করে।
চশমাগুলি চূড়ান্ত হওয়ার আগে আমি এটি লিখেছিলাম এবং ঘোরার ক্রমের x, y', z''পরিবর্তে x, y, z। আমি কোণগুলি স্থির না করা পর্যন্ত, এখানে আরও একটি সমাধান

পিওভ-রে, 182

#include"a.txt"
#include"shapes.inc"
camera{location 9*z look_at 0}
light_source{9*z color 1}
object{Wire_Box(<-2,-2,-2>,<2,2,2>,.01,0)texture{pigment{color rgb 1}}rotate<R.x,-R.y,-R.z>}

a.txtফাইলের মাধ্যমে ইনপুট পড়বে যা ঘূর্ণন কোণগুলির
#declare R=<xx,yy,zz>;
সাথে থাকা উচিতxx,yy,zz

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


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