Monocurl Essays
Series Download

Pythagorean identity: why sin² + cos² = 1

The identity sin²θ + cos²θ = 1 is the Pythagorean theorem on the unit circle. Tangent and secant are lengths in the same picture and give two more.

17 min·High school·

AssumesThe unit circle: sine and cosine as coordinatesThe Pythagorean theorem: a proof you can seeSimilar triangles and why area grows as the square

As a point travels around the unit circle, the squares of its two coordinates share out a bar of length 1 between them. Whatever $\cos^2\theta$ gives up, $\sin^2\theta$ takes.
Monocurl source
let O = [-1.7, 0, 0]
let R = 1.8
let X0 = 1.0
let L = 2.6
let Share = |deg| {
    let th = rad(deg)
    let c2 = cos(th) * cos(th)
    let cut = X0 + L * clamp(0.004, c2, 0.996)
    return [
        Wedge(O, 0, th - TAU * floor(th / TAU), SLATE, 0.4),
        Legs(O, R, th),
        fill{tint(AZURE, 0.55)} stroke{AZURE, 2.5} Polygon([[X0, -0.2, 0], [cut, -0.2, 0], [cut, 0.35, 0], [X0, 0.35, 0]]),
        fill{tint(EMBER, 0.55)} stroke{EMBER, 2.5} Polygon([[cut, -0.2, 0], [X0 + L, -0.2, 0], [X0 + L, 0.35, 0], [cut, 0.35, 0]]),
        center{[X0 + 0.6, 0.95, 0]} scale{1.4} color{AZURE} Number(c2, 2),
        center{[X0 + 2.0, 0.95, 0]} scale{1.4} color{EMBER} Number(1 - c2, 2)
    ]
}
mesh base = [
    CircleAxes(O, R),
    ArcPath(O, R, 0, TAU),
    Name("\cos^2\theta", [X0 + 0.6, 1.5, 0], 0.9, AZURE),
    Name("\sin^2\theta", [X0 + 2.0, 1.5, 0], 0.9, EMBER),
    Name("+", [X0 + 1.3, 0.95, 0], 0.9),
    Dim([X0, -0.2, 0], [X0 + L, -0.2, 0], -0.3, SLATE, 2.5),
    Name("1", [X0 + L / 2, -0.8, 0], 0.9, SLATE),
    Name("\sin^2\theta + \cos^2\theta = 1", [X0 + L / 2, -1.5, 0], 0.9)
]
mesh share = Share(deg: 25)

slide "share"
    play Wait(0.6)
    share.deg = 360 + 36.87
    play Lerp(7.5, [&share], linear)
    play Wait(1.8)

Uses the shared definitions for this lesson's figures.

Ask a calculator for $\sin 37°$ and $\cos 37°$. It gives $0.6018$ and $0.7986$, two numbers with no obvious connection. Now square each and add: $0.3622 + 0.6378 = 1.0000$. Try an angle from the far side of the circle, 200°: the sine is $-0.3420$, the cosine is $-0.9397$, and the squares are $0.1170$ and $0.8830$, which again add to exactly 1.

It happens for every angle you try. Two functions with complicated decimal values are bound together by one of the simplest equations there is. The reason is a theorem that is at least two and a half thousand years old.

Why the sum is 1

Recall what the two numbers are. On the unit circle, the circle of radius 1 centered at the origin, start at the point $(1, 0)$ and turn about the origin through the angle $\theta$, counterclockwise. The point you reach has coordinates $(\cos\theta, \sin\theta)$: cosine is how far across it is, sine is how far up.

Pause and try

The point $(\cos\theta, \sin\theta)$ is on a circle of radius 1 around the origin. For an angle in the first quadrant, draw the right triangle formed by the radius to the point, the vertical line from the point down to the $x$ axis, and the piece of the axis between. What are its three side lengths, and what does the Pythagorean theorem say about them?

Show answerHide answer

The horizontal leg runs from the origin to the foot of the vertical line, so its length is the point’s $x$ coordinate, $\cos\theta$. The vertical leg has length $\sin\theta$. The hypotenuse is a radius, of length 1. The Pythagorean theorem says the squares of the legs add up to the square of the hypotenuse: $(\cos\theta)^2 + (\sin\theta)^2 = 1^2 = 1$.

That is the whole secret for an acute angle. A good instance to carry through the lesson is the point $(0.8, 0.6)$, which lies on the unit circle because $0.64 + 0.36 = 1$. Its triangle is the 3-4-5 triangle shrunk to hypotenuse 1, with angle $\theta \approx 36.87°$, and for this angle $\cos\theta = 0.8$ and $\sin\theta = 0.6$ exactly.

You might object that the argument used a triangle, and the opening example at 200° has no such triangle with legs $\cos 200°$ and $\sin 200°$: both numbers are negative, and a side cannot have negative length.

The point of the unit circle at 200° lies in the third quadrant. The triangle under it has legs of length 0.940 and 0.342, the sizes of the two negative coordinates, and their squares still add to 1.
The point of the unit circle at 200° lies in the third quadrant. The triangle under it has legs of length 0.940 and 0.342, the sizes of the two negative coordinates, and their squares still add to 1.
Monocurl source
let O = [-1.0, 0, 0]
let R = 1.8
let TH = rad(200)
let P = pol(O, R, TH)
let F = [P[0], O[1], 0]
let cs = cos(TH)
let sn = sin(TH)
mesh fills = Region([O, F, P], tint(SLATE, 0.2))
mesh base = [
    CircleAxes(O, R),
    ArcPath(O, R, 0, TAU),
    ArcPath(O, 0.45, 0, TH, PLUM, 3),
    Name("200^\circ", O + [0.5, 0.62, 0], 0.74, PLUM),
    Legs(O, R, TH),
    Square90(F, [1, 0, 0], [0, -1, 0], SLATE, 0.15),
    Name(to_string(abs(cs), 3), 0.5 * (O + F) + [-0.15, 0.3, 0], 0.76, AZURE),
    Name(to_string(abs(sn), 3), [F[0] - 0.5, P[1] - 0.08, 0], 0.76, EMBER),
    Name("1", 0.5 * (O + P) + [0.2, -0.3, 0], 0.76)
]
mesh work = [
    Name(str_join(["\cos 200^\circ = ", to_string(cs, 3)]), [2.5, 1.5, 0], 0.8, AZURE),
    Name(str_join(["\sin 200^\circ = ", to_string(sn, 3)]), [2.5, 0.9, 0], 0.8, EMBER),
    center{[2.5, 0.15, 0]} Note("squares of the legs", 0.74),
    center{[2.5, -0.45, 0]}
        color{AZURE, |tags| 1 in tags}
        color{EMBER, |tags| 2 in tags}
        color{INK}
        Tex([text_tag{1} to_string(cs * cs, 3), "+", text_tag{2} to_string(sn * sn, 3)], 0.9),
    Name(str_join(["= ", to_string(cs * cs + sn * sn, 3)]), [2.5, -1.05, 0], 0.9)
]

