Skip to content

Instantly share code, notes, and snippets.

@andreasgrv
Last active October 14, 2024 14:58
Show Gist options
  • Select an option

  • Save andreasgrv/13459ea0c7f97f8ebc3f36fbc060243d to your computer and use it in GitHub Desktop.

Select an option

Save andreasgrv/13459ea0c7f97f8ebc3f36fbc060243d to your computer and use it in GitHub Desktop.
What do we get if we look at a cube from the direction of one of the vertices?
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "6e803f0a-2d12-4e12-b572-fd6a03c33f49",
"metadata": {},
"source": [
"# Viewing a cube from the direction of a vertex\n",
"\n",
"The code below [answers this question](https://x.com/adad8m/status/1845809571321061610).\n",
"\n",
"\n",
"## The case of the 3d cube\n",
"\n",
"What happens if we view a 3d cube from the direction of one of the vertices? What do we see?\n",
"\n",
"\n",
"### Answer: Cancel the \"viewing\" direction\n",
"The idea is that we can simply \"cancel out\" the direction we are viewing the cube from.\n",
"I.e. we project the vertices of the cube from d dimensions to (d-1) dimensions along the viewing direction.\n",
"This means we get a projection of the cube into one dimension lower, i.e. we get the hexagon below.\n",
"The internal point is the overlapping projection of the $(1,1,1)$ and $(-1,-1,-1)$ vertices (which get mapped to 0 - seen in red)."
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "55170e3b-bafc-4aa8-84d6-cd351b90655e",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1ef9bb81b72643df9001cac8c86053ef",
"version_major": 2,
"version_minor": 0
},
"image/png": "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",
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,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' width=640.0/>\n",
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib widget\n",
"\n",
"import itertools\n",
"import numpy as np\n",
"import scipy as sp\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"def cube_vertices(d):\n",
" return np.array(list(itertools.product([-1, 1], repeat=d)))\n",
"\n",
"\n",
"D = 3\n",
"\n",
"# Cube vertices (cube centered at origin)\n",
"cc = cube_vertices(D)\n",
"\n",
"# If we look from the all ones direction\n",
"vv = np.ones(D).reshape(1, -1)\n",
"\n",
"# We only retain cube information\n",
"# in the directions perpendicular to the viewing direction\n",
"W = sp.linalg.null_space(vv)\n",
"\n",
"# Coordinates of cube vertices as viewed from vv\n",
"projection = cc.dot(W)\n",
"\n",
"colors = ['red' if np.allclose(pp, np.zeros(D-1)) else 'blue' for pp in projection]\n",
"\n",
"# Plot vertices\n",
"ax = plt.figure().add_subplot()\n",
"ax.scatter(*projection.T, color=colors)\n",
"ax.set_aspect('equal')\n",
"plt.axis('off')\n",
"plt.suptitle('Projection of 3d cube along $\\mathbf{v} = (1,1,1)$', fontsize=20)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "a8b4e3b4-78ce-4437-b3fe-4fae61f6f6f3",
"metadata": {},
"source": [
"## The case of the 4d-cube\n",
"\n",
"In the 4d case, instead of a hexagon we get a [Rhombic Dodecahedron](https://en.wikipedia.org/wiki/Rhombic_dodecahedron#Related_polytope)."
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "1220092e-d124-4c3a-a1ff-cc348b9f88ee",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "46b12a3b6a5c44cdb50cba0863b62e8a",
"version_major": 2,
"version_minor": 0
},
"image/png": "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",
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,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' width=640.0/>\n",
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"D = 4\n",
"\n",
"# Cube vertices (cube centered at origin)\n",
"cc = cube_vertices(D)\n",
"\n",
"# If we look from the all ones direction\n",
"vv = np.ones(D).reshape(1, -1)\n",
"\n",
"# the direction we look from is in the null space\n",
"W = sp.linalg.null_space(vv)\n",
"\n",
"projection = cc.dot(W)\n",
"\n",
"colors = ['red' if np.allclose(pp, np.zeros(D-1)) else 'blue' for pp in projection]\n",
"\n",
"# The plot below can be rotated when run in jupyter lab (i.e. 3dplot)\n",
"ax = plt.figure().add_subplot(projection='3d')\n",
"ax.scatter(*projection.T, color=colors)\n",
"ax.set_aspect('equal')\n",
"plt.axis('off')\n",
"plt.suptitle('Projection of 4d cube along $\\mathbf{v} = (1,1,1,1)$', fontsize=20)\n",
"plt.tight_layout()\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment