diff --git a/src/game/astronomy/apparent-size.cpp b/src/game/astronomy/apparent-size.cpp
new file mode 100644
index 0000000..f8d2db7
--- /dev/null
+++ b/src/game/astronomy/apparent-size.cpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2020 Christopher J. Howard
+ *
+ * This file is part of Antkeeper source code.
+ *
+ * Antkeeper source code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Antkeeper source code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Antkeeper source code. If not, see .
+ */
+
+#include "apparent-size.hpp"
+#include
+
+namespace ast
+{
+
+double angular_radius(double radius, double distance)
+{
+ return std::asin(radius / distance);
+}
+
+} // namespace ast
diff --git a/src/game/astronomy/apparent-size.hpp b/src/game/astronomy/apparent-size.hpp
new file mode 100644
index 0000000..d3ec3d0
--- /dev/null
+++ b/src/game/astronomy/apparent-size.hpp
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2020 Christopher J. Howard
+ *
+ * This file is part of Antkeeper source code.
+ *
+ * Antkeeper source code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Antkeeper source code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Antkeeper source code. If not, see .
+ */
+
+#ifndef ANTKEEPER_APPARENT_SIZE_HPP
+#define ANTKEEPER_APPARENT_SIZE_HPP
+
+namespace ast
+{
+
+/**
+ * Calculates the angular radius of a celestial object.
+ *
+ * @param radius Radius of the celestial object.
+ * @param distance Distance to the celestial object.
+ * @return Angular radius, in radians.
+ */
+double angular_radius(double radius, double distance);
+
+} // namespace ast
+
+#endif // ANTKEEPER_APPARENT_SIZE_HPP