কনটেন্টে যান

Chapter 3.2 — Matrix × Vector: Bending Space (space-কে বাঁকানো)

🎯 এই chapter-এ যা শিখবে

  • চারটা মহাতারকা transformation-কে চেনা ও বানানো: rotation, shear, scaling, projection
  • প্রতিটার আগে-পরে গ্রিডের ছবি — matrix দেখে মনে মনে ছবি আঁকার অভ্যাস
  • Rotation matrix-এর সূত্র \(\begin{bmatrix}\cos\theta & -\sin\theta\\ \sin\theta & \cos\theta\end{bmatrix}\) কোথা থেকে আসে — মুখস্থ নয়, নিজে বানানো
  • Unit square(একক বর্গ) কোথায় যায় দেখে transformation-এর চরিত্র (area, উল্টানো, চ্যাপ্টানো) পড়া
  • কোন transformation তথ্য বাঁচায় আর কোনটা তথ্য গিলে ফেলে (projection!) — পরের অধ্যায়গুলোর বীজ

🖼️ এক ছবিতে মূল idea

এক গ্রিড, চার matrix: rotation, shear, scaling, projection

একই ধূসর গ্রিডের ওপর চারটা ভিন্ন matrix চালানো হয়েছে। ঘোরানো, হেলানো, টানা-চাপা, আর চ্যাপ্টা করে ফেলা — একটা \(2\times2\) matrix-এর মাত্র ৪টা সংখ্যাই ঠিক করে দেয় space-এর ভাগ্য।

১. কি? (What)

আগের chapter-এ শিখেছ: matrix মানে space-এর transformation, আর তার column-গুলো হলো basis vector-দের গন্তব্য। এই chapter-এ আমরা সেই ধারণাটাকে হাতে-কলমে নামাব — সবচেয়ে বিখ্যাত transformation-গুলোর matrix নিজে বানাব আর প্রতিটার ছবি দেখব।

দৈনন্দিন analogy: ভাবো plane-টা একটা বিশাল রাবারের চাদর, তাতে সমান দূরত্বে গ্রিডলাইন আঁকা। একটা \(2\times2\) matrix হলো চাদরটাকে ধরার চারটা নির্দিষ্ট নিয়ম। তবে যেমন-খুশি টানাটানি নয় — linear transformation-এর ভদ্রতার তিনটা শর্ত আছে (Chapter 3.6-এ প্রমাণসহ):

  1. Origin(মূলবিন্দু) জায়গায় থাকবে — চাদরের মাঝের পিনটা খোলা যাবে না।
  2. সোজা লাইন সোজাই থাকবে — কোথাও বাঁকবে না।
  3. সমান্তরাল ও সমান-দূরত্বের গ্রিডলাইন সমান্তরাল ও সমান-দূরত্বেই থাকবে।

এই তিন শর্ত মেনে যা যা করা সম্ভব — ঘোরানো, হেলানো, টানা, চাপা, উল্টানো, চ্যাপ্টানো, আর এদের যেকোনো মিশ্রণ — তার প্রত্যেকটা একটা matrix, আর প্রতিটা matrix এদেরই কেউ। এই chapter-এ আমরা চারজন মহাতারকার সাথে হাত মেলাব।

পদ্ধতিটা সবসময় এক (আগের chapter-এর মূলমন্ত্র):

Transformation বানাতে চাও? শুধু ঠিক করো \(\mathbf{e}_1\) কোথায় যাবে আর \(\mathbf{e}_2\) কোথায় যাবে। তারপর গন্তব্য দুটোকে column বানিয়ে পাশাপাশি বসাও। শেষ!

২. দেখতে কেমন?

২.১ Rotation (ঘূর্ণন)

\(\theta\) কোণে ঘড়ির কাঁটার বিপরীতে ঘোরাতে চাই। \(\mathbf{e}_1 = (1,0)\) ঘুরে যাবে \((\cos\theta, \sin\theta)\)-তে (unit circle-এর সংজ্ঞা থেকেই!), আর \(\mathbf{e}_2 = (0,1)\) — যে আগে থেকেই \(90°\)-তে ছিল — যাবে \((\cos(90°+\theta), \sin(90°+\theta)) = (-\sin\theta, \cos\theta)\)-তে। Column-এ বসাও:

\[ R_\theta = \begin{bmatrix}\cos\theta & -\sin\theta\\ \sin\theta & \cos\theta\end{bmatrix} \]

সূত্রটা এখন আর মুখস্থের জিনিস না — দরকার হলেই দুই তীরের গন্তব্য ভেবে নিজে বানিয়ে নেবে

rotation-এর আগে ও পরে

\(45°\) rotation: পুরো plane একটা লাটিমের মতো origin-এর চারদিকে ঘুরেছে। খেয়াল করো — গ্রিডের ঘরগুলো এখনো নিখুঁত বর্গ, মাপও এক; শুধু দিক বদলেছে। কোনো তথ্য হারায়নি।

২.২ Shear (হেলানো/কাঁচি)

\(S = \begin{bmatrix}1 & 1\\ 0 & 1\end{bmatrix}\): এখানে \(\mathbf{e}_1 \to (1,0)\) — নট নড়নচড়ন, কিন্তু \(\mathbf{e}_2 \to (1,1)\) — উপরের তীরটা ডানে হেলে গেল। ফল: তাসের deck-এর মতো, প্রতিটা তলা তার উচ্চতার সমানুপাতে ডানে সরে।

shear-এর আগে ও পরে

Shear: বর্গ ঘরগুলো হেলে parallelogram(সামান্তরিক) হয়ে গেছে, কিন্তু — মজার ব্যাপার — প্রতিটার area একই আছে (ভিত্তি × উচ্চতা কোনোটাই বদলায়নি)। ইতালির হেলানো টাওয়ারের গণিত।

২.৩ Scaling (টানা-চাপা)

\(D = \begin{bmatrix}2 & 0\\ 0 & 0.5\end{bmatrix}\): \(\mathbf{e}_1 \to (2,0)\)\(x\)-দিক দ্বিগুণ, \(\mathbf{e}_2 \to (0, 0.5)\)\(y\)-দিক অর্ধেক। Diagonal(কর্ণ) ছাড়া সব entry শূন্য — এমন matrix-কে diagonal matrix বলে (Chapter 3.5-এ পুরো পরিবার)।

scaling-এর আগে ও পরে

Scaling: গ্রিড এখনো আয়তাকার, অক্ষগুলোও নিজ জায়গায় — শুধু \(x\)-এ চওড়া, \(y\)-তে চ্যাপ্টা। ছবির aspect ratio নষ্ট হওয়ার গণিত এটাই।

২.৪ Projection (ছায়া ফেলা) — বিপজ্জনক সদস্য

\(P = \begin{bmatrix}1 & 0\\ 0 & 0\end{bmatrix}\): \(\mathbf{e}_1 \to (1,0)\) ঠিক আছে, কিন্তু \(\mathbf{e}_2 \to (0,0)\)origin-এ গিলে ফেলা হলো! প্রতিটা বিন্দু \((x, y)\) নেমে আসে \((x, 0)\)-তে — যেন দুপুরের খাড়া রোদে সবার ছায়া পড়েছে \(x\)-axis-এর ওপর।

projection: plane চুপসে একটা লাইনে

Projection: গোটা 2D plane চ্যাপ্টা হয়ে একটামাত্র লাইনে নেমে এসেছে। লাল বিন্দুগুলোর \(y\)-তথ্য চিরতরে হারিয়ে গেছে — dashed লাইনগুলো সেই পতনের পথ। এই "হারানো"টাই Chapter 3.4-এর singular matrix-এর গল্পের শুরু।

৩. কোথায় ইউজ হয়?

  • ভিডিও গেম ও অ্যানিমেশন: চরিত্র ঘোরে = rotation matrix; ক্যামেরা zoom = scaling; 3D দৃশ্য থেকে তোমার 2D স্ক্রিন = projection। প্রতি সেকেন্ডে কোটি কোটি বার।
  • ফটো এডিটিং: Instagram-এ ছবি straighten করা মানে rotation matrix; italic ফন্ট আসলে অক্ষরের ওপর shear matrix!
  • Data augmentation (ML): ছবি চেনার মডেলকে শক্তপোক্ত করতে training ছবিগুলো একটু ঘুরিয়ে, হেলিয়ে, টেনে দেওয়া হয় — সবই এই chapter-এর matrix-রা।
  • Dimensionality reduction: হাজার-মাত্রার data-কে দুই-তিন মাত্রায় নামিয়ে দেখা (PCA, Part VI) — গোড়ায় ওই projection-ই, শুধু চতুর কোণে ফেলা ছায়া।
  • Robotics: রোবটের হাত কোথায় পৌঁছাবে — জয়েন্টে জয়েন্টে rotation matrix-দের হিসাব।

