রে-ট্রেস একটি চকচকে গোলক


15

আমি পিওভি-রে ডাউনলোড করেছি এবং এই চকচকে ধাতব গোলকের 90s এর শৈলীটি সরবরাহ করেছি:

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

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

নিয়মাবলী:

  • চিত্রটিতে অবশ্যই একটি অনন্ত চেকবোর্ডের ওপরে ঘোরাফেরাতে প্রতিফলিত গোলকটি চিত্রিত করতে হবে। চেরবোর্ড নিজেই এবং গোলকের মধ্যে এর প্রতিবিম্ব উভয়ই চিত্রটিতে প্রদর্শিত হবে। এটি অবশ্যই দৃষ্টিভঙ্গি হতে হবে যে আমরা এটি যা দেখছি। এর বাইরে জ্যামিতি, রঙ, উপাদান সংক্রান্ত বৈশিষ্ট্য ইত্যাদির বিবরণ আপনার উপর নির্ভর করে।

  • দৃশ্যে অবশ্যই কিছু আলোকসজ্জা থাকতে হবে: গোলকের অংশগুলি অন্যান্য অংশের চেয়ে গা dark় হওয়া উচিত এবং দৃশ্যটি এটি কোথায় থেকে আলো আসছে তা মোটামুটিভাবে বলা সম্ভব। এর বাইরে, আলোক মডেলের বিবরণগুলি আপনার উপর নির্ভর করে। (আপনি যদি নিজের পছন্দ করেন তবে আপনার নিজস্ব সরল আলোকসজ্জা মডেল উদ্ভাবন করতে পারেন)) গোলকের কোনও ছায়া ফেলতে হবে না।

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

  • আউটপুট অবশ্যই কমপক্ষে 300x300 পিক্সেল হতে হবে। এটি স্ক্রিনে প্রদর্শিত হতে পারে বা কোনও ফাইলে লেখা যেতে পারে, তা হয় ভাল।

  • আপনার কোডটি একটি যুক্তিসঙ্গত আধুনিক কম্পিউটারে এক ঘণ্টারও কম সময়ে চলতে হবে। (এটি উদার - পিওভ-রে উপরের দৃশ্যটি ব্যবহারিকভাবে তাত্ক্ষণিকভাবে উপস্থাপন করে))

  • কোনও বিল্ট-ইন রে ট্রেসিং কার্যকারিতা ব্যবহার করা যাবে না - আপনাকে অবশ্যই রেন্ডারার প্রয়োগ করতে হবে।

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

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


আমি ব্যক্তিগতভাবে আলোর প্রয়োজনীয়তা অপছন্দ করি। আমি মনে করি এটি খুব অল্প লাভের জন্য অতিরিক্ত জটিলতা যুক্ত করে। যদিও আমার মতামত।
স্টকাস্টিক

আপনি বলেন রঙ আমাদের উপর নির্ভর করে। এর মধ্যে কি গ্রেস্কেল চিত্রগুলি রয়েছে?
মার্টিন ইন্ডার

@ মার্টিনব্যাটনার হ্যাঁ, গ্রেস্কেল চিত্রগুলি ভাল।
নাথানিয়েল

@ স্টাস্টাস্টিক আমার আশা যে এটি সৃষ্টিশীলতার উত্স হয়ে উঠবে, যেহেতু লোকেরা মৌলিকভাবে সরলীকৃত তবে কেবলমাত্র হালকা মডেলগুলিকেই স্বল্প পরিমাণে কোডে নির্দিষ্ট করা যেতে পারে বলে বিশ্বাসী about আমি প্রশ্নে একটি নোট যুক্ত করেছি যে সরলীকৃত আলোক মডেলগুলি ঠিক আছে।
নাথানিয়েল

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

উত্তর:


28

পাইথন 2, 484 468 467 বাইট

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

i=int;u=249.3
def Q(A,B):
 a=A*A+B*B+9e4;b=B*u+36e4;I=b*b-a*128e4
 if I>0:
    t=(-b+I**.5)/(5e2*a);F,G,H=A*t,B*t,u*t;J,K,M=F,G+.6,H+2.4;L=a**-.5;k=2*(A*J+B*K+u*M)*L;C,D,E=A*L-k*J,B*L-k*K,u*L-k*M;L=(C*C+D*D+E*E)**-.5;t=(-4e2-G)/D;return(D*D*L*L*u,((i(F+t*C)/200+i(H+t*E)/200)&1)*(u*D*L))[D>0]
 else:return(u*B*B/a,((i(-2e2/B*A)/200+i(-6e4/B)/100)&1)*u*B/a**.5)[B>0]
open("s.pgm","wb").write("P5 800 600 255 "+"".join(chr(i(Q(j%800-4e2,j/800-u)))for j in range(480000)))

দ্রষ্টব্য: এর পরে if I>0:একটি একক ট্যাব চর পরে একটি নতুন লাইন রয়েছে তার পরে t=...

প্রোগ্রামটি চালানো s.pgm নামে একটি 800x600 চিত্র তৈরি করবে

একটি "বাস্তব" রশ্মির ট্রেসারের সূত্র থেকে শুরু হয়েছে (গল্ফ করার জন্য কিছুটা টুইট করেছেন)।

রেন্ডারিংটি আমার মৃত পুরাতন পিসিতে (পিপি সহ 0.7s) প্রায় 3s লাগে।


4
সুন্দর ছবি!
নাথানিয়েল

আপনি পুরোটির 0000সাথে প্রতিস্থাপন করে zlib কৌশল না করে কয়েকটি বাইট সংরক্ষণ করতে পারেন e4
নাথানিয়েল

@ নাথানিয়েল: দোহ ... একটি কোড গল্ফের জন্য খুব বড় ভুল :-) স্থির। আমি জেলিব প্যাকিংয়ের কৌশলটিও সরিয়েছি কারণ এর বৈধতা সম্পর্কে অনুসন্ধান করতে হয়েছিল (উদাহরণস্বরূপ সর্বশেষ সংস্করণ যখন জিপড স্ট্যান্ডার্ড পাইথনের সাথে কাজ করে তবে পাইপির সাথে কাজ করে না, এবং এটি খুব আশ্চর্যের)।
6502

আরেকটি কোডের গলফ কৌতুক, আপনি প্রতিস্থাপন করতে পারেন a if b else cসঙ্গে (c,a)[b]এতক্ষণ আপনি শূন্য ত্রুটি দ্বারা যেমন বিভাজন এড়াতে স্বল্প-পরিক্রমার উপর নির্ভর করে না হিসাবে। এছাড়াও if A:code;return B\nelse:return Cআপনি প্রতিস্থাপন করতে পারেন code;return(C,B)[A]
ক্লডিউ

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