Uses the shared definitions for this lesson's figures.

The triangle is still there. Its legs have lengths $|\cos\theta|$ and $|\sin\theta|$, the distances of the point from the two axes, and squaring a number gives the same result as squaring its absolute value. So the signs disappear exactly where they would have caused trouble. Only on the axes is there no triangle at all, and there the equation can be checked directly: at the top of the circle the point is $(0, 1)$ and $0^2 + 1^2 = 1$.

There is a cleaner way to say all of this at once. The Pythagorean theorem written in coordinates is the distance formula: the distance from the origin to a point $(x, y)$ is $\sqrt{x^2 + y^2}$. It holds for every point, in every quadrant and on the axes. The identity is the statement that $(\cos\theta, \sin\theta)$ is at distance 1 from the origin.

A word on notation before the formal statement. By long custom $\sin^2\theta$ means $(\sin\theta)^2$, the square of the sine. It does not mean $\sin(\theta^2)$, the sine of the squared angle.

The proof leans on one earlier result, the distance formula, which is the Pythagorean theorem applied to the horizontal and vertical separations of two points and which remains true when one of the separations is zero. “For every real number” is meant literally: negative angles and angles beyond a full turn are included, in degrees or radians.

An equation that holds for every value of its variable is called an identity. That separates it from an equation such as $\sin\theta = \frac{1}{2}$, which is true for some angles and false for others and which one solves. An identity is used differently: as a rule for replacing one expression by another.

The graphs of \cos^2\theta and \sin^2\theta over one full turn. At every angle the two heights add to 1, as the stacked bars at 30°, 135° and 250° show.
The graphs of $\cos^2\theta$ and $\sin^2\theta$ over one full turn. At every angle the two heights add to 1, as the stacked bars at 30°, 135° and 250° show.
Monocurl source
let fw = Frame(0, 360, 0, 1.2, [0.2, 0.1, 0], 6.2, 3.0)
let c2 = |d| cos(rad(d)) * cos(rad(d))
mesh grid = GridLines(fw, [90, 180, 270, 360], [0.5, 1])
mesh axes = [
    Axes(fw),
    YTicks(fw, [0.5, 1], SLATE, 1),
    DegTicks(fw, [0, 90, 180, 270, 360]),
    Name("\theta", [fx(fw, 360) + 0.5, fy(fw, 0), 0], 0.85, SLATE)
]
mesh curves = [
    Seg(at(fw, 0, 1), at(fw, 360, 1), LEAF, 3),
    Graph(fw, c2, 0, 360, AZURE),
    Graph(fw, |d| 1 - c2(d), 0, 360, EMBER)
]
mesh bars = block {
    for (d in [30, 135, 250]) {
        . Seg(at(fw, d, 0), at(fw, d, c2(d)), AZURE, 8)
        . Seg(at(fw, d, c2(d)), at(fw, d, 1), EMBER, 8)
    }
}
mesh names = [
    Name("\sin^2\theta + \cos^2\theta = 1", at(fw, 180, 1) + [0, 0.33, 0], 0.82, LEAF),
    Name("\cos^2\theta", at(fw, 180, 0.8), 0.78, AZURE),
    Name("\sin^2\theta", at(fw, 90, 0.8), 0.78, EMBER)
]

Uses the shared definitions for this lesson's figures.

One coordinate nearly determines the other

The first use of the identity is to recover one of the two functions from the other without ever finding the angle.

The horizontal line at height \frac{3}{5} meets the unit circle in two points. They have the same sine and opposite cosines, \frac{4}{5} and -\frac{4}{5}, which is why the identity gives \cos\theta only up to sign.
The horizontal line at height $\frac{3}{5}$ meets the unit circle in two points. They have the same sine and opposite cosines, $\frac{4}{5}$ and $-\frac{4}{5}$, which is why the identity gives $\cos\theta$ only up to sign.
Monocurl source
let O = [-1.3, 0, 0]
let R = 1.85
let P1 = [O[0] + 0.8 * R, 0.6 * R, 0]
let P2 = [O[0] - 0.8 * R, 0.6 * R, 0]
let F1 = [P1[0], 0, 0]
let F2 = [P2[0], 0, 0]
mesh base = [
    Region([O, F1, P1], tint(SLATE, 0.14)),
    Region([O, F2, P2], tint(SLATE, 0.14)),
    CircleAxes(O, R),
    ArcPath(O, R, 0, TAU),
    Seg([O[0] - R - 0.3, P1[1], 0], [O[0] + R + 0.3, P1[1], 0], MIST, 3),
    Seg(O, P1, INK, 3),
    Seg(O, P2, INK, 3),
    Seg(O, F1, AZURE, 5),
    Seg(O, F2, AZURE, 5),
    Seg(F1, P1, EMBER, 5),
    Seg(F2, P2, EMBER, 5),
    Pt(P1, INK, 0.1),
    Pt(P2, INK, 0.1),
    Name("\frac{4}{5}", 0.5 * (O + F1) + [0.1, -0.42, 0], 0.74, AZURE),
    Name("-\frac{4}{5}", 0.5 * (O + F2) + [-0.1, -0.42, 0], 0.74, AZURE),
    Name("\frac{3}{5}", 0.5 * (F1 + P1) + [-0.28, -0.1, 0], 0.74, EMBER),
    Name("\frac{3}{5}", 0.5 * (F2 + P2) + [0.28, -0.1, 0], 0.74, EMBER)
]
mesh work = [
    Name("\sin\theta = \frac{3}{5}", [2.55, 1.45, 0], 0.85, EMBER),
    Name("\cos^2\theta = 1 - \frac{9}{25}", [2.55, 0.45, 0], 0.8),
    Name("= \frac{16}{25}", [2.55, -0.3, 0], 0.8),
    Name("\cos\theta = \pm\frac{4}{5}", [2.55, -1.3, 0], 0.85, AZURE)
]