৪. Properties

৪.১ Unit square-এর ভাগ্য দেখে transformation পড়া

\((0,0), (1,0), (1,1), (0,1)\) কোণাওয়ালা unit square-টা transformation-এর "পরীক্ষার কাঠি"। \(A\) প্রয়োগের পর সে হয়ে যায় \(A\mathbf{e}_1\)\(A\mathbf{e}_2\) বাহুওয়ালা parallelogram। সেই parallelogram-ই বলে দেয়:

Unit square-এর পরিণতি মানে
নিখুঁত বর্গ, একই মাপ (rotation) দৈর্ঘ্য-কোণ সব অক্ষত — rigid transformation
হেলানো, area এক (shear) আকৃতি বদলায়, area বাঁচে
আয়ত, ভিন্ন মাপ (scaling) অক্ষ বরাবর টানা/চাপা
চ্যাপ্টা রেখাংশ, area \(0\) (projection) এক মাত্রা ধ্বংস — অপূরণীয়

Area-র এই scale factor-টার একটা বিখ্যাত নাম আছে — determinant — Part VI-এ সে-ই হবে নায়ক। আজ শুধু বীজটা পোঁতা থাকল।

৪.২ চার তারকার properties (মিনি-হিসাবসহ)

Rotation: দৈর্ঘ্য বাঁচায়। যাচাই: \(\|R_\theta\mathbf{e}_1\| = \sqrt{\cos^2\theta+\sin^2\theta} = 1\) ✓। কোণও বাঁচায় — দুই column-এর dot product \(= -\cos\theta\sin\theta + \sin\theta\cos\theta = 0\), অর্থাৎ ঘোরার পরেও তারা লম্ব।

Shear (\(x\)-দিকে): \((x,y) \mapsto (x + ky,\; y)\) — উচ্চতা \(y\) অটুট, সরণ উচ্চতার সমানুপাতী। \(y\)-অক্ষের সমান্তরাল লাইনগুলো হেলে, \(x\)-অক্ষের সমান্তরালগুলো শুধু sliding করে।

Scaling: \((x,y)\mapsto(ax, by)\)\(a=b\) হলে সব দিক সমান (uniform); \(a\neq b\) হলে ছবি "মোটা/লম্বা" হয়; কোনোটা ঋণাত্মক হলে সেই অক্ষে flip

Projection (\(x\)-axis-এ): \(P^2 = P\) — দুইবার ছায়া ফেললে নতুন কিছু ঘটে না (ছায়ার ছায়া = ছায়াই)! যাচাই: \(\begin{bmatrix}1&0\\0&0\end{bmatrix}\begin{bmatrix}1&0\\0&0\end{bmatrix} = \begin{bmatrix}1&0\\0&0\end{bmatrix}\) ✓। এই idempotent(অভেদঘাতী) ধর্মই projection-এর সংজ্ঞায়িত চরিত্র (Part V-এ কাজে লাগবে)।

৪.৩ Column picture: recipe বদলায় না, উপকরণ বদলায়

Part I-তে শিখেছিলে \(\mathbf{v} = x\,\mathbf{e}_1 + y\,\mathbf{e}_2\) — vector মানে একটা recipe। Transformation-এর পরে recipe-টা একই থাকে, শুধু উপকরণ বদলে যায়:

\[A\mathbf{v} = x\,(A\mathbf{e}_1) + y\,(A\mathbf{e}_2) = x\,(\text{col}_1) + y\,(\text{col}_2)\]

column picture: একই recipe, নতুন উপকরণ

বাঁয়ে: \(\mathbf{v} = (2,1)\) মানে "২ ধাপ \(\mathbf{e}_1\) + ১ ধাপ \(\mathbf{e}_2\)"। ডানে: transform-এর পর একই "২ ধাপ + ১ ধাপ" recipe, কিন্তু এবার নতুন তীর (column) ধরে — ফল \(A\mathbf{v} = (5, 2.5)\)। এটাই linearity-র হৃদয়।

৫. Intuition — কেন সত্য?

