আপনি কীভাবে একটি ঘনকটিকে একটি গোলকের মধ্যে পরিণত করবেন?


31

আমি একটি নিবন্ধের উপর ভিত্তি করে একটি চতুষ্কোণ গোলক তৈরি করার চেষ্টা করছি , যা এর মতো ফলাফল দেখায়:

ঠিক

আমি সঠিকভাবে একটি ঘনক তৈরি করতে পারি:

আগে

তবে যখন আমি এই সূত্র অনুসারে সমস্ত পয়েন্টগুলি রূপান্তর করি (উপরের লিঙ্কযুক্ত পৃষ্ঠা থেকে):

সূত্র

    x = x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0));
    y = y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0));
    z = z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0));

আমার গোলকটি দেখতে এমন দেখাচ্ছে:

পরে

আপনি দেখতে পাচ্ছেন, কিউবটির প্রান্তগুলি এখনও অনেক দূরে বাইরে বেরিয়ে এসেছে। ঘনক্ষেত্রটি সমস্ত অক্ষ থেকে -1শুরু +1করে, যেমন নিবন্ধটি বলেছে।

কোন ধারণা কি ভুল?


1
আপনার বাস্তবায়নে কি "x = x ..." সমস্যা রয়েছে বা এটি ঠিক এখানে?
সাপ 5

8
কল্পনাপ্রসূত চাক্ষুষ এইডস। তাদের অন্তর্ভুক্ত করার জন্য ধন্যবাদ
doppelgreener

2
শিরোনামে প্রশ্নের উত্তর দেওয়ার জন্য, আপনি কিউবটিকে একটি গোলক হিসাবে তৈরি করতে কেবল উল্লম্বটি স্বাভাবিক করতে পারেন। উল্লম্বের বিতরণ সম্ভবত লিঙ্কযুক্ত পদ্ধতি থেকে আলাদা হবে।
মিসেল

উত্তর:


27

আপনি সূত্রটি লিখেছেন।

x = x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0));
y = y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0));
z = z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0));

আপনি আসলটি পরিবর্তন করে xএটিকে ওভাররাইট করে দিন। তারপরে আপনি yমূলটির xপরিবর্তে পরিবর্তিত হয়ে পরিবর্তিত হন x। তারপর আপনি পরিবর্তন zসংশোধিত সংস্করণের উপর ভিত্তি করে উভয় যারা।

আসলগুলি সংরক্ষণ করুন এবং এটি গণনা করুন:

float dx = x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0));
float dy = y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0));
float dz = z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0));

এর পর থেকে dx, dy এবং dz ব্যবহার করুন।


উপস। ভাবছিলাম না।
টম ডালিং

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