Uses the shared definitions for this lesson's figures.

Pause and try

Suppose $\cos\theta = -\frac{5}{13}$ and the point at angle $\theta$ is in the third quadrant. Find $\sin\theta$.

Show answerHide answer

$\sin^2\theta = 1 - \cos^2\theta = 1 - \frac{25}{169} = \frac{144}{169}$, so $\sin\theta = \pm\frac{12}{13}$. In the third quadrant the point is below the $x$ axis, so the sine is negative: $\sin\theta = -\frac{12}{13}$. Check: $\frac{25}{169} + \frac{144}{169} = 1$.

Tangent and secant as lengths

Sine and cosine are lengths in the unit circle picture. Four more functions are built from them by division, and the two met most often are the tangent, $\tan\theta = \frac{\sin\theta}{\cos\theta}$, and the secant, $\sec\theta = \frac{1}{\cos\theta}$. As formulas they look like bookkeeping. Compute them at our running point, though, where $\cos\theta = 0.8$ and $\sin\theta = 0.6$:

$$ \tan\theta = \frac{0.6}{0.8} = 0.75, \qquad \sec\theta = \frac{1}{0.8} = 1.25. $$

The numbers $1$, $0.75$ and $1.25$ are $4$, $3$ and $5$ divided by 4. They are the sides of another right triangle: $1^2 + 0.75^2 = 1 + 0.5625 = 1.5625 = 1.25^2$.

Pause and try

Is that a coincidence of the 3-4-5 triangle? Test another angle: compute $1 + \tan^2 60°$ and $\sec^2 60°$ exactly, using $\sin 60° = \frac{\sqrt 3}{2}$ and $\cos 60° = \frac{1}{2}$.

Show answerHide answer

$\tan 60° = \frac{\sqrt 3 / 2}{1/2} = \sqrt 3$, so $1 + \tan^2 60° = 1 + 3 = 4$. And $\sec 60° = \frac{1}{1/2} = 2$, so $\sec^2 60° = 4$. They agree again, so $1$, $\tan\theta$ and $\sec\theta$ look like the sides of a right triangle for every angle.

If there is a right triangle with sides $1$, $\tan\theta$ and $\sec\theta$, it ought to be somewhere in the picture. Step through the figure to find it, along with a third triangle for the remaining two functions, the cotangent $\cot\theta = \frac{\cos\theta}{\sin\theta}$ and the cosecant $\csc\theta = \frac{1}{\sin\theta}$.

  1. The point P at angle θ on the unit circle is (cos θ, sin θ), here (0.8, 0.6). The two coordinates and the radius form a right triangle with hypotenuse 1.
  2. Draw the line that touches the circle at A = (1, 0), and extend the radius through P until it meets that line at T. The height AT is tan θ = 0.75.
  3. The distance from the center O out to T is sec θ = 1.25, measured here just below the line OT. The triangle OAT has sides 1, tan θ and sec θ.
  4. Now the line that touches the circle at B = (0, 1). The same radius, extended further, meets it at C. The length BC is cot θ ≈ 1.33.
  5. The distance from O out to C is csc θ ≈ 1.67. The triangle OBC has sides 1, cot θ and csc θ.
All six trigonometric functions as lengths, for the angle whose point on the unit circle is $(0.8, 0.6)$. Tangent and secant lie on the line touching the circle at $(1, 0)$; cotangent and cosecant lie on the line touching it at $(0, 1)$.
Monocurl source
let O = [-3.55, -1.7, 0]
let U = 3.2
let CS = 0.8
let SN = 0.6
let TH = arctan2(SN, CS)
let g = |x, y| [O[0] + x * U, O[1] + y * U, 0]
let P = g(CS, SN)
let F = g(CS, 0)
let A = g(1, 0)
let T = g(1, SN / CS)
let B = g(0, 1)
let C = g(CS / SN, 1)
let Row = |k, tex, col| Name(tex, [1.95, 1.55 - 0.62 * k, 0], 0.82, col)
let Val = |k, v, col, rel = "= "| Name(str_join([rel, to_string(v, 2)]), [3.0, 1.55 - 0.62 * k, 0], 0.82, col)
mesh base = [
    Region([O, F, P], tint(SLATE, 0.14)),
    Seg(O, g(1.42, 0), SLATE, 2),
    Seg(O, g(0, 1.12), SLATE, 2),
    ArcPath(O, U, 0, PI / 2),
    Wedge(O, 0, TH, SLATE, 0.5),
    Name("\theta", O + 1.3 * dir(rad(10)), 0.8, SLATE),
    Name("O", O + [-0.05, -0.3, 0]),
    Row(0, "\cos\theta", AZURE),
    Row(1, "\sin\theta", EMBER),
    Row(2, "\tan\theta", C_TAN),
    Row(3, "\sec\theta", C_SEC),
    Row(4, "\cot\theta", C_COT),
    Row(5, "\csc\theta", C_CSC)
]
mesh lines = []
mesh tri = [
    Seg(O, P, INK, 3.5),
    Seg(O, F, AZURE, 5),
    Seg(F, P, EMBER, 5),
    Pt(P, INK, 0.09),
    Name("P", P + [-0.45, 0.1, 0]),
    Name("1", O + 0.5 * U * dir(TH) + [-0.2, 0.25, 0])
]
mesh vals = []