কেন মাত্র দুটো তীরের গন্তব্যেই গোটা plane-এর ভাগ্য লেখা? কারণ গ্রিডলাইন সমান্তরাল ও সমান-দূরত্বে থাকে। বিন্দু \((2, 1)\) মানে "\(\mathbf{e}_1\) ধরে দুই ঘর, \(\mathbf{e}_2\) ধরে এক ঘর।" Transformation-এর পরও তাকে ঠিক সেই একই ঘর-গোনা পথে পাওয়া যায় — শুধু ঘরগুলো এখন নতুন আকৃতির। রাবার চাদরের গ্রিডে যে ঠিকানায় ছিলে, টানাটানির পরেও (চাদরের নিজস্ব ঠিকানায়) সেখানেই আছ।

Rotation-এ কিছুই হারায় না কেন? ঘোরানো একটা "চেয়ার বদল" — সবাই আছে, শুধু মুখ অন্যদিকে। উল্টো ঘুরিয়ে দিলেই সব আগের মতো। Scaling-ও (\(a, b \neq 0\) হলে) ফেরানো যায় — \(1/a, 1/b\) দিয়ে।

Projection-এ কি হারায়? \((3, 5)\) আর \((3, -100)\) — দুজনেই নামে \((3, 0)\)-তে। ছায়া দেখে বলতে পারবে না মানুষটা কত লম্বা ছিল। আলাদা input → একই output মানেই ফেরার পথ বন্ধ। লক্ষ করো projection matrix-এর column দুটো \((1,0)\) আর \((0,0)\) — দ্বিতীয়টা প্রথমটার \(0\) গুণ, অর্থাৎ column-রা একই লাইনে বন্দি। Column-রা যেখানে পৌঁছায়, output-ও সেখানেই বন্দি — তাই গোটা plane চুপসে লাইনে। এই সূত্রেই Chapter 3.4-এ বলব কোন matrix-এর "undo" আছে, কার নেই।

Negative determinant-এর একটা উঁকি: \(\begin{bmatrix}-1&0\\0&1\end{bmatrix}\) (reflection) unit square-কে উল্টে দেয় — ঘড়ির কাঁটার দিকে গোনা কোণাগুলো উল্টো দিকে ঘোরে, যেন কাগজটা উল্টে ফেলা হয়েছে। Space-এর এই "হাত বদল" (orientation বদল) Part VI-এ determinant-এর ঋণাত্মক চিহ্ন হয়ে ফিরবে।

৬. Code-এ কেমনে লিখে

import numpy as np
import matplotlib.pyplot as plt

def make_transformers(theta=np.pi/4, k=1.0, a=2.0, b=0.5):
    """চার মহাতারকার matrix বানাও"""
    R = np.array([[np.cos(theta), -np.sin(theta)],
                  [np.sin(theta),  np.cos(theta)]])   # rotation
    S = np.array([[1.0, k], [0.0, 1.0]])              # shear
    D = np.array([[a, 0.0], [0.0, b]])                # scaling
    P = np.array([[1.0, 0.0], [0.0, 0.0]])            # projection
    return {'rotation': R, 'shear': S, 'scaling': D, 'projection': P}

def grid_lines(n=4, pts=50):
    """গ্রিডলাইনের বিন্দুগুলো একটা 2xN matrix-এ"""
    t = np.linspace(-n, n, pts)
    lines = []
    for k in range(-n, n + 1):
        lines.append(np.vstack([np.full(pts, k), t]))   # খাড়া লাইন
        lines.append(np.vstack([t, np.full(pts, k)]))   # আনুভূমিক লাইন
    return lines

mats = make_transformers()
fig, axes = plt.subplots(1, 4, figsize=(18, 4.5))
for ax, (name, A) in zip(axes, mats.items()):
    for L in grid_lines():
        ax.plot(*L, color='0.8', lw=0.8)   # আগের গ্রিড (ধূসর)
        ax.plot(*(A @ L), color='#1f77b4', lw=1.0)  # পরের গ্রিড (নীল)
    sq = np.array([[0, 1, 1, 0], [0, 0, 1, 1]])
    ax.fill(*(A @ sq), color='#d62728', alpha=0.4)   # unit square-এর পরিণতি
    ax.set_title(name); ax.set_xlim(-4, 4); ax.set_ylim(-4, 4)
    ax.set_aspect('equal')
plt.show()

# unit square-এর area কত হলো? (determinant-এর উঁকি)
for name, A in mats.items():
    print(f"{name:>11}: |det| = {abs(np.linalg.det(A)):.2f}")

