#set document(title: "3.1 The Image of the Unit Square", author: "XYZ Homework") #set page(width: 8.5in, height: auto, margin: 1in) #import "@preview/cetz:0.5.2" #set text(font: ("STIX Two Text", "Libertinus Serif", "New Computer Modern"), size: 10.5pt, lang: "en") #show math.equation: set text(font: ("STIX Two Math", "New Computer Modern Math")) #set par(justify: true, leading: 0.62em, spacing: 0.9em) #set enum(spacing: 1.1em) // room between list items so tall inline fractions don't collide #set list(spacing: 1.1em) #set table(stroke: 0.5pt + rgb("#c7ccd3")) #let BLUE = rgb("#183B6F") // brand navy — section bars + example/solution labels (white on navy 11.09:1) #let ORANGE = rgb("#A94509") // brand primary-700 — AA-safe deep orange for TEXT (5.93:1 on white; raw brand #F37021 is 2.94:1 and must never carry text) #let RED = rgb("#DC2626") // brand error-600 #let GREEN = rgb("#059669") // brand success-600 (decoration only; small green text uses green-text #007942) #show heading.where(level: 1): it => block(width: 100%, above: 0pt, below: 16pt, fill: gradient.linear(BLUE, rgb("#2C5AA0")), inset: (x: 14pt, y: 12pt), radius: 3pt, text(fill: white, weight: "bold", size: 19pt, it.body)) #show heading.where(level: 2): it => block(width: 100%, above: 18pt, below: 10pt, fill: BLUE, inset: (x: 10pt, y: 6pt), radius: 2pt, text(fill: white, weight: "bold", size: 12pt, it.body)) #show heading.where(level: 3): it => text(fill: ORANGE, weight: "bold", size: 12.5pt, it.body) #show heading.where(level: 4): it => text(fill: BLUE, weight: "bold", size: 10.5pt, it.body) #let examplebox(label, title, body) = block(width: 100%, breakable: true, fill: rgb("#EFF1F5"), stroke: 0.5pt + rgb("#CFDDF0"), radius: 4pt, inset: 10pt, above: 12pt, below: 12pt)[ #block(below: 6pt)[#box(fill: BLUE, inset: (x: 6pt, y: 2pt), radius: 2pt, text(fill: white, weight: "bold", size: 8.5pt, label)) #h(0.4em) #strong[#title]] #body] // rail = decorative left rule (raw brand token); labelcolor = AA-safe label text shade #let notebox(label, rail, labelcolor, tint, body) = block(width: 100%, breakable: true, fill: tint, stroke: (left: 3pt + rail), inset: (left: 10pt, rest: 8pt), radius: (right: 4pt), above: 11pt, below: 11pt)[ #text(fill: labelcolor, weight: "bold", size: 7.5pt, tracking: 0.5pt)[#upper(label)] #linebreak() #body] #let solutionbox(body) = block(above: 4pt, below: 8pt)[ #text(fill: BLUE, weight: "bold", size: 8.5pt)[Solution] #linebreak() #body] #let figph(msg) = block(width: 100%, height: 60pt, fill: rgb("#f6f7f9"), stroke: (paint: rgb("#c7ccd3"), dash: "dashed"), radius: 4pt, inset: 10pt)[ #align(center + horizon, text(fill: rgb("#889"), style: "italic", size: 9pt, msg))] // Standardize inlined figure sizes: measure the natural CeTZ canvas, then scale to a // consistent envelope (aspect-aware; see build_typst.py FIG_* constants). Unlike the // print preamble, dimensions are FLOORED: in an editor a user can trim a figure to a // degenerate 1-D shape (a bare line), and w/h or tw/w would then divide by zero. #let _STD_W = 3.5 #let _WIDE_W = 5.6 #let _MAX_H = 3.4 #let _ASPECT_WIDE = 2.2 #let _UPSCALE_MAX = 1.15 #let stdfig(body) = context { let m = measure(body) let w = calc.max(m.width / 1in, 0.01) let h = calc.max(m.height / 1in, 0.01) let tw = if w / h > _ASPECT_WIDE { _WIDE_W } else { _STD_W } let s = calc.min(tw / w, _MAX_H / h, _UPSCALE_MAX) align(center, box(scale(x: s * 100%, y: s * 100%, reflow: true, body))) } #show figure: set block(breakable: false) #set figure(gap: 8pt) #show figure.caption: set text(size: 8.5pt, fill: rgb("#555")) == 3.1#h(0.6em)The Image of the Unit Square #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - Compute the image of a point under a 2-by-2 matrix, and of a whole region. - Read a matrix by its columns: the columns are the images of the standard basis vectors. - Predict when the image of the unit square collapses from a parallelogram to a segment. ] A #math.equation(block: false, alt: "2 times 2")[$2 × 2$] matrix with entries #math.equation(block: false, alt: "a , b , c , d")[$a , b , c , d$] moves the point #math.equation(block: false, alt: "open parenthesis x , y close parenthesis")[$( x , y )$] to #math.equation(block: false, alt: "open parenthesis a x plus b y , c x plus d y close parenthesis")[$( a x + b y , #h(0.278em) c x + d y )$]. One point at a time, that is just arithmetic. The geometry appears when you move #emph[every] point of a shape at once and look at what arrives. Our shape is the unit square: all points #math.equation(block: false, alt: "open parenthesis u , v close parenthesis")[$( u , v )$] with #math.equation(block: false, alt: "0 less than or equal to u less than or equal to 1")[$0 ≤ u ≤ 1$] and #math.equation(block: false, alt: "0 less than or equal to v less than or equal to 1")[$0 ≤ v ≤ 1$]. Follow the two special corners first. The corner #math.equation(block: false, alt: "𝐞 sub 1 equals open parenthesis 1 , 0 close parenthesis")[$𝐞_(1) = ( 1 , 0 )$] is sent to #math.equation(block: false, alt: "open parenthesis a , c close parenthesis")[$( a , c )$] — the first #strong[column] of the matrix. The corner #math.equation(block: false, alt: "𝐞 sub 2 equals open parenthesis 0 , 1 close parenthesis")[$𝐞_(2) = ( 0 , 1 )$] is sent to #math.equation(block: false, alt: "open parenthesis b , d close parenthesis")[$( b , d )$] — the second column. And a general point of the square, #math.equation(block: false, alt: "open parenthesis u , v close parenthesis equals u 𝐞 sub 1 plus v 𝐞 sub 2")[$( u , v ) = u 𝐞_(1) + v 𝐞_(2)$], is sent to #math.equation(block: false, alt: "u open parenthesis a , c close parenthesis plus v open parenthesis b , d close parenthesis")[$u ( a , c ) + v ( b , d )$]: the #emph[same combination] of the columns that built the point from the corners. The figure below draws the arriving set live, with the four matrix entries on sliders. {"camera":{"fov":50,"position":\[1,-2.5,4.5\],"projection":"perspective","target":\[0.5,0.5,0\]},"grid":{"axisColors":{"x":"\#ef4444","y":"\#22c55e","z":"\#3b82f6"},"divisions":10,"gridColor":"\#e5e7eb","showAxes":true,"showLabels":true,"size":10,"visible":true},"id":"1f3ab396-71e6-4cbb-b4dd-f4918adf7ef4","metadata":{"alt\_text":"A flat colored parallelogram lying in the xy-plane, seen from above: the image of the unit square under a 2-by-2 matrix. Its two edges from the origin are drawn as a red segment (the first matrix column) and a blue segment (the second column). Four sliders a, b, c, d set the matrix entries; dragging them shears, rotates, stretches, or flattens the parallelogram live.","created\_at":"2026-08-01T00:00:00.000Z","description":"Book scene: the unit square under the matrix with columns (a, c) and (b, d), drawn as the flat parametric surface (au + bv, cu + dv, 0) for u, v in \[0, 1\], with the two edge segments marking the column vectors. Defaults a = 1, b = 0, c = 0, d = 1 give the identity.","tags":\["book","linear-algebra","linear-transformation","unit-square","columns"\],"updated\_at":"2026-08-01T00:00:00.000Z"},"objects":\[{"id":"46af7b51-9bb2-4989-b3bf-f975098ecfeb","kind":"parameter","label":{"text":"a (first column, x-part)","visible":true},"max":2,"min":-2,"name":"a","step":0.05,"value":1,"visible":true},{"id":"85e46780-381e-4db9-aa01-cdab3e48aa38","kind":"parameter","label":{"text":"b (second column, x-part)","visible":true},"max":2,"min":-2,"name":"b","step":0.05,"value":0,"visible":true},{"id":"614c40cc-ef5e-4d74-a166-791396982e28","kind":"parameter","label":{"text":"c (first column, y-part)","visible":true},"max":2,"min":-2,"name":"c","step":0.05,"value":0,"visible":true},{"id":"739f2dfa-0bcd-4949-bf03-5b1e54940d3c","kind":"parameter","label":{"text":"d (second column, y-part)","visible":true},"max":2,"min":-2,"name":"d","step":0.05,"value":1,"visible":true},{"id":"987306ff-a489-4d94-8c97-353cd4d1208b","kind":"parametric-surface","label":{"text":"image of the unit square","visible":true},"resolution":16,"style":{"colormap":"viridis","doubleSided":true,"opacity":0.8,"wireframe":false,"wireframeColor":"\#000000"},"uDomain":\[0,1\],"vDomain":\[0,1\],"visible":true,"xExpr":"a\*u + b\*v","yExpr":"c\*u + d\*v","zExpr":"0"},{"id":"b1360e7f-473e-4c35-b667-e3f38716ecd0","kind":"parametric-curve","label":{"text":"image of e1: the column (a, c)","visible":true},"samples":50,"style":{"color":"\#ef4444","dash":\[\],"lineWidth":4},"tDomain":\[0,1\],"visible":true,"xExpr":"a\*t","yExpr":"c\*t","zExpr":"0.02"},{"id":"1ad1bdd8-72f2-4c7a-b904-6968ff290b0c","kind":"parametric-curve","label":{"text":"image of e2: the column (b, d)","visible":true},"samples":50,"style":{"color":"\#3b82f6","dash":\[\],"lineWidth":4},"tDomain":\[0,1\],"visible":true,"xExpr":"b\*t","yExpr":"d\*t","zExpr":"0.02"}\],"title":"The image of the unit square","version":1} The image of the unit square under the matrix with entries #math.equation(block: false, alt: "a , b , c , d")[$a , b , c , d$], drawn flat in the plane. The red edge is the image of #math.equation(block: false, alt: "𝐞 sub 1")[$𝐞_(1)$] — the column #math.equation(block: false, alt: "open parenthesis a , c close parenthesis")[$( a , c )$] — and the blue edge is the image of #math.equation(block: false, alt: "𝐞 sub 2")[$𝐞_(2)$] — the column #math.equation(block: false, alt: "open parenthesis b , d close parenthesis")[$( b , d )$]. The sliders start at the identity: #math.equation(block: false, alt: "a equals 1")[$a = 1$], #math.equation(block: false, alt: "b equals 0")[$b = 0$], #math.equation(block: false, alt: "c equals 0")[$c = 0$], #math.equation(block: false, alt: "d equals 1")[$d = 1$]. === Explore the figure + At the identity defaults, the image #emph[is] the unit square: red edge along the #math.equation(block: false, alt: "x")[$x$]-axis, blue edge along the #math.equation(block: false, alt: "y")[$y$]-axis. Confirm the two colored edges really are the columns #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis")[$( 1 , 0 )$] and #math.equation(block: false, alt: "open parenthesis 0 , 1 close parenthesis")[$( 0 , 1 )$]. + Drag #math.equation(block: false, alt: "b")[$b$] to #math.equation(block: false, alt: "0.5")[$0.5$] and stop. The red edge has not moved — the first column is untouched — but the blue edge tips over and the square shears into a parallelogram. Every slider controls one coordinate of one edge; convince yourself which. + Predict before you drag: with #math.equation(block: false, alt: "a equals 1")[$a = 1$], #math.equation(block: false, alt: "b equals 0.5")[$b = 0.5$], #math.equation(block: false, alt: "c equals 0.5")[$c = 0.5$], #math.equation(block: false, alt: "d equals 1.5")[$d = 1.5$], where will the far corner #math.equation(block: false, alt: "open parenthesis 1 , 1 close parenthesis")[$( 1 , 1 )$] land? It must arrive at the sum of the two columns. Set the sliders and check. + Now aim the two columns the same way: #math.equation(block: false, alt: "a equals 1")[$a = 1$], #math.equation(block: false, alt: "c equals 0.5")[$c = 0.5$], #math.equation(block: false, alt: "b equals 2")[$b = 2$], #math.equation(block: false, alt: "d equals 1")[$d = 1$], so the blue edge #math.equation(block: false, alt: "open parenthesis 2 , 1 close parenthesis")[$( 2 , 1 )$] is exactly twice the red edge #math.equation(block: false, alt: "open parenthesis 1 , 0.5 close parenthesis")[$( 1 , 0.5 )$]. What is left of the parallelogram, and why should the last chapter's word #emph[dependent] come to mind? === The columns are the whole story The computation behind everything you just saw is one line. Since #math.equation(block: false, alt: "open parenthesis u , v close parenthesis equals u 𝐞 sub 1 plus v 𝐞 sub 2")[$( u , v ) = u 𝐞_(1) + v 𝐞_(2)$], and the transformation respects adding and scaling, #math.equation(block: true, alt: "T open parenthesis u , v close parenthesis equals u open parenthesis a , c close parenthesis plus v open parenthesis b , d close parenthesis")[$T ( u , v ) = u ( a , c ) + v ( b , d )$] The image of the unit square is the set of all combinations #math.equation(block: false, alt: "u open parenthesis a , c close parenthesis plus v open parenthesis b , d close parenthesis")[$u ( a , c ) + v ( b , d )$] with coefficients between #math.equation(block: false, alt: "0")[$0$] and #math.equation(block: false, alt: "1")[$1$] — a parallelogram whose edges from the origin are the two columns. Let the coefficients run over #emph[all] real numbers instead and you get the image of the entire plane: the #strong[span of the columns], in exactly the sense of Chapter 2. When the columns are independent, that span is the whole plane and the square becomes an honest parallelogram; when they are dependent, as in your final exploration step, the span collapses to a line, the parallelogram collapses to a segment, and infinitely many different input points are forced to share each output point. #examplebox("Example 1")[Predict four corners and the center][ For #math.equation(block: false, alt: "a equals 1")[$a = 1$], #math.equation(block: false, alt: "b equals 0.5")[$b = 0.5$], #math.equation(block: false, alt: "c equals 0.5")[$c = 0.5$], #math.equation(block: false, alt: "d equals 1.5")[$d = 1.5$], find the images of the four corners of the unit square, and show the center #math.equation(block: false, alt: "open parenthesis 0.5 , 0.5 close parenthesis")[$( 0.5 , 0.5 )$] lands on the center of the image parallelogram. The columns are #math.equation(block: false, alt: "open parenthesis 1 , 0.5 close parenthesis")[$( 1 , 0.5 )$] and #math.equation(block: false, alt: "open parenthesis 0.5 , 1.5 close parenthesis")[$( 0.5 , 1.5 )$]. The corners map to combinations of the columns: #math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis ↦ open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 ) ↦ ( 0 , 0 )$]; then #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis ↦ open parenthesis 1 , 0.5 close parenthesis")[$( 1 , 0 ) ↦ ( 1 , 0.5 )$] and #math.equation(block: false, alt: "open parenthesis 0 , 1 close parenthesis ↦ open parenthesis 0.5 , 1.5 close parenthesis")[$( 0 , 1 ) ↦ ( 0.5 , 1.5 )$], the two columns themselves; and #math.equation(block: false, alt: "open parenthesis 1 , 1 close parenthesis ↦ open parenthesis 1 , 0.5 close parenthesis plus open parenthesis 0.5 , 1.5 close parenthesis equals open parenthesis 1.5 , 2 close parenthesis")[$( 1 , 1 ) ↦ ( 1 , 0.5 ) + ( 0.5 , 1.5 ) = ( 1.5 , 2 )$]. The center maps to #math.equation(block: false, alt: "0.5 open parenthesis 1 , 0.5 close parenthesis plus 0.5 open parenthesis 0.5 , 1.5 close parenthesis equals open parenthesis 0.75 , 1 close parenthesis")[$0.5 ( 1 , 0.5 ) + 0.5 ( 0.5 , 1.5 ) = ( 0.75 , 1 )$]. The centroid of the four image corners is #math.equation(block: false, alt: "the fraction 1 over 4 open parenthesis open parenthesis 0 , 0 close parenthesis plus open parenthesis 1 , 0.5 close parenthesis plus open parenthesis 0.5 , 1.5 close parenthesis plus open parenthesis 1.5 , 2 close parenthesis close parenthesis equals open parenthesis 0.75 , 1 close parenthesis")[$frac(1, 4) ( ( 0 , 0 ) + ( 1 , 0.5 ) + ( 0.5 , 1.5 ) + ( 1.5 , 2 ) ) = ( 0.75 , 1 )$] — the same point. Linearity preserves midpoints and centers automatically: no separate rule is needed for interior points. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ To read a matrix, read its columns: they are the landing sites of the basis vectors, and everything else is combinations. One question survives this section unanswered — the sheared, stretched parallelogram plainly has a different #emph[area] than the square that produced it, and one number in terms of #math.equation(block: false, alt: "a , b , c , d")[$a , b , c , d$] measures exactly how much. That number is the subject of the next chapter. ]