slide "The point P at angle θ on the unit circle is (cos θ, sin θ), here (0.8, 0.6). The two coordinates and the radius form a right triangle with hypotenuse 1."
    vals = [Val(0, CS, AZURE), Val(1, SN, EMBER)]
    play Fade(0.6, [&vals])

slide "Draw the line that touches the circle at A = (1, 0), and extend the radius through P until it meets that line at T. The height AT is tan θ = 0.75."
    lines = [
        Seg(g(1, 0), g(1, 1.1), SLATE, 2),
        Seg(P, T, INK, 2.5),
        Seg(A, T, C_TAN, 5),
        Square90(A, [-1, 0, 0], [0, 1, 0], SLATE, 0.16),
        Pt(T, INK, 0.09),
        Name("A", A + [0.12, -0.3, 0]),
        Name("T", T + [0.3, 0.02, 0])
    ]
    vals .= Val(2, SN / CS, C_TAN)
    play Fade(0.8)

slide "The distance from the center O out to T is sec θ = 1.25, measured here just below the line OT. The triangle OAT has sides 1, tan θ and sec θ."
    lines .= Dim(O, T, -0.17, C_SEC)
    vals .= Val(3, 1 / CS, C_SEC)
    play Fade(0.8)

slide "Now the line that touches the circle at B = (0, 1). The same radius, extended further, meets it at C. The length BC is cot θ ≈ 1.33."
    lines .= [
        Seg(g(0, 1), g(1.42, 1), SLATE, 2),
        Seg(T, C, INK, 2.5),
        Seg(B, C, C_COT, 5),
        Square90(B, [1, 0, 0], [0, -1, 0], SLATE, 0.16),
        Pt(C, INK, 0.09),
        Name("B", B + [0.2, 0.27, 0]),
        Name("C", C + [0.1, 0.3, 0])
    ]
    vals .= Val(4, CS / SN, C_COT, "\approx ")
    play Fade(0.8)

slide "The distance from O out to C is csc θ ≈ 1.67. The triangle OBC has sides 1, cot θ and csc θ."
    lines .= Dim(O, C, -0.36, C_CSC)
    vals .= Val(5, 1 / SN, C_CSC, "\approx ")
    play Fade(0.8)

Uses the shared definitions for this lesson's figures.

The names come from this picture. A line that touches a circle at one point is a tangent line, and $\tan\theta$ is a length measured along the tangent line at $A$. The line through $O$ and $T$ cuts across the circle, and “secant” comes from the Latin for cutting.

Why are those lengths the quotients we defined? Let $F$ be the foot of the vertical line from $P$. The triangles $OFP$ and $OAT$ both have a right angle (at $F$ and at $A$) and share the angle $\theta$ at $O$. Triangles with the same angles are similar: one is a scaled copy of the other. The horizontal leg grows from $OF = \cos\theta$ to $OA = 1$, so the scale factor is $\frac{1}{\cos\theta}$, and the other two sides grow by the same factor:

$$ AT = \frac{\sin\theta}{\cos\theta} = \tan\theta, \qquad OT = \frac{1}{\cos\theta} = \sec\theta. $$

The third triangle, $OBC$, has its right angle at $B$. The line $BC$ is parallel to the $x$ axis, so the angle at $C$ equals the angle $\theta$ that the line $OC$ makes with the axis. It is again similar to $OFP$, this time with the side opposite $\theta$ growing from $\sin\theta$ to $OB = 1$. The scale factor is $\frac{1}{\sin\theta}$, which gives $BC = \frac{\cos\theta}{\sin\theta} = \cot\theta$ and $OC = \frac{1}{\sin\theta} = \csc\theta$.

The three right triangles of the diagram drawn side by side at the same scale. Each has the angle \theta, so they are similar, and the Pythagorean theorem applied to each one gives one identity.
The three right triangles of the diagram drawn side by side at the same scale. Each has the angle $\theta$, so they are similar, and the Pythagorean theorem applied to each one gives one identity.
Monocurl source
let U = 1.7
let Y0 = -0.9
let TH = arctan2(0.6, 0.8)
let Tri3 = |x0, hyp, names, cols, head, ident| {
    let V = [x0, Y0, 0]
    let W = [x0 + hyp * U * cos(TH), Y0, 0]
    let K = [W[0], Y0 + hyp * U * sin(TH), 0]
    let mx = 0.5 * (V[0] + W[0])
    return [
        Region([V, W, K], tint(SLATE, 0.12)),
        Wedge(V, 0, TH, SLATE, 0.42),
        Square90(W, [-1, 0, 0], [0, 1, 0], SLATE, 0.14),
        Seg(V, W, cols[0], 5),
        Seg(W, K, cols[1], 5),
        Seg(V, K, cols[2], 5),
        Name(names[0], [mx + 0.1, Y0 - 0.3, 0], 0.76, cols[0]),
        Name(names[1], [W[0] + 0.45, 0.5 * (Y0 + K[1]), 0], 0.76, cols[1]),
        Name(names[2], 0.5 * (V + K) + [-0.38, 0.3, 0], 0.76, cols[2]),
        center{[mx, 1.35, 0]} Note(head, 0.72),
        Name(ident, [mx, -1.78, 0], 0.72)
    ]
}
mesh tris = [
    Tri3(-3.45, 1, ["\cos\theta", "\sin\theta", "1"], [AZURE, EMBER, INK],
        "in the unit circle", "\cos^2\theta + \sin^2\theta = 1"),
    Tri3(-1.35, 1 / 0.8, ["1", "\tan\theta", "\sec\theta"], [INK, C_TAN, C_SEC],
        "divided by cos θ", "1 + \tan^2\theta = \sec^2\theta"),
    Tri3(1.05, 1 / 0.6, ["\cot\theta", "1", "\csc\theta"], [C_COT, INK, C_CSC],
        "divided by sin θ", "\cot^2\theta + 1 = \csc^2\theta")
]