Output ব্যাখ্যা: চারটা subplot-এ চার transformation-এর আগে (ধূসর)/পরে (নীল) গ্রিড আর লাল unit square। শেষের লুপ ছাপে — rotation: 1.00 (area অটুট), shear: 1.00 (হেলেও area এক!), scaling: 1.00 (\(2 \times 0.5\) — কাকতালীয়ভাবে ১), projection: 0.00 (চ্যাপ্টা — এই শূন্যটাই পরের সব গল্পের সূত্র)। লক্ষ করো A @ L — একটা লাইনের ৫০টা বিন্দু এক ঝটকায় transform; লুপ লাগে না, এটাই vectorization।

৭. Worked Examples

Example 1 — \(30°\) rotation নিজে বানাও ও প্রয়োগ করো।

ধাপ ১: \(\cos 30° = \tfrac{\sqrt3}{2} \approx 0.866\), \(\sin 30° = \tfrac12 = 0.5\)ধাপ ২: \(R_{30°} = \begin{bmatrix}0.866 & -0.5\\ 0.5 & 0.866\end{bmatrix}\)ধাপ ৩: \((2, 0)\)-কে ঘোরাই: \(R\begin{bmatrix}2\\0\end{bmatrix} = \begin{bmatrix}1.732\\1\end{bmatrix}\)যাচাই: দৈর্ঘ্য \(\sqrt{1.732^2 + 1^2} = \sqrt{3+1} = 2\) ✓ (ঘোরায় দৈর্ঘ্য বদলায় না), কোণ \(\tan^{-1}(1/1.732) = 30°\) ✓।

Example 2 — অচেনা matrix-এর মুখ দেখে চরিত্র বলা। \(A = \begin{bmatrix}0 & 2\\ -1 & 0\end{bmatrix}\) কি করে?

ধাপ ১: Column পড়ি: \(\mathbf{e}_1 \to (0, -1)\) — ডানের তীর গেল নিচে; \(\mathbf{e}_2 \to (2, 0)\) — উপরের তীর গেল ডানে, তা-ও দ্বিগুণ লম্বা হয়ে। ধাপ ২: "ডান→নিচ, উপর→ডান" মানে ঘড়ির কাঁটার দিকে \(90°\) ঘোরা; সাথে \(\mathbf{e}_2\)-র দিকটা ২ গুণ টানা। ধাপ ৩: সিদ্ধান্ত — এটা rotation (\(-90°\)) + scaling-এর মিশেল। মিশ্র transformation-ই জগতে বেশি; খাঁটি rotation/shear হলো বর্ণমালা, আর সাধারণ matrix হলো শব্দ।

Example 3 — লাইনে projection, খাড়া রোদে নয়। \(45°\) কোণের লাইন \(y = x\)-এর ওপর লম্ব ছায়া ফেলার matrix বানাও।

ধাপ ১: \(\mathbf{e}_1 = (1, 0)\)-এর ছায়া কোথায়? Part I-এর projection সূত্র: লাইনের unit vector \(\mathbf{u} = \tfrac{1}{\sqrt2}(1,1)\); ছায়া \(= (\mathbf{e}_1\cdot\mathbf{u})\,\mathbf{u} = \tfrac{1}{\sqrt2}\cdot\tfrac{1}{\sqrt2}(1,1) = (\tfrac12, \tfrac12)\)ধাপ ২: একই হিসাবে \(\mathbf{e}_2\)-র ছায়াও \((\tfrac12, \tfrac12)\)ধাপ ৩: Column-এ বসাই: \(P = \begin{bmatrix}0.5 & 0.5\\ 0.5 & 0.5\end{bmatrix}\)যাচাই: \(P\begin{bmatrix}1\\1\end{bmatrix} = \begin{bmatrix}1\\1\end{bmatrix}\) (লাইনের বাসিন্দা নড়ে না ✓), \(P\begin{bmatrix}1\\-1\end{bmatrix} = \begin{bmatrix}0\\0\end{bmatrix}\) (লাইনের লম্ব দিক পুরো গিলে ফেলা ✓), আর \(P^2 = P\) ✓।

৮. Problems ও Solutions

Problem 1. না এঁকে, শুধু column পড়ে প্রতিটা matrix-এর কাজ বলো; তারপর প্রতিটার জন্য unit square-এর পরিণতি (আকৃতি ও area) লেখো: (a) \(\begin{bmatrix}0 & -1\\ -1 & 0\end{bmatrix}\) (b) \(\begin{bmatrix}1 & 0\\ 0.5 & 1\end{bmatrix}\) (c) \(\begin{bmatrix}0.5 & 0\\ 0 & 3\end{bmatrix}\)

