#set document(title: "1.1 Two Planes, One Line", 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")) == 1.1#h(0.6em)Two Planes, One Line #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - Recognize a linear equation in three unknowns as a plane in space. - Predict that two non-parallel planes intersect in a line, and describe that line parametrically. - Explain how translating one plane moves the intersection line without ever removing it. ] A single linear equation in three unknowns pins down very little. The equation #math.equation(block: false, alt: "z equals 1 minus 0.5 x plus 0.3 y")[$z = 1 − 0.5 x + 0.3 y$] has infinitely many solutions, and they are not scattered randomly: they form a plane, a flat sheet tilted through space. A second equation, #math.equation(block: false, alt: "z equals a plus 0.5 x minus 0.7 y")[$z = a + 0.5 x − 0.7 y$], is a second sheet. A #emph[system] asks for the points that satisfy both equations at once — the points where the two sheets pass through each other. Two flat sheets that are not parallel cannot merely touch. Wherever they meet, they must meet along an entire straight line, and every point of that line is a solution of the system. The figure below draws both planes and their intersection line, with a slider #math.equation(block: false, alt: "a")[$a$] that raises and lowers the second plane. {"camera":{"fov":50,"position":\[7,5,4.5\],"projection":"perspective","target":\[0,0,0.5\]},"grid":{"axisColors":{"x":"\#ef4444","y":"\#22c55e","z":"\#3b82f6"},"divisions":10,"gridColor":"\#e5e7eb","showAxes":true,"showLabels":true,"size":10,"visible":true},"id":"171b13eb-8a5e-4662-b7de-9e830e82496d","metadata":{"alt\_text":"Two semi-transparent tilted planes crossing each other, with their line of intersection drawn as a thick amber line. A slider named a raises and lowers the second plane; as it moves, the amber line slides across the first plane but never disappears, because these two planes are never parallel.","created\_at":"2026-08-01T00:00:00.000Z","description":"Book scene: the planes z = 1 - 0.5x + 0.3y and z = a + 0.5x - 0.7y with their intersection line (t, t + a - 1, 0.7 + 0.3a - 0.2t) recomputed live from the slider a.","tags":\["book","linear-algebra","systems","planes","intersection"\],"updated\_at":"2026-08-01T00:00:00.000Z"},"objects":\[{"id":"2d8e68a5-c2b4-4d61-9446-5fea32500fbc","kind":"parameter","label":{"text":"a (offset of the second plane)","visible":true},"max":2,"min":-2,"name":"a","step":0.1,"value":0,"visible":true},{"expression":"1 - 0.5\*x + 0.3\*y","id":"def1d6bd-f48a-41d3-9950-3e2d3ce4a2af","kind":"explicit-surface","label":{"text":"plane 1: z = 1 - 0.5x + 0.3y","visible":true},"resolution":32,"style":{"colormap":"coolwarm","doubleSided":true,"opacity":0.55,"wireframe":false,"wireframeColor":"\#000000"},"visible":true,"xDomain":\[-3,3\],"yDomain":\[-3,3\]},{"expression":"a + 0.5\*x - 0.7\*y","id":"85acfd17-2fd5-4500-a178-57c5fff517b6","kind":"explicit-surface","label":{"text":"plane 2: z = a + 0.5x - 0.7y","visible":true},"resolution":32,"style":{"colormap":"viridis","doubleSided":true,"opacity":0.55,"wireframe":false,"wireframeColor":"\#000000"},"visible":true,"xDomain":\[-3,3\],"yDomain":\[-3,3\]},{"id":"ce9c5e1a-57e2-428b-be59-97981438bb90","kind":"parametric-curve","label":{"text":"intersection line","visible":true},"samples":100,"style":{"color":"\#f59e0b","dash":\[\],"lineWidth":4},"tDomain":\[-3,3\],"visible":true,"xExpr":"t","yExpr":"t + a - 1","zExpr":"0.7 + 0.3\*a - 0.2\*t"}\],"title":"Two planes, one line","version":1} The planes #math.equation(block: false, alt: "z equals 1 minus 0.5 x plus 0.3 y")[$z = 1 − 0.5 x + 0.3 y$] and #math.equation(block: false, alt: "z equals a plus 0.5 x minus 0.7 y")[$z = a + 0.5 x − 0.7 y$], with their intersection drawn as the amber line. The slider #math.equation(block: false, alt: "a")[$a$] translates the second plane vertically; the line of solutions moves with it. === Explore the figure + Orbit until you can see both sheets edge-on. Convince yourself the amber line lies #emph[inside each plane simultaneously] — that is what "solution of both equations" looks like. + Drag #math.equation(block: false, alt: "a")[$a$] slowly from #math.equation(block: false, alt: "minus 2")[$− 2$] to #math.equation(block: false, alt: "2")[$2$]. The second plane rises, and the line slides across the first plane. Does the line ever disappear? + Set #math.equation(block: false, alt: "a equals 0")[$a = 0$] and pick any point you like on the amber line. Read off rough coordinates and check them, at least approximately, in both equations. + Predict: could some value of #math.equation(block: false, alt: "a")[$a$] make the system have #emph[no] solutions? What would the two planes have to look like for that to happen? === Where the line comes from We can compute the line you just watched. A point on both planes must give both formulas the same #math.equation(block: false, alt: "z")[$z$], so #math.equation(block: true, alt: "1 minus 0.5 x plus 0.3 y equals a plus 0.5 x minus 0.7 y")[$1 − 0.5 x + 0.3 y = a + 0.5 x − 0.7 y$] Collecting terms gives #math.equation(block: false, alt: "y equals x plus a minus 1")[$y = x + a − 1$]: on the intersection, #math.equation(block: false, alt: "y")[$y$] is completely determined by #math.equation(block: false, alt: "x")[$x$]. Choosing #math.equation(block: false, alt: "x equals t")[$x = t$] as a free parameter and substituting back into the first plane gives the parametric line #math.equation(block: true, alt: "open parenthesis x , y , z close parenthesis equals open parenthesis t , t plus a minus 1 , 0.7 plus 0.3 a minus 0.2 t close parenthesis")[$( x , y , z ) = ( t , #h(0.278em) t + a − 1 , #h(0.278em) 0.7 + 0.3 a − 0.2 t )$] Notice that the slider value #math.equation(block: false, alt: "a")[$a$] appears in the formula. That is the algebraic shadow of what you saw: changing #math.equation(block: false, alt: "a")[$a$] does not break the system, it just hands you a #emph[different] line of solutions. The system stays consistent for every #math.equation(block: false, alt: "a")[$a$] because the two planes tilt differently — their coefficient rows #math.equation(block: false, alt: "open parenthesis minus 0.5 , 0.3 close parenthesis")[$( − 0.5 , 0.3 )$] and #math.equation(block: false, alt: "open parenthesis 0.5 , minus 0.7 close parenthesis")[$( 0.5 , − 0.7 )$] are not proportional, so the sheets can never be parallel. Inconsistency would require parallel, non-identical planes, and no vertical translation can make these two parallel. #examplebox("Example 1")[Check a point on the line][ Show that for every value of #math.equation(block: false, alt: "a")[$a$], the point #math.equation(block: false, alt: "open parenthesis 1 , a , 0.5 plus 0.3 a close parenthesis")[$( 1 , #h(0.278em) a , #h(0.278em) 0.5 + 0.3 a )$] solves both equations. This is the point of the parametric line with #math.equation(block: false, alt: "t equals 1")[$t = 1$]: the formula gives #math.equation(block: false, alt: "open parenthesis 1 , 1 plus a minus 1 , 0.7 plus 0.3 a minus 0.2 close parenthesis equals open parenthesis 1 , a , 0.5 plus 0.3 a close parenthesis")[$( 1 , #h(0.278em) 1 + a − 1 , #h(0.278em) 0.7 + 0.3 a − 0.2 ) = ( 1 , #h(0.278em) a , #h(0.278em) 0.5 + 0.3 a )$]. Substitute into the first plane: #math.equation(block: false, alt: "1 minus 0.5 open parenthesis 1 close parenthesis plus 0.3 open parenthesis a close parenthesis equals 0.5 plus 0.3 a")[$1 − 0.5 ( 1 ) + 0.3 ( a ) = 0.5 + 0.3 a$], which matches the claimed #math.equation(block: false, alt: "z")[$z$]. Substitute into the second: #math.equation(block: false, alt: "a plus 0.5 open parenthesis 1 close parenthesis minus 0.7 open parenthesis a close parenthesis equals 0.5 plus 0.3 a")[$a + 0.5 ( 1 ) − 0.7 ( a ) = 0.5 + 0.3 a$], the same value. Both equations are satisfied, for every #math.equation(block: false, alt: "a")[$a$] at once. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ A system of two equations in three unknowns typically loses one degree of freedom per equation: three unknowns minus two constraints leaves a one-parameter family of solutions — a line. Keep this counting in mind; it becomes the rank–nullity picture later in the book. ]