Uses the shared definitions for this lesson's figures.

Three similar right triangles give three instances of the Pythagorean theorem. The first is the identity we started with. The second says $1 + \tan^2\theta = \sec^2\theta$, which is the pattern in the numbers $1$, $0.75$, $1.25$. The third says $\cot^2\theta + 1 = \csc^2\theta$.

The picture only covers angles between 0° and 90°, where all six lengths exist as drawn. The algebra has no such restriction. Dividing the sides of a triangle by $\cos\theta$ corresponds to dividing the equation $\sin^2\theta + \cos^2\theta = 1$ by $\cos^2\theta$, and that can be done for any angle at which $\cos\theta$ is not zero.

Outside the first quadrant the same two tangent lines still carry the four functions, as signed positions in place of lengths. The line through $O$ and $P$ consists of the points $(t\cos\theta, t\sin\theta)$, where $t$ is the position along the line measured from $O$, positive on the side of $P$. If $\cos\theta \ne 0$, this line meets the vertical line $x = 1$ where $t\cos\theta = 1$, that is at $t = \sec\theta$, and the point there is $T = (1, \tan\theta)$. So $\tan\theta$ is the height of $T$, negative when $T$ is below the axis, and $\sec\theta$ is the position of $T$ along the line, negative when $T$ and $P$ lie on opposite sides of $O$. At 200°, for example, $P$ is in the third quadrant and the line has to be extended backward through $O$ to reach $x = 1$. It arrives above the axis, at height $\tan 200° \approx 0.364$, and $\sec 200° \approx -1.064$ is negative. In the same way, if $\sin\theta \ne 0$ the line meets $y = 1$ at $C = (\cot\theta, 1)$, at position $t = \csc\theta$. The distances themselves are $OT = |\sec\theta|$ and $OC = |\csc\theta|$.

The angle sweeps between 32° and 58° and the six lengths change with it. Tangent and secant grow as the angle opens while cotangent and cosecant shrink, yet $1 + \tan^2\theta$ always equals $\sec^2\theta$ and $\cot^2\theta + 1$ always equals $\csc^2\theta$.
Monocurl source
let O = [-3.4, -1.8, 0]
let U = 2.2
let g = |x, y| [O[0] + x * U, O[1] + y * U, 0]
let Six = |deg| {
    let th = rad(deg)
    let cs = cos(th)
    let sn = sin(th)
    let P = g(cs, sn)
    let T = g(1, sn / cs)
    let C = g(cs / sn, 1)
    let far = O + (max(1 / cs, 1 / sn) * U + 0.15) * dir(th)
    return [
        Wedge(O, 0, th, SLATE, 0.45),
        Seg(O, far, INK, 2.5),
        Seg(O, g(cs, 0), AZURE, 5),
        Seg(g(cs, 0), P, EMBER, 5),
        Seg(g(1, 0), T, C_TAN, 5),
        Seg(g(0, 1), C, C_COT, 5),
        Dim(O, T, -0.16, C_SEC, 4.5),
        Dim(O, C, -0.33, C_CSC, 4.5),
        Pt(P, INK, 0.08),
        Pt(T, INK, 0.08),
        Pt(C, INK, 0.08),
        center{[3.02, 1.4, 0]} scale{1.6} color{C_TAN} Number(1 + (sn / cs) ^ 2, 2),
        center{[3.02, 0.6, 0]} scale{1.6} color{C_SEC} Number(1 / (cs * cs), 2),
        center{[3.02, -0.6, 0]} scale{1.6} color{C_COT} Number((cs / sn) ^ 2 + 1, 2),
        center{[3.02, -1.4, 0]} scale{1.6} color{C_CSC} Number(1 / (sn * sn), 2)
    ]
}
mesh base = [
    Seg(O, g(1.7, 0), SLATE, 2),
    Seg(O, g(0, 1.75), SLATE, 2),
    Seg(g(1, 0), g(1, 1.75), SLATE, 2),
    Seg(g(0, 1), g(1.7, 1), SLATE, 2),
    ArcPath(O, U, 0, PI / 2),
    Name("1 + \tan^2\theta", [1.42, 1.4, 0], 1.05, C_TAN),
    Name("\sec^2\theta", [1.42, 0.6, 0], 1.05, C_SEC),
    Name("\cot^2\theta + 1", [1.42, -0.6, 0], 1.05, C_COT),
    Name("\csc^2\theta", [1.42, -1.4, 0], 1.05, C_CSC)
]
mesh six = Six(deg: 45)

slide "sweep"
    play Wait(0.6)
    six.deg = 58
    play Lerp(2.4, [&six])
    six.deg = 32
    play Lerp(4, [&six])
    six.deg = 36.87
    play Lerp(1.6, [&six])
    play Wait(1.6)

Uses the shared definitions for this lesson's figures.

Working with the identities

Where the identities break down

The first identity never fails. The other two have conditions, and the picture shows what the conditions mean. At $\theta = 90°$ the radius points straight up, parallel to the tangent line at $A$, and never meets it. There is no point $T$, and correspondingly $\cos 90° = 0$, so $\tan 90°$ and $\sec 90°$ are undefined. Just short of 90° the point $T$ is very far up the line: $\tan 89° \approx 57.3$ and $\tan 89.9° \approx 573$. Meanwhile $\sin^2 90° + \cos^2 90° = 1 + 0 = 1$ holds without complaint. Dividing by $\cos^2\theta$ produced a new identity but lost the angles where $\cos\theta = 0$.

The other limit concerns square roots.

Pause and try

A student reasons: “$\sin^2\theta + \cos^2\theta = 1$, so taking square roots, $\sin\theta + \cos\theta = 1$.” Test the conclusion at 37° using the numbers from the start of the lesson. Then find every angle with $0° \le \theta < 360°$ for which $\sin\theta + \cos\theta = 1$ is true. (Square both sides and use the identity.)

Show answerHide answer

