summaryrefslogtreecommitdiff
path: root/site/content/math/atan2.typ
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2026-06-14 19:11:45 +0200
committerPaweł Redman <pawel.redman@gmail.com>2026-06-14 19:11:45 +0200
commitcbd693043b83c1d997c52f6c3fca83c6a7a37e28 (patch)
tree2dc74ba212b077857f2da37fe99960631690ffd6 /site/content/math/atan2.typ
parent0c1c00b3fc2a880c18f6f98d87372dc91451b0b0 (diff)
Migrate math notes to Typst.
Co-authored-by: Cursor <cursoragent@cursor.com>
Diffstat (limited to 'site/content/math/atan2.typ')
-rw-r--r--site/content/math/atan2.typ107
1 files changed, 107 insertions, 0 deletions
diff --git a/site/content/math/atan2.typ b/site/content/math/atan2.typ
new file mode 100644
index 0000000..4e78e56
--- /dev/null
+++ b/site/content/math/atan2.typ
@@ -0,0 +1,107 @@
+#import "/common.typ": post, static, img
+
+#show: post.with(
+ title: "atan2",
+ date: datetime(year: 2018, month: 5, day: 13),
+)
+
+$
+ op("atan2"): RR^2 without (0, 0) -> (-pi, pi]
+$
+
+$
+ op("atan2")(y, x) = cases(
+ +pi / 2, (x = 0) and (y > 0),
+ -pi / 2, (x = 0) and (y < 0),
+ tan^(-1)(y / x), x > 0,
+ tan^(-1)(y / x) + pi, (x < 0) and (y >= 0),
+ tan^(-1)(y / x) - pi, (x < 0) and (y < 0),
+ )
+$
+
+where $tan^(-1) x$ is the principal value of the arctangent, ie. the one in the interval $(-pi, pi]$.
+
+= Properties
+
+#figure(
+ img(static("math/atan2-plot.png")),
+ caption: [A 3D plot of atan2(y, x).],
+)
+
+- $op("atan2")(-y, x) = -op("atan2")(y, x)$
+- $op("atan2")(c y, c x) = op("atan2")(y, x)$ for any $c > 0$.
+- Discontinuous along $(x < 0) and (y = 0)$: For any $x < 0$:
+ - $lim_(y -> 0^-) op("atan2")(y, x) = -pi$
+ - $lim_(y -> 0^+) op("atan2")(y, x) = pi$
+
+== Partial derivatives
+
+The partial derivatives, just like the function itself, are defined everywhere except at the origin. Furthermore, unlike the function, they're not discontinuous along $y = 0$ (except at the origin).
+
+$
+ & (partial)/(partial y) = x / (x^2 + y^2) \
+ & (partial)/(partial x) = -y / (x^2 + y^2)
+$
+
+Interesingly, the function $tan^(-1)(y / x)$ has the same partial derivatives.
+
+= Systems of equations involving the cosine and the sine of an unknown
+
+#figure(
+ img(static("math/polar-coords.png")),
+ caption: [A geometric intepretation: θ = atan2(y,x).],
+)
+
+Let $theta, x, y in RR$. Consider the following system of equations:
+
+$
+ cases(
+ sin theta = y,
+ cos theta = x,
+ )
+$
+
+If $x^2 + y^2 = 1$, this system has a unique (up to a multiple of $2 pi$) solution:
+
+$
+ theta = op("atan2")(y, x) + 2 pi k
+$
+
+for any $k in ZZ$. For simplicity k is often set to zero.
+
+Because $op("atan2")(sin theta, cos theta) = theta$ (up to a multiple of $2 pi$), atan2 can be thought of as the "inverse" of the cosine and sine of the same argument.
+
+= C's atan2
+
+The definition at the beginning of this article is suitable for mathematical analysis. However, a more intricate definition is needed for floating-point computation, one that takes signed zeros and infinites into account. The following appears in the C standard:
+
+$
+ op("atan2")(y, x) = cases(
+ op("NaN") & "if" space (y = op("NaN")) or (x = op("NaN")),
+ plus.minus pi & "if" space (x < +0) and (y = plus.minus 0),
+ plus.minus 0 & "if" space (x > +0) and (y = plus.minus 0),
+ -pi / 2 & "if" space (x = plus.minus 0) and (y < -0),
+ pi / 2 & "if" space (x = plus.minus 0) and (y > +0),
+ plus.minus pi & "if" space (x = -0) and (y = plus.minus 0),
+ plus.minus 0 & "if" space (x = +0) and (y = plus.minus 0),
+ pi & "if" space (x = -infinity) and (y > +0) and (y < +infinity),
+ -pi & "if" space (x = -infinity) and (y < -0) and (y > -infinity),
+ +0 & "if" space (x = +infinity) and (y > +0) and (y < +infinity),
+ -0 & "if" space (x = +infinity) and (y < -0) and (y > -infinity),
+ plus.minus pi / 2 & "if" space (x > -infinity) and (x < +infinity) and (y = plus.minus infinity),
+ plus.minus (3 pi) / 4 & "if" space (x = -infinity) and (y = plus.minus infinity),
+ plus.minus pi / 4 & "if" space (x = +infinity) and (y = plus.minus infinity),
+ tan^(-1)(y / x) & "if" space x > +0,
+ tan^(-1)(y / x) + pi & "if" space (x < -0) and (y >= 0),
+ tan^(-1)(y / x) - pi & "if" space (x < -0) and (y < -0),
+ )
+$
+
+In this definition $op("atan2")(0, 0)$ is *not* undefined.
+
+= See also
+
+- #link("https://linux.die.net/man/3/atan2")[atan2(3)]
+- #link("https://en.wikipedia.org/wiki/Atan2")[Atan2]
+- #link("https://en.wikipedia.org/wiki/Argument_(complex_analysis)")[Argument (complex analysis)]
+- #link("https://en.wikipedia.org/wiki/Inverse_trigonometric_functions")[Inverse trigonometric functions]