Solution

(a) \(\mathbf{e}_1 \to (0,-1)\), \(\mathbf{e}_2 \to (-1,0)\) — দুই অক্ষ অদল-বদল এবং দুটোই ঋণাত্মক দিকে: এটা \(y = -x\) লাইনের সাপেক্ষে reflection। Unit square: বর্গই থাকে (বাহু \(1\), লম্ব), শুধু উল্টে যায়; area \(= 1\)

(b) \(\mathbf{e}_1 \to (1, 0.5)\) — ডানের তীর উপরের দিকে হেলল, \(\mathbf{e}_2 \to (0,1)\) অনড়। এটা উল্লম্ব shear (\(y\)-দিকে)। Unit square: parallelogram, ভূমি \(\mathbf{e}_2\)-বাহু ঠিক, area \(= 1\) (shear area বাঁচায়)।

(c) Diagonal matrix: \(x\)-দিক অর্ধেক, \(y\)-দিক ৩ গুণ — non-uniform scaling। Unit square: \(0.5 \times 3\) আয়ত, area \(= 1.5\)

Problem 2. (a) \(60°\) rotation matrix \(R_{60°}\) লেখো (মান বসিয়ে)। (b) দিয়ে \((1, 1)\)-কে ঘোরাও। (c) ফলের দৈর্ঘ্য \(\sqrt2\)-ই আছে কিনা যাচাই করো।

Solution

(a) \(\cos 60° = 0.5\), \(\sin 60° = \tfrac{\sqrt3}{2} \approx 0.866\):

\[R_{60°} = \begin{bmatrix}0.5 & -0.866\\ 0.866 & 0.5\end{bmatrix}\]

(b)

\[R_{60°}\begin{bmatrix}1\\1\end{bmatrix} = \begin{bmatrix}0.5 - 0.866\\ 0.866 + 0.5\end{bmatrix} = \begin{bmatrix}-0.366\\ 1.366\end{bmatrix}\]

(c) দৈর্ঘ্য\(^2 = (-0.366)^2 + (1.366)^2 = 0.134 + 1.866 = 2.0\), তাই দৈর্ঘ্য \(= \sqrt2\) ✓। (\((1,1)\) ছিল \(45°\)-তে; ঘুরে হলো \(105°\)-তে — \(\tan 105° \approx -3.73 = 1.366/(-0.366)\) ✓)

Problem 3. Shear matrix \(S_k = \begin{bmatrix}1 & k\\ 0 & 1\end{bmatrix}\)-এর জন্য দেখাও: (a) প্রতিটা বিন্দুর উচ্চতা (\(y\)) অপরিবর্তিত থাকে; (b) \(y = c\) (আনুভূমিক) লাইনের প্রতিটা বিন্দু ঠিক \(kc\) পরিমাণ ডানে সরে; (c) unit square-এর area \(1\)-ই থাকে।

Solution

(a)

\[S_k\begin{bmatrix}x\\y\end{bmatrix} = \begin{bmatrix}x + ky\\ y\end{bmatrix}\]

— দ্বিতীয় entry \(y\)-ই আছে। ✓

(b) \(y = c\) লাইনের বিন্দু \((x, c)\) যায় \((x + kc,\; c)\)-তে — প্রতিটাই একই পরিমাণ \(kc\) ডানে সরে। উচ্চতা যত বেশি, সরণ তত বেশি — তাসের deck-এর ছবি।

(c) Unit square-এর পরিণত parallelogram-এর ভূমি \(= S_k\mathbf{e}_1 = (1,0)\), দৈর্ঘ্য \(1\); উচ্চতা \(= S_k\mathbf{e}_2 = (k, 1)\)-এর উল্লম্ব উপাংশ \(= 1\)। Area \(=\) ভূমি \(\times\) উচ্চতা \(= 1 \times 1 = 1\) ✓। (হেলে গেছে, কিন্তু চুপসে যায়নি!)

Problem 4. \(y\)-axis-এর ওপর লম্ব projection-এর matrix \(Q\) লেখো। দেখাও (a) \(Q^2 = Q\), (b) এমন দুটো ভিন্ন vector দাও যাদের ছায়া এক, (c) \(Q\)-র column দুটো কোন লাইনে বন্দি?

Solution