At 37° the sum is $0.6018 + 0.7986 = 1.4004$, not 1. To find where it does hold, square: $(\sin\theta + \cos\theta)^2 = \sin^2\theta + 2\sin\theta\cos\theta + \cos^2\theta = 1 + 2\sin\theta\cos\theta$. If $\sin\theta + \cos\theta = 1$ then this equals 1, so $\sin\theta\cos\theta = 0$, which means $\sin\theta = 0$ or $\cos\theta = 0$. The candidates are 0°, 90°, 180° and 270°. Squaring can create false solutions, so test each: at 0° the sum is $0 + 1 = 1$ and at 90° it is $1 + 0 = 1$, but at 180° and 270° it is $-1$. So the equation holds only at 0° and 90°.

Looking back

The opening puzzle was two unrelated-looking decimals whose squares add to 1. The difficulty was only in seeing where to look: once sine and cosine are read as the coordinates of a point on a circle of radius 1, the relation between them is the Pythagorean theorem and nothing more. The step that needed care was the passage beyond the first quadrant, where the triangle’s legs are $|\cos\theta|$ and $|\sin\theta|$ and the squares hide the signs.

The reusable idea is that one geometric fact, seen in similar triangles of different sizes, appears as several formulas that look unrelated on the page. When you meet a new trigonometric identity, ask which triangle it is the Pythagorean theorem for, or which known identity it is after a division. The next lesson, on the angle addition formulas, takes up a question the unit circle does not answer so quickly: what are the sine and cosine of a sum of two angles?

Check yourself

Suppose $\sin\theta = 0.6$ and the point at angle $\theta$ lies in the second quadrant. What is $\cos\theta$?

Problems

Problem 1

Given $\cos\theta = 0.28$ with $\theta$ in the fourth quadrant, find $\sin\theta$.

Show solutionHide solution

$\sin^2\theta = 1 - 0.28^2 = 1 - 0.0784 = 0.9216$, and $0.9216 = 0.96^2$, so $\sin\theta = \pm 0.96$. In the fourth quadrant the point is below the $x$ axis, so $\sin\theta = -0.96$. Check: $0.0784 + 0.9216 = 1$.

Problem 2

Given $\sin\theta = -\frac{5}{13}$ with $\theta$ in the third quadrant, find $\cos\theta$, $\tan\theta$ and $\sec\theta$.

Show solutionHide solution

$\cos^2\theta = 1 - \frac{25}{169} = \frac{144}{169}$, so $\cos\theta = \pm\frac{12}{13}$, and the third quadrant makes it negative: $\cos\theta = -\frac{12}{13}$. Then $\tan\theta = \frac{-5/13}{-12/13} = \frac{5}{12}$ and $\sec\theta = \frac{1}{\cos\theta} = -\frac{13}{12}$. Check with the second identity: $1 + \frac{25}{144} = \frac{169}{144} = \left(-\frac{13}{12}\right)^2$.

Problem 3

Given $\sec\theta = 3$ with $\theta$ in the first quadrant, find $\tan\theta$ and $\sin\theta$.

Show solutionHide solution

$\tan^2\theta = \sec^2\theta - 1 = 9 - 1 = 8$, and the tangent is positive in the first quadrant, so $\tan\theta = \sqrt 8 = 2\sqrt 2 \approx 2.828$. Since $\cos\theta = \frac{1}{\sec\theta} = \frac{1}{3}$, we get $\sin\theta = \tan\theta\cos\theta = \frac{2\sqrt 2}{3} \approx 0.943$. Check: $\sin^2\theta + \cos^2\theta = \frac{8}{9} + \frac{1}{9} = 1$.

Problem 4

Show that $(\sin\theta + \cos\theta)^2 + (\sin\theta - \cos\theta)^2 = 2$ for every $\theta$.

Show solutionHide solution

Expand both squares:

$$ (\sin\theta + \cos\theta)^2 = \sin^2\theta + 2\sin\theta\cos\theta + \cos^2\theta, \qquad (\sin\theta - \cos\theta)^2 = \sin^2\theta - 2\sin\theta\cos\theta + \cos^2\theta. $$

Adding, the middle terms cancel and we are left with $2\sin^2\theta + 2\cos^2\theta = 2(\sin^2\theta + \cos^2\theta) = 2$.

Problem 5

Show that $\sin^4\theta - \cos^4\theta = 1 - 2\cos^2\theta$ for every $\theta$.

Show solutionHide solution

The left side is a difference of two squares, $(\sin^2\theta)^2 - (\cos^2\theta)^2$, so it factors:

$$ \sin^4\theta - \cos^4\theta = (\sin^2\theta - \cos^2\theta)(\sin^2\theta + \cos^2\theta) = \sin^2\theta - \cos^2\theta. $$

Now replace $\sin^2\theta$ by $1 - \cos^2\theta$: the result is $1 - \cos^2\theta - \cos^2\theta = 1 - 2\cos^2\theta$.

Problem 6

Show that $\dfrac{1}{1 - \sin\theta} + \dfrac{1}{1 + \sin\theta} = 2\sec^2\theta$ for every $\theta$ with $\cos\theta \ne 0$.

Show solutionHide solution

First note that $\cos\theta \ne 0$ guarantees $\sin\theta \ne \pm 1$ (if $\sin\theta = \pm 1$ the identity would force $\cos^2\theta = 0$), so neither denominator is zero. Use the common denominator $(1 - \sin\theta)(1 + \sin\theta) = 1 - \sin^2\theta = \cos^2\theta$:

$$ \frac{1}{1 - \sin\theta} + \frac{1}{1 + \sin\theta} = \frac{(1 + \sin\theta) + (1 - \sin\theta)}{\cos^2\theta} = \frac{2}{\cos^2\theta} = 2\sec^2\theta. $$

Problem 7

(a) A point moves so that its coordinates at each moment are $x = 3\cos\theta$ and $y = 3\sin\theta$ for some angle $\theta$. Show that it stays on the circle $x^2 + y^2 = 9$. (b) Another point has $x = 5\cos\theta$ and $y = 2\sin\theta$. Find an equation in $x$ and $y$ alone that it always satisfies, and say where the curve crosses the axes.

