উত্তর:
হ্যাঁ, আপনি অনুবাদের ক্ষেত্রে একটি ভেক্টর যুক্ত করতে পারেন। ম্যাট্রিক্স ব্যবহারের কারণটি বিভিন্ন মিলিত রূপান্তরগুলি পরিচালনা করার জন্য অভিন্ন পদ্ধতিতে ফোটে।
উদাহরণস্বরূপ, ঘূর্ণন সাধারণত একটি ম্যাট্রিক্স ব্যবহার করে করা হয় (ঘূর্ণন মোকাবেলার অন্যান্য উপায়ের জন্য @ মিকএলএইচ মন্তব্য দেখুন), তাই একাধিক রূপান্তর (রোটেশন / অনুবাদ / স্কেলিং / প্রজেকশন ... ইত্যাদি) একসাথে উপায়ে ডিল করার জন্য, আপনার এগুলি একটি ম্যাট্রিক্সে এনকোড করা দরকার।
ভাল, আরও প্রযুক্তিগতভাবে বলতে; একটি রূপান্তর একটি বিন্দু / ভেক্টরকে অন্য পয়েন্ট / ভেক্টরকে ম্যাপিং করছে।
p` = T(p);
যেখানে p` হ'ল রূপান্তরিত বিন্দু এবং টি (পি) হ'ল রূপান্তর ফাংশন।
আমরা একাধিক রূপান্তর একত্রিত করতে এটি করার দরকার ম্যাট্রিক্স ব্যবহার না করে দেওয়া:
p1 = টি (পি);
p ফাইনাল = এম (পি 1);
কোনও ম্যাট্রিক্স একাধিক ধরণের রূপান্তরকে একক ম্যাট্রিক্সে মিশ্রিত করতে পারে না (যেমন অ্যাফাইন, লিনিয়ার, প্রজেক্টিভ)।
একটি ম্যাট্রিক্স ব্যবহার করে আমাদের ট্রান্সফর্মেশনগুলির চেইনগুলি একত্রিত করার এবং তারপরে ব্যাচগুলি তাদের গুণিত করার সুযোগ দেয়। এটি আমাদের জিপিইউ দ্বারা সাধারণত একটি টন চক্র সাশ্রয় করে (এটি নির্দেশ করার জন্য @ ক্রিশ্চিয়ানআরওকে ধন্যবাদ)।
টি ফাইনাল = টি * আর * পি; // অনুবাদ প্রকল্প ঘোরান
p ফাইনাল = টি ফাইনাল * পি;
এটি উল্লেখ করাও ভাল যে জিপিইউ এবং এমনকি কিছু সিপিইউ ভেক্টর অপারেশনের জন্য অনুকূলিত হয়েছে; সিমডি এবং জিপিইউগুলি ব্যবহার করে ডিজাইন অনুসারে ডেটা সমান্তরাল প্রসেসরের সাহায্যে ডেটা চালিত হয়, সুতরাং ম্যাট্রিকগুলি ব্যবহার করে হার্ডওয়্যার ত্বরণের সাথে পুরোপুরি ফিট হয় (আসলে, জিপিইউগুলি ম্যাট্রিক্স / ভেক্টর অপারেশনগুলি ফিট করার জন্য ডিজাইন করা হয়েছিল)।
আপনি যা যা করতে যাচ্ছেন তা যদি কোনও একক অক্ষ ধরে চলে যায় এবং অন্য কোনও রূপান্তর কখনও প্রয়োগ না করে তবে আপনি যা পরামর্শ দিচ্ছেন তা ঠিক আছে।
ম্যাট্রিক্স ব্যবহারের আসল শক্তি হ'ল আপনি খুব সহজেই একসাথে কয়েকটি জটিল ক্রিয়াকলাপকে একত্রিত করতে পারেন এবং একই সিরিজের ক্রিয়াকলাপকে একাধিক বস্তুতে প্রয়োগ করতে পারেন।
বেশিরভাগ কেসটি সহজ নয় এবং আপনি যদি প্রথমে আপত্তিটি দেখান, এবং বিশ্ব অক্ষগুলির পরিবর্তে এর স্থানীয় অক্ষের সাথে রূপান্তর করতে চান তবে আপনি দেখতে পাবেন যে আপনি কেবল সংখ্যার একটিতে 10 যুক্ত করতে পারবেন না এবং এটি সঠিকভাবে কাজ করতে পারবেন না ।
"কেন" প্রশ্নের সংক্ষিপ্তভাবে উত্তর দেওয়ার জন্য, কারণ একটি 4x4 ম্যাট্রিক্স একবারে আবর্তন, অনুবাদ এবং স্কেলিং অপারেশনগুলিকে বর্ণনা করতে পারে। এগুলির যে কোনও একটি ধারাবাহিকভাবে বর্ণনা করতে সক্ষম হওয়া অনেকগুলি বিষয়কে সহজ করে।
বিভিন্ন গাণিতিক ক্রিয়াকলাপের সাথে বিভিন্ন ধরণের রূপান্তরগুলি আরও সহজভাবে উপস্থাপন করা যেতে পারে। আপনি যেমন নোট করেছেন, অনুবাদ কেবল যুক্ত করেই করা যেতে পারে। স্কেলারের দ্বারা গুণ করে ইউনিফর্ম স্কেলিং। তবে যথাযথভাবে তৈরি 4x4 ম্যাট্রিক্স যে কোনও কিছুই করতে পারে। সুতরাং 4x4 এর ধারাবাহিকভাবে কোড এবং ইন্টারফেসকে আরও সহজ করে তোলে। আপনি এই 4x4 গুলি বোঝার ক্ষেত্রে কিছুটা জটিলতা দিয়েছেন তবে তারপরে প্রচুর জিনিস সহজ এবং দ্রুত হয়।
4x4 ম্যাট্রিক্স ব্যবহারের কারণটি হল যাতে অপারেশনটি একটি রৈখিক রূপান্তর হয় । এটি সমজাতীয় স্থানাঙ্কের একটি উদাহরণ । একই জিনিস 2 ডি ক্ষেত্রে করা হয় (3x3 ম্যাট্রিক্স ব্যবহার করে)। সমজাতীয় স্থানাঙ্কগুলি ব্যবহার করার কারণটি হ'ল একটি 3 অপারেশন ব্যবহার করে সমস্ত 3 জ্যামিতিক ট্যানসফর্মেশন করা যেতে পারে; অন্যথায় একজনের জন্য একটি 3x3 ম্যাট্রিক্স গুণ এবং একটি 3x3 ম্যাট্রিক্স সংযোজন (অনুবাদ হিসাবে) করা দরকার। সেগ্রপ্রকাশের এই লিঙ্কটি দরকারী।
অনুবাদগুলি 3 ডি ম্যাট্রিক দ্বারা প্রতিনিধিত্ব করা যায় না
একটি সহজ যুক্তি হ'ল অনুবাদটি মূল ভেক্টর নিতে পারে:
0
0
0
উত্স থেকে দূরে, বলুন x = 1
:
1
0
0
তবে এর জন্য ম্যাট্রিক্সের দরকার পড়বে যে:
| a b c | |0| |1|
| d e f | * |0| = |0|
| g h i | |0| |0|
তবে তা অসম্ভব।
আর একটি যুক্তি হ'ল সিঙ্গুলার ভলিউম ডিসপোপজেশন উপপাদ্য , যা বলে যে প্রতিটি ম্যাট্রিক্স দুটি ঘূর্ণন এবং একটি স্কেলিং অপারেশন দিয়ে তৈরি করা যেতে পারে। সেখানে কোনও অনুবাদ নেই।
ম্যাট্রিক কেন ব্যবহার করা যায়?
অনেকগুলি মডেল করা অবজেক্টস (যেমন একটি গাড়ী চ্যাসিস) বা মডেলিং অবজেক্টগুলির অংশ (যেমন একটি গাড়ী টায়ার, ড্রাইভিং হুইল) হ'ল সলিড: ভার্টেক্সের মধ্যবর্তী দূরত্ব কখনই পরিবর্তিত হয় না।
তাদের উপর আমরা কেবলমাত্র রূপান্তরগুলি করতে চাই তা হ'ল ঘূর্ণন এবং অনুবাদ।
ম্যাট্রিক্সের গুণটি ঘূর্ণন এবং অনুবাদ দুটিই এনকোড করতে পারে।
রোটেশন ম্যাট্রিক্সের সুস্পষ্ট সূত্র রয়েছে, উদাহরণস্বরূপ: কোণের জন্য একটি 2D ঘূর্ণন ম্যাট্রিক্স a
ফর্মের:
cos(a) -sin(a)
sin(a) cos(a)
3 ডি এর জন্য অভিন্ন সূত্র রয়েছে তবে নোট করুন যে 3 ডি ঘূর্ণনগুলি কেবল 1 এর পরিবর্তে 3 টি পরামিতি নেয় ।
অনুবাদগুলি কম তুচ্ছ এবং পরে আলোচনা করা হবে। তারা 4 ডি ম্যাট্রিক্স প্রয়োজন কারণ।
ম্যাট্রিক ব্যবহার করা কেন শীতল?
কারণ একাধিক ম্যাট্রিকের সংমিশ্রণটি ম্যাট্রিক্সের গুণ দ্বারা প্রাক-গণনা করা যেতে পারে ।
উদাহরণস্বরূপ, যদি আমরা v
ম্যাট্রিক্সের সাথে আমাদের গাড়ি চ্যাসিসের এক হাজার ভেক্টর অনুবাদ করতে যাই এবং না করে ম্যাট্রিক্সের T
সাথে ঘোরান R
:
v2 = T * v
এবং তারপর:
v3 = R * v2
প্রতিটি ভেক্টরের জন্য, আমরা প্রাক-গণনা করতে পারি:
RT = R * T
এবং তারপরে প্রতিটি শীর্ষবিন্দুর জন্য কেবল একটি গুণ করুন:
v3 = RT * v
আরও ভাল: আমরা যদি তারপরে গাড়ির সাথে টায়ার এবং ড্রাইভিং হুইলটির শীর্ষস্থান স্থাপন করতে চাই, আমরা কেবল আগের ম্যাট্রিক্সটিকে RT
গাড়ীর সাথে সম্পর্কিত ম্যাট্রিক্স দিয়ে গুণ করব।
এটি স্বাভাবিকভাবেই ম্যাট্রিক্সের একটি স্ট্যাক বজায় রাখে :
কীভাবে একটি মাত্রা যুক্ত করা সমস্যার সমাধান করে
আসুন 1D থেকে 2D পর্যন্ত কেসটি বিবেচনা করুন যা কল্পনা করা সহজ।
1 ডি-তে ম্যাট্রিক্স কেবল একটি সংখ্যা, এবং আমরা 3 ডি-তে দেখেছি এটি কোনও অনুবাদ করতে পারে না, কেবল একটি স্কেলিং ..
তবে আমরা যদি অতিরিক্ত মাত্রা হিসাবে যুক্ত করি তবে:
| 1 dx | * |x| = | x + dx |
| 0 1 | |1| | 1 |
এবং তারপরে আমরা নতুন অতিরিক্ত মাত্রা সম্পর্কে ভুলে যাই, আমরা পাই:
x + dx
যেমনটি আমরা চেয়েছিলাম
এই 2 ডি রূপান্তরটি এত গুরুত্বপূর্ণ যে এর একটি নাম রয়েছে: শিয়ার ট্রান্সফর্মেশন ।
এই রূপান্তরটি কল্পনা করা দুর্দান্ত:
প্রতিটি অনুভূমিক রেখা (স্থির y
) কীভাবে স্রেফ অনুবাদ করা হয়েছে তা নোট করুন ।
আমরা কেবলমাত্র y = 1
নতুন 1D লাইন হিসাবে লাইনটি গ্রহণ করেছি এবং এটি 2 ডি ম্যাট্রিক্স দিয়ে অনুবাদ করেছি।
ফর্মের 4 ডি শিয়ার ম্যাট্রিক্স সহ জিনিসগুলি 3 ডি তে সাদৃশ্যযুক্ত:
| 1 0 0 dx | | x | | x + dx |
| 0 1 0 dy | * | y | = | y + dy |
| 0 0 1 dz | | z | | z + dz |
| 0 0 0 1 | | 1 | | 1 |
এবং আমাদের পুরানো 3 ডি ঘূর্ণন / স্কেলিং এখন ফর্মের:
| a b c 0 |
| d e f 0 |
| g h i 0 |
| 0 0 0 1 |
এই জেমি কিং ভিডিও টিউটোরিয়ালটিও দেখার মতো।
অ্যাফাইন স্পেস
অ্যাফাইন স্পেসটি 4 ডি শিয়ার (3 ডি অনুবাদ) এর সাথে আমাদের সমস্ত 3 ডি লিনিয়ার রূপান্তর (ম্যাট্রিক্স গুণ) দ্বারা উত্পন্ন স্থান is
যদি আমরা একটি শিয়ার ম্যাট্রিক্স এবং একটি 3D লিনিয়ার রূপান্তর গুণ করি তবে আমরা সর্বদা ফর্মের কিছু পাই:
| a b c dx |
| d e f dy |
| g h i dz |
| 0 0 0 1 |
এটি সর্বাধিক সাধারণ অ্যাফাইন ট্রান্সফর্মেশন, যা 3 ডি ঘূর্ণন / স্কেলিং এবং অনুবাদ করে।
একটি গুরুত্বপূর্ণ সম্পত্তি হ'ল আমরা যদি 2 টি মাইক্রিনিক ম্যাট্রিক্সকে গুণ করি:
| a b c dx | | a2 b2 c2 dx2 |
| d e f dy | * | d2 e2 f2 dy2 |
| g h i dz | | g2 h2 i2 dz2 |
| 0 0 0 1 | | 0 0 0 1 |
আমরা সর্বদা ফর্মের আরেকটি অ্যাফাইন ম্যাট্রিক্স পাই:
| a3 b3 c3 (dx + dx2) |
| d3 e3 f3 (dy + dy2) |
| g3 h3 i3 (dz + dz2) |
| 0 0 0 1 |
গণিতবিদগণ এই সম্পত্তিটি বন্ধ বলে আখ্যায়িত করেন এবং একটি স্থান নির্ধারণ করার জন্য এটি প্রয়োজন।
আমাদের জন্য, এর অর্থ হ'ল আমরা আনন্দের সাথে চূড়ান্ত রূপান্তরের জন্য গণনা করতে ম্যাট্রিক্স গুণ করতে পারি, এ কারণেই সাধারণ 4D লিনিয়ার রূপান্তরগুলি প্রাপ্ত না করে প্রথম স্থানে ব্যবহৃত ম্যাট্রিকগুলি ব্যবহার করুন।
ফ্রস্টাম প্রজেকশন
তবে অপেক্ষা করুন, আরও একটি গুরুত্বপূর্ণ রূপান্তর রয়েছে যা আমরা সর্বদা করি: glFrustum
যা একটি বস্তুকে 2x আরও বেশি করে 2x ছোট করে তোলে।
প্রথমে glOrtho
বনাম সম্পর্কে কিছুটা স্বজ্ঞাততা glFrustum
পান: https://stackoverflow.com/questions/2571402/explain-the-usage-of-glortho/36046924#36046924
glOrtho
কেবল অনুবাদ + স্কেলিং দিয়েই করা যেতে পারে তবে আমরা কীভাবে বাস্তবায়ন করতে পারি glFrustum
ম্যাট্রিক দিয়ে ?
অনুমান করি যে:
z = -1
দৈর্ঘ্য 2 বর্গ হয়z = -2
কেবলমাত্র যদি আমরা আরও সাধারণ 4-ভেক্টর প্রকারের অনুমতি দিয়ে থাকি:
(x, y, z, w)
সঙ্গে w != 0
, এবং এ ছাড়াও আমরা প্রতিটি চিহ্নিত (x, y, z, w)
সঙ্গে (x/w, y/w, z/w, 1)
, তারপর ম্যাট্রিক্স সঙ্গে একটি frustum রূপান্তর হবে:
| 1 0 0 0 | | x | | x | | x / -z |
| 0 1 0 0 | * | y | = | y | identified to | y / -z |
| 0 0 1 0 | | z | | z | | -1 |
| 0 0 -1 0 | | w | | -z | | 0 |
আমরা যদি ফেলে দিই z
এবং w
শেষে, আমরা পাই:
x_proj = x / -z
y_proj = y / -z
আমরা ঠিক যা চেয়েছিলাম! আমরা কিছু মানের জন্য যাচাই করতে পারি, যেমন:
z == -1
, ঠিক বিমানটিতে আমরা প্রকল্প করছি, x_proj == x
এবংy_proj == y
।z == -2
, তবে x_proj = x/2
: অবজেক্টগুলি অর্ধেক আকারের হয়।কিভাবে নোট করুন glFrustum
রূপান্তরটি অ্যাফাইন ফর্মের নয় তা : এটি কেবল ঘোরানো এবং অনুবাদ দিয়ে প্রয়োগ করা যায় না।
যোগ করার w
এবং এটির দ্বারা বিভাজনের গাণিতিক "কৌশল" বলা হয় বিভাজনকে সমজাতীয় স্থানাঙ্ক বলে
আরও দেখুন: সম্পর্কিত স্ট্যাক ওভারফ্লো প্রশ্ন: https://stackoverflow.com
এই দেখুনমডেল, ভিউ এবং প্রক্ষেপণের ধারণাটি বুঝতে ভিডিওটি ।
4x4 ম্যাট্রিক কেবল একটি 3 ডি অবজেক্ট অনুবাদ করার জন্য ব্যবহৃত হয় না। এছাড়াও অন্যান্য বিভিন্ন উদ্দেশ্যে।
দেখুন এই বুঝতে বিশ্বের ছেদচিহ্ন 4D ম্যাট্রিক্স হিসাবে প্রতিনিধিত্ব করা হয় এবং কিভাবে রুপান্তরিত হয়।