{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Random IVM Tetrahedron Volumes\n", "\n", "\n", "
\n", "\"Quadray\n", "
\n", "
\n", "The four quadrays (in blue)\n", "
\n", "
\n", "\n", "According to a proof by Dr. Robert Gray, at one time archived on a Synergetics listserv, any tetrahedron of IVM vertexes (assuming non-coplanar) will have a whole number volume. \n", "\n", "In this Notebook, we randomly generate IVM tetrahedrons and compute their volumes. Within the error of floating point, we demonstrate this result." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from tetravolume import Qvector" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from itertools import permutations" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(0, 1, 1, 2),\n", " (1, 2, 0, 1),\n", " (0, 2, 1, 1),\n", " (0, 1, 2, 1),\n", " (2, 1, 0, 1),\n", " (1, 1, 2, 0),\n", " (1, 2, 1, 0),\n", " (2, 1, 1, 0),\n", " (1, 0, 2, 1),\n", " (2, 0, 1, 1),\n", " (1, 0, 1, 2),\n", " (1, 1, 0, 2)]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "combos = set()\n", "for combo in permutations((0,1,1,2)):\n", " combos.add(combo)\n", "combos = list(combos)\n", "combos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One frequency:\n", "\n", "![\"freq1\"](freq1.png)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ivm_vector(a=365, b=159, c=336, d=0)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import random\n", "\n", "def any_ball():\n", " # random coefficients for arbitrary choice of vectors...\n", " coeffs = [random.randint(0, 300) for _ in range(12)]\n", " vectors = ([coeffs[i] * Qvector(combos[i]) for i in range(12)])\n", " vector_sum = Qvector((0,0,0,0))\n", " for v in vectors:\n", " vector_sum = vector_sum + v\n", " return vector_sum\n", "\n", "any_ball()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "A,B,C,D = any_ball(), any_ball(), any_ball(), any_ball()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "lengths = [(\"AB\", (A-B).length()),\n", " (\"AC\", (A-C).length()),\n", " (\"AD\", (A-D).length()),\n", " (\"BC\", (B-C).length()),\n", " (\"CD\", (C-D).length()),\n", " (\"DB\", (D-B).length())]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('AB', 373.0321701944753),\n", " ('AC', 333.39616074574104),\n", " ('AD', 476.14808620848197),\n", " ('BC', 534.9635501601955),\n", " ('CD', 544.9155897935019),\n", " ('DB', 280.3194606159194)]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lengths" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from tetravolume import Tetrahedron" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "t = Tetrahedron(*[lengths[i][1] for i in range(6)])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "44190451.00000004" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.ivm_volume()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "14170140.999999965" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def demo():\n", " A,B,C,D = any_ball(), any_ball(), any_ball(), any_ball()\n", " lengths = [(\"AB\", (A-B).length()),\n", " (\"AC\", (A-C).length()),\n", " (\"AD\", (A-D).length()),\n", " (\"BC\", (B-C).length()),\n", " (\"CD\", (C-D).length()),\n", " (\"DB\", (D-B).length())]\n", " t = Tetrahedron(*[lengths[i][1] for i in range(6)])\n", " return t.ivm_volume()\n", "\n", "demo()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "41663156.754389174" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.xyz_volume()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"v8vjw3gCBgs\") # https://youtu.be/v8vjw3gCBgs" ] } ], "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.11.3" } }, "nbformat": 4, "nbformat_minor": 4 }