Show solutionHide solution

(a) $x^2 + y^2 = 9\cos^2\theta + 9\sin^2\theta = 9(\cos^2\theta + \sin^2\theta) = 9$. So the point is always at distance 3 from the origin.

(b) Here squaring and adding directly gives $25\cos^2\theta + 4\sin^2\theta$, which does not simplify, so isolate the cosine and sine first: $\cos\theta = \frac{x}{5}$ and $\sin\theta = \frac{y}{2}$. The identity then says

$$ \frac{x^2}{25} + \frac{y^2}{4} = 1. $$

On the $x$ axis $y = 0$, so $x^2 = 25$ and the curve crosses at $(\pm 5, 0)$. On the $y$ axis $x = 0$, so $y^2 = 4$ and it crosses at $(0, \pm 2)$. The curve is a circle stretched by 5 horizontally and by 2 vertically, an ellipse.

Problem 8

What is the largest value that $\sin\theta + \cos\theta$ can take, and at which angle between 0° and 360° does it take it? (Use the result of the fourth problem.)

Show solutionHide solution

By the fourth problem, $(\sin\theta + \cos\theta)^2 = 2 - (\sin\theta - \cos\theta)^2$. A square is never negative, so $(\sin\theta + \cos\theta)^2 \le 2$, and therefore $\sin\theta + \cos\theta \le \sqrt 2 \approx 1.414$. Equality requires $(\sin\theta - \cos\theta)^2 = 0$, that is, $\sin\theta = \cos\theta$. Then the identity gives $2\sin^2\theta = 1$, so $\sin\theta = \cos\theta = \pm\frac{\sqrt 2}{2}$. The positive choice is the point at 45°, where the sum is $\frac{\sqrt 2}{2} + \frac{\sqrt 2}{2} = \sqrt 2$. The negative choice, at 225°, gives the smallest value, $-\sqrt 2$. So the maximum is $\sqrt 2$, attained at $\theta = 45°$. This agrees with the lesson’s observation that the sum is about $1.40$ at 37°: it exceeds 1 throughout the first quadrant and peaks at 45°.

Shared definitions used by this lesson's figures
# house kit: prepended to every essay figure after the std imports

# palette. AZURE and EMBER are the two actors, LEAF marks an answer, ROSE a problem
let PAPER = [1, 1, 1, 1]
let INK = [0.08, 0.09, 0.11, 1]
let SLATE = [0.40, 0.44, 0.50, 1]
let MIST = [0.85, 0.86, 0.88, 1]
let AZURE = [0.13, 0.42, 0.68, 1]
let EMBER = [0.89, 0.42, 0.12, 1]
let LEAF = [0.13, 0.55, 0.36, 1]
let ROSE = [0.78, 0.22, 0.24, 1]
let PLUM = [0.47, 0.30, 0.66, 1]
let GOLD = [0.85, 0.62, 0.08, 1]

background = PAPER

# an opaque pastel of col; use for fills so overlaps do not darken
let tint = |col, amount = 0.18| [
    1 - (1 - col[0]) * amount,
    1 - (1 - col[1]) * amount,
    1 - (1 - col[2]) * amount,
    1
]

# text: Cap for labels, Note for quiet labels, Math for typeset maths
let Cap = |txt, size = 0.75, col = INK| color{col} Text(txt, size, "Charter")
let Note = |txt, size = 0.65| color{SLATE} Text(txt, size, "Charter")
let Math = |tex, size = 0.9, col = INK| color{col} Tex(tex, size)

# a paper rectangle to sit behind text that crosses lines
let Plate = |pos, size| center{pos} fill{PAPER} stroke{alpha{0} PAPER, 0} Rect(size)

# shapes with fill and stroke both set, so no stray black appears
let Pt = |pos, col = INK, r = 0.075| center{pos} fill{col} stroke{col, 1} Circle(r, 48)
let Ring = |pos, col = INK, r = 0.1, w = 3| center{pos} fill{PAPER} stroke{col, w} Circle(r, 48)
let Seg = |a, b, col = INK, w = 3| stroke{col, w} Line(a, b)
let Path = |pts, col = INK, w = 3| stroke{col, w} Polyline(pts)
let Region = |pts, col| fill{col} stroke{alpha{0} col, 0} Polygon(pts)
let Outline = |pts, col = INK, w = 3| fill{alpha{0} PAPER} stroke{col, w} Polygon(pts)
let Shape = |pts, col, amount = 0.18, w = 3| fill{tint(col, amount)} stroke{col, w} Polygon(pts)
let Disc = |pos, r, col, amount = 0.18, w = 3| center{pos} fill{tint(col, amount)} stroke{col, w} Circle(r, 96)
let Box = |pos, size, col, amount = 0.18, w = 3| center{pos} fill{tint(col, amount)} stroke{col, w} Rect(size)
# a line from a to b ending in a small solid arrowhead
let Tip = |a, b, col = INK, w = 3, head = 0.17| {
    let d = normalize([b[0] - a[0], b[1] - a[1], 0])
    let n = [-d[1], d[0], 0]
    let base = [b[0] - d[0] * head, b[1] - d[1] * head, 0]
    return [
        stroke{col, w} Line(a, base),
        fill{col} stroke{col, 1} Polygon([
            b,
            [base[0] + n[0] * head * 0.42, base[1] + n[1] * head * 0.42, 0],
            [base[0] - n[0] * head * 0.42, base[1] - n[1] * head * 0.42, 0]
        ])
    ]
}

# plots. a frame is [x0, x1, y0, y1, centre, width, height]: a data window and the scene box it fills
let Frame = |x0, x1, y0, y1, c = [0, 0, 0], w = 6.4, h = 3.6| [x0, x1, y0, y1, c, w, h]
let fx = |fr, x| fr[4][0] + (x - (fr[0] + fr[1]) / 2) * fr[5] / (fr[1] - fr[0])
let fy = |fr, y| fr[4][1] + (y - (fr[2] + fr[3]) / 2) * fr[6] / (fr[3] - fr[2])
let at = |fr, x, y| [fx(fr, x), fy(fr, y), 0]