(a) \((x, y) \mapsto (0, y)\), তাই \(\mathbf{e}_1 \to (0,0)\), \(\mathbf{e}_2 \to (0,1)\):

\[Q = \begin{bmatrix}0 & 0\\ 0 & 1\end{bmatrix}, \qquad Q^2 = \begin{bmatrix}0 & 0\\ 0 & 1\end{bmatrix}\begin{bmatrix}0 & 0\\ 0 & 1\end{bmatrix} = \begin{bmatrix}0 & 0\\ 0 & 1\end{bmatrix} = Q ✓\]

(b) \((5, 2)\) আর \((-3, 2)\) — দুজনেরই ছায়া \((0, 2)\)। (\(x\) যা-ই হোক, মুছে যায়।)

(c) Column দুটো \((0,0)\)\((0,1)\) — দুটোই \(y\)-axis-এ। Output সবসময় column-দের combination, তাই সব output-ও \(y\)-axis-এ বন্দি — plane চুপসে লাইন।

Problem 5. এমন একটা matrix \(F\) বানাও যেটা প্রথমে \(x\)-axis-এ reflect করে (\(y\)-এর চিহ্ন উল্টায়), যার ফলে ছবি উল্টে যায়। তারপর ব্যাখ্যা করো: \(F\)-এর unit square-টা কি অর্থে "উল্টো" — area তো \(1\)-ই!

Solution

\((x,y)\mapsto(x,-y)\): \(\mathbf{e}_1 \to (1,0)\), \(\mathbf{e}_2 \to (0,-1)\):

\[F = \begin{bmatrix}1 & 0\\ 0 & -1\end{bmatrix}\]

Unit square-এর নতুন কোণা: \((0,0), (1,0), (1,-1), (0,-1)\) — মাপে হুবহু আগের মতোই (\(1\times1\), area \(1\))। কিন্তু আগের square-এ \(\mathbf{e}_1\) থেকে \(\mathbf{e}_2\)-তে যেতে ঘড়ির কাঁটার বিপরীতে যেতে হতো; এখন \(F\mathbf{e}_1\) থেকে \(F\mathbf{e}_2\)-তে যেতে হয় ঘড়ির কাঁটার দিকে। কাগজটা যেন উল্টে ফেলা হয়েছে — একে বলে orientation(অভিমুখ) উল্টে যাওয়া। Part VI-এ দেখবে: এই উল্টানোই det-এর negative চিহ্ন (\(\det F = -1\))।

Problem 6. ঘড়ির কাঁটার বিপরীতে \(90°\) ঘোরানোর matrix \(R\) আর তারপর আরেকবার \(R\) — মোট \(180°\)। (a) \(R\) লেখো। (b) \(R(R\mathbf{v}))\) হিসাব করে দেখাও ফলটা \(-\mathbf{v}\), \(\mathbf{v} = (a, b)\) ধরে। (c) এ থেকে কি মনে হয় — "পরপর দুই transformation"-কে এক matrix-এ ধরা যায়?

Solution

(a) \(\mathbf{e}_1\to(0,1)\), \(\mathbf{e}_2\to(-1,0)\): \(R = \begin{bmatrix}0 & -1\\ 1 & 0\end{bmatrix}\)

(b)

\[R\mathbf{v} = \begin{bmatrix}-b\\ a\end{bmatrix}, \qquad R(R\mathbf{v}) = R\begin{bmatrix}-b\\a\end{bmatrix} = \begin{bmatrix}-a\\-b\end{bmatrix} = -\mathbf{v} ✓\]

(\(180°\) ঘোরা মানেই সব vector উল্টে যাওয়া — আগের chapter-এর Problem 4-এর \(-I\)।)

(c) হ্যাঁ! "দুইবার \(R\)" এর মোট প্রভাব একটাই transformation (\(180°\) rotation), যার নিজের একটা matrix আছে (\(-I\))। "পরপর দুটো matrix চালানো = একটা নতুন matrix" — এই নতুন matrix-টা কিভাবে হিসাব করে, সেটাই পরের chapter-এর matrix multiplication।

Problem 7 (একটু চ্যালেঞ্জ)। \(A = \begin{bmatrix}1 & 2\\ 2 & 4\end{bmatrix}\)। (a) দেখাও \(A\)-র দুই column একই লাইনে। (b) পুরো plane-এর ছবি (সব সম্ভব \(A\mathbf{v}\)) কি? (c) \(A\mathbf{v} = \begin{bmatrix}1\\1\end{bmatrix}\)-এর কোনো সমাধান আছে? জ্যামিতিক যুক্তি দাও।

