একটি ঘনক্ষেত্রের শীর্ষে আউটপুট স্থানাঙ্ক। তারপরে, বারোটি ত্রিভুজগুলির একটি তালিকা আউটপুট করুন যা ঘনক্ষেত্রকে কভার করবে, প্রতিটি ত্রিভুজটি ধারাবাহিকভাবে ওরিয়েন্টেড, তিনটি শীর্ষবিন্দু-সূচকের তালিকা। আউটপুট অবশ্যই পৃথক দশমিক সংখ্যার একটি ASCII স্ট্রিং হওয়া উচিত। এই গল্ফের কোনও ইনপুট নেই। বিজয়ী হ'ল সংক্ষিপ্ত অক্ষর, যেখানে অক্ষর সেটটি ইউনিকোড।
উদাহরণস্বরূপ, 0,0,0 কোণিত 1x1x1 ঘনকটি বিবেচনা করুন। ঘনক্ষেত্রের আটটি উল্লম্বটি 3 ডি কার্টেসিয়ান গ্রিডে নিম্নলিখিত xyz স্থানাঙ্ক দ্বারা বর্ণনা করা যেতে পারে:
x y z = (0,0,1) (1,0,1) (1,1,1) (0,1,1) (0,0,0) (1,0,0) (1,1,0) (0,1,0)
প্রতিটি শীর্ষবিন্দু একটি সূচক দেওয়া যেতে পারে: x y z->index: 0 0 1->0, 1 0 1->1, 1 1 1->2, 0 1 1->3, 0 0 0->4, 1 0 0->5, 1 1 0->6, 0 1 0->7
এখন শীর্ষ মুখটি বিবেচনা করুন, শীর্ষস্থানগুলি শূন্য থেকে তিনটিতে সূচিত হয়েছে। দুটি আচ্ছাদন ত্রিভুজ প্রতিটি তিনটি সূচক দ্বারা বর্ণনা করা যেতে পারে:
[0,1,2] [2,3,0]
কিউবার উপরে থেকে এই শীর্ষ মুখের ছবি এখানে দেওয়া হয়েছে:
3_____2
| /|
| / |
| / |
| / |
0_____1
এবং এখানে একটি কোণ থেকে দেখুন।
3____2
/ __-/|
0/_`__1 |
| | /6
|____|/
4 5
এই উভয় ত্রিভুজের অভিমুখী বা 'ঘুরানো' নোট করুন, যখন 'বাইরের' থেকে ঘনক্ষেত্রে সরাসরি প্রশ্নটির মুখের দিকে তাকান (উল্লিখিত হিসাবে প্রতিটি প্রান্তকে ঘুরে দেখেন, তবে এটি উল্টোদিকে) হয়। এখন কিউবের সমস্ত ছয় পক্ষের জন্য এটি করা কল্পনা করুন।
vertices: (0,0,1) (1,0,1) (1,1,1) (0,1,1) (0,0,0) (1,0,0) (1,1,0) (0,1,0)
triangles as indices: [0,1,2], [2,3,0], [6,5,4], [4,7,6],
[5,2,1], [2,5,6], [0,3,4], [4,3,7], [2,6,3], [3,6,7], [0,4,1], [1,4,5]
আপনি যে কোনও স্থানাঙ্কে অবস্থিত কোনও আকারের কিউবকে আউটপুট দিতে পারেন। আপনি ইচ্ছেমতো ভার্টেক্সের স্থানাঙ্কগুলিকে সংখ্যা করতে এবং অর্ডার করতে পারেন। সূচকগুলি 0 ভিত্তিক বা 1 ভিত্তিক হতে পারে। ত্রিভুজের অভিমুখটি ঘনক্ষেত্রের থেকে বা ঘড়ির কাঁটার বিপরীতে হতে পারে যখন ঘনক্ষেত্রের বাইরে থেকে দেখা হয় যতক্ষণ না এটি সমস্ত ত্রিভুজগুলির জন্য সামঞ্জস্যপূর্ণ।
আপনার ইচ্ছা অনুযায়ী আউটপুট ফর্ম্যাট করা যায়, যতক্ষণ না প্রতিটি ASCII দশমিক সংখ্যা কমপক্ষে একটি অ-সংখ্যাগত ASCII অক্ষর দ্বারা পৃথক করা হয়। উদাহরণস্বরূপ উপরের উদাহরণটি নিম্নরূপ আউটপুটও হতে পারে:
0 0 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0
0 1 2 2 3 0 6 5 4 4 7 6 5 2 1 2 5 6 0 3 4 4 3 7 2 6 3 3 6 7 0 4 1 1 4 5
এই গল্ফ ওপেনজিএল, ওবিজে, অফ, এএমএফ, সিজিএল ইত্যাদিসহ বিভিন্ন 3 ডি গ্রাফিক্স সিস্টেম এবং ফর্ম্যাট দ্বারা অনুপ্রাণিত, এই গল্ফ ক্যালভিনের শখগুলির দ্বারা আউটপুট একটি ফেস নাম্বার নাম্বার কিউব দ্বারা গল্ফের সমান , আপনার প্রয়োজনের চেয়ে বড় পার্থক্য নিজের এবং শীর্ষ ত্রিভুজ সূচকগুলির xyz স্থানাঙ্ক আউটপুট করতে। পড়ার জন্য ধন্যবাদ.
প্রতি ব্যবহারকারী অনুপ্রেরণা এখানে পাইথন 2 (নন-গোল্ফাই) এর একটি "সহায়তাকারী" বৈধকরণ প্রোগ্রাম যা ভেরিয়েবল এবং আইডেক্সস্ট্রাস্টারে পরীক্ষার আউটপুট ডেটার জন্য 'ঠিক আছে' বা 'ঠিক আছে না' প্রিন্ট করবে। এটি পুরোপুরি কাজ করে না ... তবে এটি কিছু ত্রুটি ধরতে পারে।
সম্পাদনা করুন: উদাহরণস্বরূপ নির্দিষ্ট টাইপ এবং বৈধতা কোডে বাগগুলি gs
#vertstr = '0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 0 0 1 1 1'
#idxstr = '1 2 0 2 1 3 7 5 6 4 6 5 2 4 0 4 2 6 7 3 5 1 5 3 4 1 0 1 4 5 7 6 3 2 3 6'
ভার্টসট্রি = '0 0 1 1 0 1 1 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0'
idxstr = '0 1 2 2 3 0 6 5 4 4 7 6 5 2 1 2 5 6 0 3 4 4 3 7 2 6 3 3 6 7 0 4 1 1 4 5'
ক্লাস ভেক্টর:
Def __init __ (স্ব, ভি):
self.x, self.y, self.z = V [0], ভি [1], বনাম [2]
ডিএফ __ অ্যাড __ (স্ব, ভি):
রিটার্ন ভেক্টর ([self.x + vx, self.y + vy, self.z + vz])
Def __সুব __ (স্ব, ভি):
রিটার্ন ভেক্টর ([self.xv.x, self.yv.y, self.zv.z])
Def_____ __ (স্ব):
রিটার্ন str (self.x) + ',' + str (self.y) + ',' + str (self.z)
ডিএফ ক্রস (ভি 1, ভি 2):
x = v1.y * v2.z-v2.y * v1.z
z = v1.x * v2.y-v2.x * v1.y
y = v1.z * v2.x-v2.z * v1.x
রিটার্ন ভেক্টর ([x, y, z])
# http://mathforum.org/library/drmath/view/55343.html এবং http://sympy.org
ডিএফ উইন্ডিং (ভি 1, ভি 2, ভি 3, obs):
X1, Y1, Z1, x2, Y2, Z2, X3, y3, Z3, X4, y4, Z4 = v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, v3 এর। এক্স, v3.y, v3.z, obs.x, obs.y, obs.z
d = x1 * (y2 * z3 - y2 * z4 - y3 * z2 + y3 * z4 + y4 * z2 - y4 * z3)
d = d + y1 * (- x2 * z3 + x2 * z4 + x3 * z2 - x3 * z4 - x4 * z2 + x4 * z3)
d = d + z1 * (x2 * y3 - x2 * y4 - x3 * y2 + x3 * y4 + x4 * y2 - x4 * y3)
d = d - x2 * y3 * z4 + x2 * y4 * z3 + x3 * y2 * z4 - x3 * y4 * z2 - x4 * y2 * z3 + x4 * y3 * z2
ফিরতি d
ডিএফ নরমালস (ভি 1, ভি 2, ভি 3):
va = v2-v1
vb = v3-v2
ভিসি = ভি 1-ভি 3
এন 1 = ক্রস (ভ, ভিবি)
এন 2 = ক্রস (ভিবি, ভিসি)
এন 3 = ক্রস (ভিসি, ভিএ)
প্রত্যাবর্তন [এন 1, এন 2, এন 3]
ডিফ ট্রিপলাইফ (স্ট্র):
nums, triples = [], []
স্ট্রিস্ট স্প্লিট ('') এ সংখ্যার জন্য: সংখ্যা + = [ইনট (সংখ্যা)]
আমার জন্য পরিসীমা (0, লেন (সংখ্যা), 3):
ট্রিপস + = [[সংখ্যা [i], সংখ্যা [i + 1], সংখ্যা [i + 2]]]
ট্রিপল ফিরে
ভার্টস = ট্রিপলাইফ (ভার্টসার্ট)
সূচকগুলি = ট্রিপলাইফ (আইডিএক্সটার)
nsum = ভেক্টর ([0,0,0])
উইন্ডসাম = 0
XS, YS, যদ = [], [], []
ভার্ট ইন ভি জন্য:
XS + + = [বনাম [0]]
YS + + = [বনাম [1]]
যদ + + = [বনাম [2]]
# প্রিন্ট xs, ys, zs, লেন (xs)
কেন্দ্র = ভেক্টর ([ভাসা (SUM (XS)) / LEN (XS), ভাসা (SUM (YS)) / LEN (YS), ভাসা (সমষ্টি (যদ)) / লেন (যদ)])
সূচকগুলিতে ত্রিভুজটির জন্য:
ভি 1 = ভেক্টর (ভার্টস [ত্রিভুজ [0]])
v2 = ভেক্টর (ভার্টস [ত্রিভুজ [1]])
v3 = ভেক্টর (ভার্টস [ত্রিভুজ [2]])
আদর্শ = স্বাভাবিক (ভি 1, ভি 2, ভি 3)
ভি 1, ভি 2, ভি 3, নিয়মগুলি [0], নিয়মগুলি [1], নিয়মগুলি [2] মুদ্রণ করুন
নিয়মের জন্য এন:
nsum + = n
ডাব্লু = ঘুরছে (ভি 1, ভি 2, ভি 3, কেন্দ্র)
মুদ্রণ 'ঘুর', ডাব্লু
যদি w <0: উইন্ডসাম- = 1
এলিফ ডাব্লু> 0: উইন্ডসাম + = 1
if অ্যাবস (উইন্ডসাম) == 12: 'উইন্ডিং ঠিক আছে' মুদ্রণ করুন
অন্য: মুদ্রণ 'উইন্ডিং ঠিক আছে না'
যদি (nsum.x == 0 এবং nsum.y == 0 এবং nsum.z == 0): 'সাধারণ যোগ ঠিক আছে' মুদ্রণ করুন
অন্য: মুদ্রণ 'সাধারণ যোগফল ঠিক নেই'