# axes through the data origin (or the nearest edge of the window), with optional names
let Axes = |fr, x_name = "", y_name = "", col = SLATE| {
    let ox = clamp(fr[0], 0, fr[1])
    let oy = clamp(fr[2], 0, fr[3])
    var parts = [
        Tip(at(fr, fr[0], oy), [fx(fr, fr[1]) + 0.25, fy(fr, oy), 0], col, 2.5, 0.15),
        Tip(at(fr, ox, fr[2]), [fx(fr, ox), fy(fr, fr[3]) + 0.25, 0], col, 2.5, 0.15)
    ]
    if (x_name != "") {
        parts .= center{[fx(fr, fr[1]) + 0.5, fy(fr, oy), 0]} Math(x_name, 0.8, col)
    }
    if (y_name != "") {
        parts .= center{[fx(fr, ox), fy(fr, fr[3]) + 0.5, 0]} Math(y_name, 0.8, col)
    }
    return parts
}

# tick marks with numbers at the listed data values
let XTicks = |fr, xs, col = SLATE, places = 0| block {
    let oy = fy(fr, clamp(fr[2], 0, fr[3]))
    for (x in xs) {
        . Seg([fx(fr, x), oy - 0.07, 0], [fx(fr, x), oy + 0.07, 0], col, 2)
        . center{[fx(fr, x), oy - 0.33, 0]} Math(to_string(x, places), 0.72, col)
    }
}
let YTicks = |fr, ys, col = SLATE, places = 0| block {
    let ox = fx(fr, clamp(fr[0], 0, fr[1]))
    for (y in ys) {
        . Seg([ox - 0.07, fy(fr, y), 0], [ox + 0.07, fy(fr, y), 0], col, 2)
        . center{[ox - 0.36, fy(fr, y), 0]} Math(to_string(y, places), 0.72, col)
    }
}

# faint grid lines at the listed data values
let GridLines = |fr, xs, ys, col = MIST| block {
    for (x in xs) {
        . Seg(at(fr, x, fr[2]), at(fr, x, fr[3]), col, 1.5)
    }
    for (y in ys) {
        . Seg(at(fr, fr[0], y), at(fr, fr[1], y), col, 1.5)
    }
}

# the graph of f over [a, b], drawn in the frame. values are clamped to the window
let Graph = |fr, f, a, b, col = AZURE, w = 4, n = 160|
    stroke{col, w} Polyline(map(sample(a, b, n), |x| at(fr, x, clamp(fr[2], f(x), fr[3]))))

# the region between the graph of f and the x axis over [a, b]
let AreaUnder = |fr, f, a, b, col = AZURE, amount = 0.2, n = 80| {
    var pts = [at(fr, a, 0)]
    for (x in sample(a, b, n)) {
        pts .= at(fr, x, clamp(fr[2], f(x), fr[3]))
    }
    pts .= at(fr, b, 0)
    return fill{tint(col, amount)} stroke{alpha{0} col, 0} Polygon(pts)
}

let dir = |th| [cos(th), sin(th), 0]
let rad = |d| d * PI / 180
let pol = |o, r, t| [o[0] + r * cos(t), o[1] + r * sin(t), 0]
let ArcPath = |o, r, a, b, col = SLATE, w = 2.5| {
    let n = to_int(max(2, min(120, ceil(abs(b - a) * r / 0.05))))
    return stroke{col, w} Polyline(map(sample(a, b, n), |t| pol(o, r, t)))
}
let Wedge = |p, t0, sw, col, r = 0.5| fill{tint(col, 0.5)} stroke{col, 2.5} Polygon(block {
    . p
    for (t in sample(t0, t0 + sw, to_int(max(8, ceil(abs(sw) * 14))))) {
        . p + r * dir(t)
    }
})
let Name = |txt, pos, size = 0.8, col = INK| center{pos} Math(txt, size, col)
let Square90 = |p, s, t, col = INK, k = 0.2| stroke{col, 2.5} Polyline([p + k * s, p + k * s + k * t, p + k * t])
let CircleAxes = |o, r| [
    Seg([o[0] - r - 0.3, o[1], 0], [o[0] + r + 0.3, o[1], 0], SLATE, 2),
    Seg([o[0], o[1] - r - 0.2, 0], [o[0], o[1] + r + 0.2, 0], SLATE, 2),
    Name("1", [o[0] + r + 0.17, o[1] - 0.27, 0], 0.72, SLATE),
    Name("-1", [o[0] - r - 0.2, o[1] - 0.27, 0], 0.72, SLATE),
    Name("1", [o[0] - 0.2, o[1] + r + 0.17, 0], 0.72, SLATE)
]
let Legs = |o, r, th, w = 5| {
    let p = pol(o, r, th)
    let f = [p[0], o[1], 0]
    return [Seg(o, p, INK, 3), Seg(o, f, AZURE, w), Seg(f, p, EMBER, w), Pt(p, INK, 0.09)]
}
let DegTicks = |fr, ds, col = SLATE| block {
    for (d in ds) {
        . center{[fx(fr, d), fy(fr, fr[2]) - 0.3, 0]} Math(str_join([to_string(d), "^\circ"]), 0.72, col)
    }
}
# a measuring line from a to b, drawn a distance off to the side, with end ticks
let Dim = |a, b, off, col, w = 4.5| {
    let d = normalize([b[0] - a[0], b[1] - a[1], 0])
    let n = [-d[1], d[0], 0]
    return [
        Seg(a + off * n, b + off * n, col, w),
        Seg(a + (off - 0.08) * n, a + (off + 0.08) * n, col, 2.5),
        Seg(b + (off - 0.08) * n, b + (off + 0.08) * n, col, 2.5)
    ]
}
# colours of the six functions, fixed through the lesson
let C_TAN = PLUM
let C_SEC = GOLD
let C_COT = LEAF
let C_CSC = ROSE