Solution

(a) \(\text{col}_2 = \begin{bmatrix}2\\4\end{bmatrix} = 2\begin{bmatrix}1\\2\end{bmatrix} = 2\,\text{col}_1\) — দুটোই \(y = 2x\) লাইনে।

(b) \(A\mathbf{v} = v_1\,\text{col}_1 + v_2\,\text{col}_2 = (v_1 + 2v_2)\,\text{col}_1\) — যত recipe-ই দাও, ফল সবসময় \(\text{col}_1\)-এর গুণিতক। পুরো plane চুপসে \(y = 2x\) লাইনে নামে (projection-এর মতোই এক মাত্রা ধ্বংস, যদিও এ ছায়া লম্ব করে ফেলা নয়)।

(c) নেই। \((1,1)\) বিন্দুটা \(y = 2x\) লাইনের ওপর নেই (\(2\cdot1 \ne 1\)), কিন্তু \(A\)-র সব output ওই লাইনেই বন্দি। যে জিনিস output-জগতেই নেই, তার input খোঁজা বৃথা। — Part II-এর "সমাধানহীন system"-এর জ্যামিতিক চেহারা এটাই।

৯. Common ভুল

❌ ভুল ধারণা ✅ ঠিক ধারণা
Rotation matrix-এ \(-\sin\theta\) কোথায় বসে ভুলে যাওয়া মুখস্থ কোরো না — \(\mathbf{e}_1 \to (\cos\theta, \sin\theta)\), \(\mathbf{e}_2 \to (-\sin\theta, \cos\theta)\) ভেবে column বানিয়ে নাও
"Shear করলে area বেড়ে যায়" Shear-এ area অটুট: ভূমি-উচ্চতা কোনোটাই বদলায় না — শুধু হেলে
"Projection-ও তো একটা transformation, undo করা যাবে" যায় না: ভিন্ন input একই output-এ নামে, হারানো coordinate ফেরে না
Transformation-এ origin-ও সরে কখনো না — \(A\mathbf{0} = \mathbf{0}\); origin হলো পিন-করা বিন্দু
"Matrix মানেই খাঁটি rotation বা খাঁটি shear-এর একটা" অধিকাংশ matrix মিশ্র — rotation+scaling+shear একসাথে; খাঁটিগুলো বর্ণমালা মাত্র

১০. এক নজরে

Transformation Matrix Column-গল্প Area factor
Rotation (\(\theta\)) \(\begin{bmatrix}\cos\theta & -\sin\theta\\ \sin\theta & \cos\theta\end{bmatrix}\) দুই তীর একসাথে \(\theta\) ঘোরে \(1\)
Shear \(\begin{bmatrix}1 & k\\ 0 & 1\end{bmatrix}\) \(\mathbf{e}_2\) হেলে \((k,1)\)-এ \(1\)
Scaling \(\begin{bmatrix}a & 0\\ 0 & b\end{bmatrix}\) তীরেরা নিজ দিকে টানা/চাপা \(\vert ab\vert\)
Projection (\(x\)-axis) \(\begin{bmatrix}1 & 0\\ 0 & 0\end{bmatrix}\) \(\mathbf{e}_2\) নিহত (\(\to \mathbf{0}\)) \(0\) ⚠️
Reflection (\(y=x\)) \(\begin{bmatrix}0 & 1\\ 1 & 0\end{bmatrix}\) তীরেরা জায়গা বদল \(1\) (উল্টানো)

পরের chapter-এর সেতু: Problem 6-এ দেখলে — পরপর দুটো transformation চালালে মোট প্রভাবটাও একটাই transformation, মানে তারও একটা matrix আছে। সেই "মোট matrix" বের করার নিয়মটাই matrix multiplication — আর সেই কুখ্যাত row-column নিয়মটা কেন অমন অদ্ভুত, পরের chapter-এ composition দিয়ে নিজের হাতে derive করবে। অদ্ভুত লাগা চিরতরে সেরে যাবে।

📓 Notebook Project

notebooks/part-03/ch02-project.ipynb2D Transformation Studio: একটা ছবির ওপর rotate/shear/scale — সব এই chapter-এর matrix দিয়ে, scratch-এ (pixel-চালাচালি নিজ হাতে!), তারপর চার transformation-এর তুলনামূলক গ্যালারি।