আপনি কীভাবে ট্রান্সফর্মেশন ম্যাট্রিক্স থেকে অরিয়েন্টেশন বের করতে পারেন?


10

আমার কাছে একটি 4x4 রূপান্তর ম্যাট্রিক্স এম আছে এবং আমি এম দ্বারা পরিবর্তিত হয়ে গোলকের আকৃতিটি সন্ধান করতে চাই (গোলকটি মূলতে রয়েছে এবং এর ব্যাসার্ধ 1 রয়েছে)

আমি জানি আমি কেবল এম দ্বারা (0,0,0,1) গুণ করে কেন্দ্রটি সন্ধান করতে পারি।

যাইহোক, গোলকটি স্কোয়াশ এবং গোলকটি ঘুরতে পারে বলে ব্যাসার্ধটি একটি সমস্যা হয়ে ওঠে becomes ফলস্বরূপ উপবৃত্তাকার নতুন ব্যাসার্ধ (এস) কীভাবে সন্ধান করব? দৃষ্টিভঙ্গি খুঁজে বের করার কোনও উপায় আছে কি?

আরও সুনির্দিষ্টভাবে, আমাকে সীমানা গোলকের আকারটি জানতে হবে যা রূপান্তরিত ক্ষেত্রটি আবদ্ধ করবে। অন্য কথায়, | এম * ভি - এম * (0,0,0,1) | সর্বাধিক কী, যেখানে ভি ইউনিট ভেক্টর (মূল ক্ষেত্রের একটি বিন্দু)।


1
আপনি কি কেবল পরিবর্তিত অক্ষ ভেক্টরগুলির দৈর্ঘ্য গণনা করতে পারবেন না? (আপনার ম্যাট্রিক্সের আবর্তনের অংশের 3 টি কলাম) সীমাবদ্ধ গোলকের দীর্ঘতম ভেক্টরের দৈর্ঘ্যের সমান ব্যাসার্ধ হবে।
বার্ট

না, আমি এটি সঠিক বলে মনে করি না। দীর্ঘতম দিকটি অক্ষরেখাযুক্ত নাও হতে পারে। (কল্পনা করুন আপনি যদি এটি স্কোয়াশ করেন, এটিকে ঘোরালেন, আবার স্কোয়াশ করলেন, আরও কিছু
ঘোরালেন

হুম, বিষয়টি নিশ্চিত নয়। আমি যদি নিজেকে বোঝাতে পরিচালিত করি তবে আমি আজ পরে উত্তর লিখব। ;)
বার্ট

সমস্যাটি হ'ল, আপনি যদি এসসিএএল রূপান্তর করেন তবে এম ম্যাট্রিক্সের বেস ভেক্টরগুলিকে একে অপরের কাছে অর্থোগোনাল থাকতে হবে না।
GPUquant

উত্তর:


6

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

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

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


ধন্যবাদ, আমি বিস্তারিত প্রতিক্রিয়া প্রশংসা করি। অন্যান্য উত্তরে প্রদত্ত পচন কোথায় কাজ করতে ব্যর্থ হয়?
ক্যাপ্টেন কোডম্যান

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

2

ম্যাট্রিক্স থেকে স্কেল ফ্যাক্টর আহরণ এবং তার উপাদানগুলির সর্বাধিক মান ব্যবহার করুন। এসআরটি (স্কেল-রোটেশন-ট্রান্সলেশন) ম্যাট্রিক্স ব্যবহার করে আপনি এটি এর মতো করতে পারেন:

glm::mat4 m = ...;
// Extract col vectors of the matrix
glm::vec3 col1(m[0][0], m[0][1], m[0][2]);
glm::vec3 col2(m[1][0], m[1][1], m[1][2]);
glm::vec3 col3(m[2][0], m[2][1], m[2][2]);
//Extract the scaling factors
glm::vec3 scaling;
scaling.x = glm::length(col1);
scaling.y = glm::length(col2);
scaling.z = glm::length(col3);

float scaleFactor = MAX(scaling.x, MAX(scaling.y, scaling.z));

( http://wklej.org/id/950061/ এর উপর ভিত্তি করে - নামটি দ্রবীভূত TRS হয় এবং ডিসকপোজএসআরটি নয় কারণ আমি অর্ডারযুক্ত নামগুলি ব্যবহার করি যা ম্যাট্রিকগুলি ওপেনগিএলে গুণিত হয়)।

এখন আপনি স্কেলফ্যাক্টর দ্বারা মূল গোলকের ব্যাসার্ধকে গুণ করতে পারেন এবং আপনার সীমানা গোলক রয়েছে।

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