এখানে আমরা Geometric Algebra বলে একটা জিনিস শিখব৷ এর ণানারকম অদ্ভুত অদ্ভুত
প্রয়োগ আছে৷ Computer-এ যারা ছবি আঁকে তারা এটা ব্যবহার করে, আবার যারা
ভৌতবিজ্ঞানের জটিল গবেষণা করে তাদেরও নাকি এটা কাজে লাগে! ব্যাপারটা শেখার তার
জন্য ${\mathbb R}^n$
কাকে বলে সেটা জানলে সুবিধা
হবে৷ যদি $n$-খানা real number পরপর লেখো তবে তাকে বলে একটা $n$-tuple. সাধারণতঃ,
এদের দুপাশে এক জোড়া গোল ব্র্যাকেট বসিয়ে দেওয়া হয়, যেমন $(2,3,2)$ হল একটা $3$-tuple. যতরকম
3-tuple সম্ভব, তাদের সবার set-কে বলে ${\mathbb R}^3.$ তেমনি যাবতীয় $n$-tuple-এর set-কে
বলে ${\mathbb R}^n.$ চাইলে একটা $n$-tuple-এর সাথে আরেকটা $n$-tuple যোগ বা
বিয়োগ করতে পারো৷ যেমন দুটো 4-tuple-এর যোগের উদাহরণ হল--
$$(2,3,-5,6) + (20,30,40, 60) = (22,33,35,66).$$
মানে প্রথমটার প্রথম সংখ্যার সাথে দ্বিতীয়টার প্রথম সংখ্যার যোগ, এইরকম৷
কোনো $n$-tuple-কে একটা সংখ্যা দিয়ে গুণও করা যায়, যেমন $2\times(1,2,3)=(2,4,6).$
একটা $n$-tuple লিখতে $n$-খানা সংখ্যা লিখতে হয়৷ আমরা খুব বড় বড় $n$-এর
জন্য ${\mathbb R}^n$ নিয়ে কাজ করব৷ তাই লিখতে হাত ব্যথা হয়ে যাবে৷ সৌভাগ্যক্রমে আমরা যে সব $n$-tuple
লিখব, তাদের অধিকাংশ সংখ্যাই হবে $0.$ যেমন ধরো এই 16-tuple-টা--
$$(2,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0).$$
এরকম ক্ষেত্রে একটা কৌশল করলে লেখার পরিশ্রম অনেকটা বাঁচানো যায়৷ কৌশলটা বোঝানোর জন্য আবার ${\mathbb R}^3$-র
উদাহরণ নিই৷ তিনটে যেকোনো শব্দ নাও, ধরো চেয়ার, টেবিল আর কলম৷ তাহলে আমরা $(2,3,-4)$ না লিখে বলব
$2$চেয়ার $+$ $3 $ টেবিল $-4$ কলম৷
এর সঙ্গে যদি $3$ চেয়ার $-5$ টেবিল $+6$ কলম যোগ করতে হয়, তবে চেয়ারগুলোকে আলাদা করে
যোগ, করব, টেবিলগুলোকে আলাদা করে, এইরকম৷
এই কৌশলটার সুবিধা হল,
এতে $0$-গুলোকে আলাদা করে লিখতে হয় না৷ যেমন যদি খালি চেয়ার লিখি, তবে সেটা 3-tuple হিসেবে হবে
$(1,0,0).$ অবশ্য $(0,0,0)$-কে এভাবে লেখা মুস্কিল, তাই তার জন্য একটা আলাদা
চিহ্ন ব্যবহার করব,
$\bz.$
Geometric Algebra-র মূল জিনিসটা হল $\ga(p,q,r)$ যেখানে $p,q,r$ প্রত্যেকেই একেকটা nonnegative integer.
এটার সংজ্ঞাটা এবার আমরা ধাপে ধাপে শিখব৷ সুবিধার জন্য এই উদাহরণটা মাথায় রাখো, $\ga(1,1,1).$ প্রথমেই
$n=p+q+r$ বার করে নাও৷ আমাদের উদাহরণে $n=3.$ তাহলে $\ga(p,q,r)$ হল আসলে ${\mathbb R}^{2^n},$
মানে আমাদের উদাহরণে ${\mathbb R}^8.$ অবশ্যই খালি ${\mathbb R}^{2^n}$ হলে লোকে সেটাকে
খামোখা আর নতুন করে $\ga(p,q,r)$
নাম দিত না৷ সুতরাং $\ga(p,q,r)$-এর মধ্যে বাড়তি কিছু একটা নিশ্চয়ই আছে৷ যেটা আছে সেটা হল দুটো vector-কে
গুণ করার একটা কায়দা, মানে এমন একটা গুণ যেটা দিয়ে দুটো vector-কে গুণ করে আরেকটা vector পাওয়া যায়৷
সেটার সংজ্ঞাটা বোঝার জন্য প্রথমে একটা $2^n$-tuple-কে সহজে লেখার জন্য একটা চেয়ার-টেবিল-কলম
জাতীয় কৌশল করে রাখি৷ ব্যাপারটা $n=3$ দিয়ে বোঝাব৷ এখানে আমাদের দরকার
$2^n=2^3=8$-খানা যা খুশি শব্দ৷ এদের বানাবো এইভাবে--প্রথমে
$\{1,2,...,n\}$ নাও, মানে আমাদের
ক্ষেত্রে $\{1,2,3\}.$ এর মোট $2^n = 8$-টা subset সম্ভব--
$$\phi, \{1\}, \{2\}, \{3\}, \{1,2\}, \{1,3\}, \{2,3\}, \{1,2,3\}.$$
এরাই হবে আমাদের আটটা শব্দ! সুতরাং ${\mathbb R}^8$-এর বিভিন্ন সদস্য দেখতে হবে এইরকম--
$$2\phi-4\{1,2\}+10\{2,3\}-16\{1,2,3\}.$$
তবে লোকে সাধারণতঃ এইভাবে লেখে না৷ $\{1\}$-এর বদলে লেখে $e_1,$ তেমনই $\{1,2\}$-এর
বদলে লেখে $e_{12}.$ এখানে $e$ অক্ষরটার কোনো আলাদা গুরুত্ব নেই (সম্ভবতঃ ওটা Euclid-এর
নামের আদ্যাক্ষর বলে এখানে ব্যবহৃত হচ্ছে)৷ এই কায়দায় $\phi$-কে লেখা হয় $\bo.$
এবার যে কোনো দুটো vector-কে গুণ করা শিখব৷
$\bo$ দিয়ে গুণ
করলে কিছুই বদলায় না৷ এবার বলি $e_i$-দের কী
করে গুণ করতে হয়৷ ধরো $e_1e_2$
বার করতে চাও৷ উত্তর হবে $e_{12}.$ ব্যস্! তেমনি $e_1e_3=e_{13}$ আর
$e_2e_3 = e_{23}.$ প্রতি ক্ষেত্রেই বাঁদিকে index-গুলো ছোটো থেকে বড় সাজানো
ছিল৷ যদি $e_2e_1$ বার করতে চাও, তবে হবে $-e_{12}.$ একইভাবে
$e_3e_2 = -e_{23}.$ এতক্ষণ পর্যন্ত $p,q,r$-এর কোনো ভূমিকা নেই৷ এবার ওরা
মঞ্চে প্রবেশ করবে৷ ধরো $e_ie_i$ বার করতে চাও৷ তবে উত্তর হবে হয় $\bo$ নয়তো $-\bo$ আর
নয়তো $0.$ কোনটা হবে নির্ভর করবে $i$ কত তার উপরে৷ যদি $i=1,...,p$ হয়, তবে উত্তর হবে
$\bo.$ যদি $i=p+1,...,p+q$ হয়, তবে উত্তর হবে $-\bo,$ আর নইলে হবে $0.$ সুতরাং
আমাদের ক্ষেত্রে $e_1e_1=\bo,$ $e_2e_2=-\bo$ আর $e_3e_3=0.$
এবার এই সূত্র ব্যবহার করে $(\bo+2e_1 - e_3)(e_1-e_2)$ বার করা যাবে স্কুলে যেভাবে
ব্র্যাকেট তুলে গুণ করা শিখেছিলে,
ঠিক সেইভাবে--
$$(\bo+2e_1 - e_3)(e_1-e_2) = \bo e_1+2e_1e_1 - e_3e_1-\bo e_2-2e_1e_2 +e_3e_2 =e_1+2\bo + e_{13}-e_2-2e_{12} -e_{23}.$$
এবার ধরো $e_{12}e_3$ গুণ করতে বলল৷ তবে আন্দাজ করতে পারছ যে, উত্তর হবে $e_{123}.$ কিন্তু যদি
$e_{12}e_1$ বার করে দিত? তবে এইভাবে এগোও, প্রথমে $e_{12} = e_1e_2$ লিখে নাও৷ তারপর গুণ করো
$$e_{12}e_1 = e_1e_2e_1 = -e_1e_1e_2 = -\bo e_2 = -e_2.$$
মানে কায়দাটা হল এই--প্রথমে সব কিছুকে একটা index-ওয়ালা জিনিস দিয়ে ভেঙে লেখো৷ তারপর পশাপাশি index-দের
স্থানবিনিময় করে করে index-গুলোকে ছোটো থেকে বড় সাজিয়ে নাও৷ যদি কোনো index একাধিকবার এসে
থাকে, সেগুলো এর ফলে পাশাপাশি চলে আসবে৷ সেগুলোকে $e_ie_i$-এর সূত্র দিয়ে কাটাকাটি করে দাও৷
আরেকটা উদাহরণ দেখি৷ ধরো $p=3,$ $q=2$ আর $r=3.$ তাহলে
$e_{136}e_{23567} = ?$ ধাপগুলো সংক্ষেপে লেখার জন্য খালি index-গুলোকেই লিখছি--
$$13623567 = -13263567 =12363567 =-12336567 =12335667 = 125667 = 0.$$
অবশ্য একটু অভ্যাস হয়ে গেলেই এত কষ্ট করতে হবে না৷ যেই দেখা যাবে দু দিকেই $6$ রয়েছে, অমনি বলে দেব যে
উত্তরটা $0$ হবে, কারণ $e_6e_6 = 0.$
খানিকটা চেষ্টা করলেই দেখাতে পারবে যে, এইভাবে গুণ করাটা associative হয়৷
ব্যস্, এই হল $\ga(p,q,r)$-এর সংজ্ঞা!
বুঝতেই পারছ এভাবে ধরে ধরে গুণ করতে গেলে হাত ব্যথা হয়ে যাবে৷ সৌভাগ্যক্রমে বিভিন্ন কম্পিউটার প্রোগ্রাম আছে
এইসব করার জন্য৷ এদের মধ্যে সবচেয়ে ছোটোটার নাম গাঁজা! হ্যাঁ, মজা নয়, একেবারে গাঁজা! ইংরাজীতে GANJA,
যেটা বোধহয় Geometric Algebra iN JAvascript-এর সংক্ষিপ্তরূপ৷ প্রোগ্রামটা স্রেফ $177$ লাইন লম্বা৷ টুক
করে একটা ওয়েবপেজে ঢুকিয়ে দিলেই হল, যেমন ঢোকানো আছে আমাদের এই ওয়েবপেজে, যেটা তুমি এখন পড়ছ৷ প্রোগ্রামটা লিখেছেন
Enki নামের একজন৷ নীচের textfield-টায় কিছু expression ঢুকিয়ে ''$=$'' চিহ্নটা টিপে দিলেই উত্তর
পেয়ে যাবে৷ Expression লেখাটা খুবই সহজ৷ যদি $2e_1+4e_{23}$ আর
$3e_2$ গুণ করতে চাও, তবে লিখতে
হবে (2e1+4e23) * 3e2. একটাই খালি জটিলতা--খালি $e_1$ বোঝাতে লিখতে হবে 1e1.
অর্থাৎ coefficient-টা লিখতে হবেই, সেটা $1$ হলেও বাদ রাখা চলবে না৷
গাঁজা যেকোনো $p,q,r$ নিয়েই কাজ করতে পারে, খালি গোড়ায় সেটা বলে দিতে হয়৷ এখানে আমরা $p=4,q=1,r=0$
নিয়েছি৷
এই multivector-টাকে দ্যাখো-- $2e_{124}+3e_{236}.$ এখানে খালি দুটো $e$ লেগেছে, এবং
দুজনেরই index-এর সংখ্যা $3.$ এরকম multivector-দের বলে pure. এদের index-এর
সংখ্যাকে বলে grade. যে সব pure multivector-দের grade হয় $k,$ তাদের অনেক
সময়ে লোকে $k$-vector বলে৷ যেসব multivector-রা pure নয়, তাদের বলে mixed.
যেমন $\bo+e_1.$
Non-zero $1$-vector-দের outer product-দের বলে
একেকটা blade. সাবধান, এখানে outer product বলেছি,
geometric product বলিনি!
যদি $v$ কোনো multivector হয়, তবে $\grd v _k$ মানে
হল $v$-এর মধ্যে যে অংশটুকু ঠিক $k$-খানা index দিয়ে তৈরী, যেমন
$$\grd{e_1+5e_{12}+4e_{13}-7e_{123}}_2 = 5e_{12}+4e_{13}.$$
যদি $k< 0$ হয়, তবে $\grd v _k = 0$ হবে৷
আমরা দুটো vector-কে যেভাবে গুণ করতে শিখলাম তাকে বলে fundamental product. এটা থেকে আরো চার রকমের
product বানাব আমরা৷
এবার প্রশ্ন হল এত সব করে লাভটা কী হল? লাভ শুনেছি অনেক৷ Physics-এর
spinor, অংকের quaternion আর computer graphics-এর নানারকম জিনিস, সবাইকেই এইসব product
দিয়ে সুন্দরভাবে লিখে ফেলা যায়! আমরা এখানে computer graphics-এর দিকটা শিখব৷ এর জন্য Conformal Geometric Algebra (CGA)
বোঝা দরকার৷ জিনিসটা হল $\ga(4,1,0)$ এবং সেখান থেকে আমাদের পরিচিত ${\mathbb R}^3$-তে
যাতায়াত করার একটা পথ৷ যেহেতু $4+1+0 = 5,$ তাই $\ga(4,1,0)$ হল আসলে ${\mathbb R}^{32}.$ এর
standard basis হল $e_A$ জাতীয় multivector দিয়ে তৈরী, যেখানে $A\subseteq \{1,...,5\}.$
$\ga(4,1,0)$-এর কিছু সদস্যর বিশেষ গুরুত্ব আছে৷ এদের পরিচয় নেওয়া যাক৷
$e_4+e_5$-কে আমরা বলব $e_0.$
$-\frac12e_4+\frac12e_5$-কে আমরা বলব $e_\infty.$
যদি কোনো multivector হয় এইরকম
$$x e_1+ye_2+ze_3 + \frac12(x^2+y^2+z^2)e_\infty+e_0,$$
যেখানে $x,y,z\in{\mathbb R}$ তবে তাকে বলব একটা conformal multivector. লক্ষ
করো যে এদের grade অবশ্যই $1$ হতে বাধ্য৷ এদের set-টাকে নাম দাও $C.$
${\mathbb R}^3$ আর $C$-এর মধ্যে একটা সহজ bijection আছে--
$$c(x,y,z)= x e_1+ye_2+ze_3 + \frac12(x^2+y^2+z^2)e_\infty+e_0.$$
এইটাই হল ${\mathbb R}^3$ আর $\ga(4,1,0)$-এর মধ্যে যোগসূত্র৷ এর ফলে কী লাভ হবে তার একটা ধারণা দিই--
ধরো ${\mathbb R}^3$ -তে কোনো একটা অংক আছে বিভিন্ন point নিয়ে, যেমন $c_1,...,c_4\in{\mathbb R}^3$
দেওয়া আছে, যারা coplanar নয়৷ তাহলে ওদের মধ্যে দিয়ে ঠিক একটাই sphere আঁকা যাবে৷ এবার আরেকটা
$x\in{\mathbb R}^3$ দিয়ে জানতে চাওয়া হচ্ছে এই $x$-টাও ওই sphere-এর গায় আছে কিনা৷ এই প্রশ্নটায়
পাঁচটা point হল ইনপুট, আর আউটপুট হল হ্যাঁ বা না৷ এরকমক্ষেত্রে আমরা প্রথমেই এই point কটাকে
$\ga(4,1,0)$-র মধ্যে এনে ফেলব৷ তারপর ওদেরকে fundamental product দিয়ে খানিকটা চটকালেই উত্তর বেরিয়ে
আসবে৷ অবশ্য, প্রশ্ন উঠতেই পারে যে চটকানোটা ${\mathbb R}^3$-র মধ্যে করলেও তো উত্তর বার করা যেত, খামোখা $\ga(4,1,0)$-তে
যাবার বাড়তি সুবিধাটা কোথায়? উত্তর হল, $\ga(4,1,0)$-এর মধ্যে অনেক অল্প চটকালেই কাজ হবে৷
এই অংকে আউটপুটটা ছিল হ্যাঁ-না টাইপের৷ অনেক অংক থাকে যেখানে উত্তরটা হল একটা point. যেমন ধরো, তিনটে
point দেওয়া আছে $a,b,c\in{\mathbb R}^3,$ যারা এক লাইনে নেই৷ তাহলে ওদের মধ্যে দিয়ে একটা plane
পাবে৷ সেই plane বরাবর একটা আয়না বসাও৷ এবার যদি $x\in{\mathbb R}^3$ হয়, তবে এই আয়নায় $x$-এর
reflection-টা কোথায় পড়বে? এখানেও একইব্যাপার, $a,b,c,x$-কে প্রথমে $\ga(4,1,0)$-র মধ্যে
এনে ফ্যালো৷ তারপর চটকাও৷ তাহলে উত্তর পাবে একটা multivector যেটা $C$-এর মধ্যে থাকবেই৷ এবার সেখান
থেকে আবার ${\mathbb R}^3$-এ ফিরে এসো৷
${\mathbb R}^3$ নিয়ে কাজ করার সময়ে point ছাড়াও নানারকমের জিনিস নিয়ে কাজ
করতে হয়, যেমন sphere বা plane, এইসব৷ এদের জন্য computer-এ
নানারকম data type বানাতে হয়৷ সেসব নিয়ে কাজ করা ঝকমারি৷ এরকম নানা কাজের
জিনিসকে multivector বলে ভাবা যায়, তাই multivector-দের জন্য একটা
data type বানানেই চলে, প্রতিটা জিনিসের জন্য আলাদা করে বানাতে হয় না৷
অনেক কোনো $A\subseteq{\mathbb R}^3$-এর জন্য এমন একটা blade পাই $v$, যাতে $x\in A\wedge c(x)\cdot v = 0$
হয়৷ এরকম ক্ষেত্রে আমরা $v$-কে বলি $A$-র একটাdirect representation. অনেক সময়ে
একে Outer Product Null Space (OPNS)-ও বলে৷ বলাই বাহুল্য যে, যেকোনো একটা blade যদি নিই, তবে তার
একটা OPNS থাকবেই৷ যদি blade-টার মধ্যে একটা factor হয় $e_\infty$, তবে তার
OPNS-কে বলব একটা flat set, নইলে বলব একটা round set.
প্রথমে flat কিছু OPNS দিচ্ছি--
যদি $x\in{\mathbb R}^3$ হয়, তবে $c(x)\wedge e_\infty$-র OPNS হল
একটা flat point. এর মধ্যে ${\mathbb R}^3$-র খালি একটাই বিন্দু আছে, সেটা হল $x.$
যদি $x\neq y\in{\mathbb R}^3$ হয়, তবে $c(x)\wedge c(y)\wedge e_\infty$-র OPNS হল
একটা flat line. এটা হল $x$ আর $y$ দিয়ে যাওয়া
পুরো line-টার direct representation.
যদি $x,y,z\in{\mathbb R}^3$ হয় non-colinear, তবে $c(x)\wedge
c(y)\wedge c(z)\wedge e_\infty$-র OPNS হল
একটা flat plane. এটা হল $x, y$ আর $z$ দিয়ে যাওয়া
পুরো affine plane-টার direct representation.
এবার round কিছু OPNS দেব--
যদি $x\neq y\in{\mathbb R}^3$ হয়, তবে $c(x)\wedge c(y)$-এর OPNS হল
একটা double. এর মধ্যে খালি $x$ আর $y$-ই আছে৷
যদি $x,y,z\in{\mathbb R}^3$ হয় non-colinear, তবে $c(x)\wedge
c(y)\wedge c(z)$-র OPNS হল
$x, y$ আর $z$ দিয়ে যাওয়া
circle-টা৷
যদি $w,x,y,z\in{\mathbb R}^3$ হয় non-coplanar, তবে $c(w)\wedge c(x)\wedge
c(y)\wedge c(z)$-র OPNS হল
$w,x, y$ আর $z$ দিয়ে যাওয়া
sphere-টা৷
আমরা এখানে $c(x,y,z)$ ছাড়াও আরেকটা function ব্যবহার করব--
$$p(x,y,z) = x e_1+y e_2+z e_3.$$
এটা ব্যবহার করে $c(x,y,z)$-কে একটু সহজে লেখা যায়--
$$c(x,y,z) = p(x,y,z)+\frac 12p(x,y,z)^2 e_\infty + e_0.$$
এখানে $p(x,y,z)^2$-টা geometric product দিয়ে করা হয়েছে৷
এবার প্রয়োগগুলো বলি৷
যদি $x,y\in{\mathbb R}^3$ হয়, তবে $-2c(x)\lc c(y)$ হবে ওদের মধ্যে দূরত্বের square.
যদি $p,q\in{\mathbb R}^3$ হয়, তবে ওদের যোগ করে যে সরলরেখাটা পাওয়া যাবে, তার
equation হল $c(x)\wedge (c(p)\wedge c(q)\wedge e_\infty)=0.$
যদি $a,b\in{\mathbb R}^3$ হয়, তবে ওদের ঠিক মাঝখান দিয়ে যে plane-টা যাবে তার
equation হবে $c(x)\bullet (c(a)-c(b)) = 0.$ অর্থাৎ কোনো $x\in{\mathbb R}^3$
এই plane-টায় থাকা মানে $c(x)\bullet (c(a)-c(b)) = 0$ হওয়া৷
যে sphere-টার কেন্দ্র $a\in{\mathbb R}^3$-তে আর radius হল
$r>0,$ তার equation হবে $c(x)\bullet (c(a)-\frac 12r^2 e_\infty)=0.$
যদি $=$-র জায়গায় $>$ হয়, তবে $x\in{\mathbb R}^3$-টা sphere-টার
ভিতরে থাকবে, $< $ হলে বাইরে থাকবে৷
যে plane-এর normal হল $n\in{\mathbb R}^3$ আর origin
থেকে দূরত্ব হল $d,$ তার equation হবে $c(x)\bullet (p(n)+de_\infty)=0.$
যে plane-এর normal হল $n\in{\mathbb R}^3$ আর $p\in{\mathbb R}^3$
দিয়ে যায়, তার equation হবে $c(x)\bullet \big( p(n)+(c(p)\bullet p(n) e_\infty \big)=0.$
যে circle-টার centre হল $a\in{\mathbb R}^3$ এবং radius
হল $r$ এবং normal-টা হল $n\in{\mathbb R}^3,$ তার equation হবে $p(x)\lc (c(a)-\frac 12r^2 e_\infty)\wedge (c(a)\cdot (c(n)e_\infty))=0.$
Translation: ধরো $a\in{\mathbb R}^3.$ আমরা চাই কোনো $p\in{\mathbb R}^3$-কে
$p+a$-তে নিয়ে যেতে৷ তবে $c(p)$ থেকে $c(p+a)$ বার করা যাবে কী
করে? একটা কায়দা অবশ্যই $c(p)$ থেকে $p$ বার করে, তার সাথে $a$
যোগ করে, আবার $c(\cdot)$ লাগানো৷ কিন্তু সরাসরি $c(p)$ থেকে $c(p+a)$ বার করা সম্ভব--
$$c(p+a) = e^{-c(a)e_\infty}c(p) e^{-c(a)e_\infty}.$$