#set document(title: "3.1 Contour Maps", 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)Contour Maps #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Objectives] - Explain a level curve as the surface sliced at one height and dropped to the map. - Read peak count, relative height, and steepness from contour spacing alone. - Compute a family of level curves and predict its spacing before plotting it. ] A function of two variables assigns a height #math.equation(block: false, alt: "z equals f open parenthesis x , y close parenthesis")[$z = f ( x , y )$] to every point of the plane, and its graph is a landscape. Landscapes are hard to carry around, so hikers long ago invented something better: the map. A #strong[contour map] of #math.equation(block: false, alt: "f")[$f$] draws, on the flat plane, the #strong[level curves] #math.equation(block: false, alt: "f open parenthesis x , y close parenthesis equals c")[$f ( x , y ) = c$] for a list of equally spaced heights #math.equation(block: false, alt: "c")[$c$] — each curve is the set of points where the landscape stands at exactly that height. The skill this section builds is #emph[fusion]: seeing map and terrain as one object, so that a glance at crowded curves tells you "steep ground here" without any computation. The figure stages the definition so you can run it in both directions. The landscape is a two-hill surface; the map is a separate object lying flat beneath it, and the map's altitude is under your control. {"camera":{"fov":50,"position":\[8,6,5\],"projection":"perspective","target":\[0,0,1\]},"grid":{"axisColors":{"x":"\#ef4444","y":"\#22c55e","z":"\#3b82f6"},"divisions":10,"gridColor":"\#e5e7eb","showAxes":true,"showLabels":true,"size":10,"visible":true},"id":"f0190d7f-2c63-4a4e-8f31-4a0d53877aae","metadata":{"alt\_text":"A half-transparent surface with two rounded hills of different heights \\u2014 a taller one near (1, 0) and a shorter one near (-1, 1) \\u2014 above a flat plane at z = 0 carrying twelve dark nested contour loops, two families of loops encircling the two hilltops.","created\_at":"2026-07-07T00:00:00.000Z","description":"Workbook scene: two-peak Gaussian surface z = 3exp(-((x-1)^2+y^2)/2) + 2exp(-((x+1)^2+(y-1)^2)/2) on \[-4,4\]^2, with a 12-level contour plot of the same function on the draggable z = 0 plane.","tags":\["workbook","calc3","contours","level-curves","functions-of-two-variables"\],"updated\_at":"2026-07-07T00:00:00.000Z"},"objects":\[{"expression":"3\*exp(-((x-1)^2 + y^2)/2) + 2\*exp(-((x+1)^2 + (y-1)^2)/2)","id":"643b91b0-5f34-4553-9f2e-517842d20578","kind":"explicit-surface","label":{"text":"two unequal peaks","visible":true},"resolution":160,"style":{"colormap":"viridis","doubleSided":true,"opacity":0.5,"wireframe":false,"wireframeColor":"\#000000"},"visible":true,"xDomain":\[-4,4\],"yDomain":\[-4,4\]},{"expression":"3\*exp(-((x-1)^2 + y^2)/2) + 2\*exp(-((x+1)^2 + (y-1)^2)/2)","id":"87fb47f4-85e3-48fa-88fb-7dad6c6f650c","kind":"contour-plot","label":{"text":"level curves (drag my z-offset)","visible":true},"levels":12,"style":{"color":"\#0f172a","dash":\[\],"lineWidth":2},"visible":true,"xDomain":\[-4,4\],"yDomain":\[-4,4\],"zOffset":0}\],"title":"Slices That Climb \\u2014 two peaks and their contour map","version":1} The two-peak surface #math.equation(block: false, alt: "z equals 3 e to the power minus open parenthesis open parenthesis x minus 1 close parenthesis squared plus y squared close parenthesis / 2 plus 2 e to the power minus open parenthesis open parenthesis x plus 1 close parenthesis squared plus open parenthesis y minus 1 close parenthesis squared close parenthesis / 2")[$z = 3 e^(− ( ( x − 1 )^(2) + y^(2) ) / 2) + 2 e^(− ( ( x + 1 )^(2) + ( y − 1 )^(2) ) / 2)$], half-transparent, above a flat sheet of twelve dark nested loops — a contour plot built from the same expression, resting at #math.equation(block: false, alt: "z equals 0")[$z = 0$] but carrying a draggable z-offset, so the whole stack of level curves can ride up into the surface and seat itself, one loop at a time. === Explore + Orbit until you look straight down the #math.equation(block: false, alt: "z")[$z$]-axis, so the contour plot reads as a flat map and the surface is only a colored blur behind it. From the map alone: how many peaks does this landscape have, and which one is taller? What about the map told you? + Still looking down, find where the loops crowd closest together and where they spread farthest apart. Then orbit to a side view and predict: walking through the crowded region, what would the ground feel like underfoot? Through the spread-out region? + Select the contour plot and drag its #strong[z-offset] slowly upward from 0. Watch one outer loop until the rising sheet reaches the surface: the loop seats itself exactly where the plane cuts the landscape. Keep climbing. In what order do the loops land — and which peak runs out of loops to seat first? + Drag the z-offset back down until roughly half the loops are seated and half still float. Where seated loops stack tightly against the surface's wall — is that the crowded region you flagged in step 2? + Set the plot's #strong[Levels] control from 12 up to 20. The levels are equally spaced in height, so what does #emph[tighter] spacing on the map now say, precisely, about the surface between two neighboring curves? + Sketch, on paper, the map you expect for #math.equation(block: false, alt: "4 minus x squared minus y squared")[$4 − x^(2) − y^(2)$] — the example below does the algebra — then edit both objects' expressions to it and look straight down. Where were the rings more crowded than you drew? === The map is the surface, disassembled A level curve is a slice: cut the surface with the horizontal plane #math.equation(block: false, alt: "z equals c")[$z = c$], and the cut edge, dropped straight down to the page, is the curve #math.equation(block: false, alt: "f open parenthesis x , y close parenthesis equals c")[$f ( x , y ) = c$]. Dragging the z-offset runs this definition in reverse — the plane climbs, and at each height it re-seats the curve where the slice happens. Because the #math.equation(block: false, alt: "c")[$c$]-values are equally spaced, the horizontal gap between neighboring curves is inversely tied to how fast #math.equation(block: false, alt: "f")[$f$] climbs there: #strong[crowded curves mean steep ground]. The two-hill specimen shows what else a map encodes. The taller summit, near #math.equation(block: false, alt: "open parenthesis 1 , 0 close parenthesis")[$( 1 , 0 )$], tops out around #math.equation(block: false, alt: "3.16")[$3.16$]; the shorter one, near #math.equation(block: false, alt: "open parenthesis minus 1 , 1 close parenthesis")[$( − 1 , 1 )$], at about #math.equation(block: false, alt: "2.25")[$2.25$]. Levels above #math.equation(block: false, alt: "2.25")[$2.25$] therefore cut only the taller hill — which is why more loops encircle it. Counting rings compares summits. #examplebox("Example 1")[The rings of a paraboloid, before you plot them][ For #math.equation(block: false, alt: "g open parenthesis x , y close parenthesis equals 4 minus x squared minus y squared")[$g ( x , y ) = 4 − x^(2) − y^(2)$], find the level curves at #math.equation(block: false, alt: "c equals 3 , 2 , 1 , 0")[$c = 3 , 2 , 1 , 0$] and decide whether the rings crowd together or spread apart as you move outward from the center. Setting #math.equation(block: false, alt: "g equals c")[$g = c$] gives #math.equation(block: false, alt: "x squared plus y squared equals 4 minus c")[$x^(2) + y^(2) = 4 − c$]: a circle of radius #math.equation(block: false, alt: "the square root of 4 minus c")[$sqrt(4 − c)$], so the four levels are circles of radii #math.equation(block: true, alt: "the square root of 1 equals 1 , the square root of 2 approximately equals 1.414 , the square root of 3 approximately equals 1.732 , the square root of 4 equals 2 .")[$sqrt(1) = 1 , #h(1em) sqrt(2) ≈ 1.414 , #h(1em) sqrt(3) ≈ 1.732 , #h(1em) sqrt(4) = 2 .$] The gaps between successive rings, moving outward, are about #math.equation(block: false, alt: "0.414")[$0.414$], then #math.equation(block: false, alt: "0.318")[$0.318$], then #math.equation(block: false, alt: "0.268")[$0.268$] — shrinking. The rings #emph[crowd] as you move out, because the bowl steepens: along the ring of radius #math.equation(block: false, alt: "r")[$r$] the height #math.equation(block: false, alt: "4 minus r squared")[$4 − r^(2)$] falls at rate #math.equation(block: false, alt: "2 r")[$2 r$], so the farther out you stand, the less horizontal run a one-unit drop requires. Most people sketch the rings evenly spaced; the map knows better, and now so do you. ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ A contour map is not a decoration under the surface — it #emph[is] the surface, taken apart into slices at equally spaced heights. Crowded curves mean steep ground; counting closed loops compares summits. Every later idea in this book that starts "look at the map" starts here. ]