{
"cells": [
{
"cell_type": "markdown",
"id": "856a821b-5d9e-41f9-99f1-cf655f621cc7",
"metadata": {},
"source": [
"# Elite Academy\n",
"\n",
"\n",
"\n",
"
\n",
"\n",
"Long Beach: adjacent the [Queen Mary](https://flic.kr/p/cGoQ29) (former [Spruce Goose](https://www.drivearchive.co.uk/xplanes/goose.htm) garage)\n",
"\n",
"Another take on linear algebra involves importing from what we call Martian Math. A goal is to connect both to science fiction and to the notion of something alien, as in unfamiliar. The coordinate system and vector apparatus shared below is anything but mainstream.\n",
"\n",
"\n",
"\n",
"We call it Quadrays. The picture below is a screen shot, so clicking on the links only takes you to the archive for the picture.\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "192c98ac-db21-49a1-af47-b8a904ad4cd0",
"metadata": {},
"outputs": [],
"source": [
"import qrays\n",
"from qrays import Qvector as Martian\n",
"from qrays import Vector"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "65bd5b21-21f3-4c1a-9fc8-2a666a0aa2f7",
"metadata": {},
"outputs": [],
"source": [
"from itertools import permutations as perm"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "78fa3ba1-f700-423d-b756-e8d5c574fcf8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{(0, 0, 0, 1), (0, 0, 1, 0), (0, 1, 0, 0), (1, 0, 0, 0)}"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dir_4 = {spoke for spoke in perm((0,0,0,1))} # dupeless\n",
"dir_4"
]
},
{
"cell_type": "markdown",
"id": "890a00fb-7102-45a8-96a4-c05581869105",
"metadata": {},
"source": [
"\n",
"\n",
"Four rays splay from the origin to carve space into four quadrants. Linear combinations of vectors in these four directions span all of space. \n",
"\n",
"These four elementary rays need not be unit length. Rather, the bounding tetrahedron has unit edges and unit volume.\n",
"\n",
"In a lowest terms representation of any point, at least one coordinate is always zero, the ray not directly bounding the quadrant wherein the point resides. The remaining three vectors add together positively to reach the point i.e. quadray coordinates in lowest terms are always non-negative."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "d328d0e4-1997-4840-a82b-b559f1463eec",
"metadata": {},
"outputs": [],
"source": [
"a,b,c,d = [Martian(coords) for coords in dir_4]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "33e17c8e-29d6-43fd-8b9d-8364bdd1d34f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"ivm_vector(a=0, b=0, c=0, d=0)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a + b + c + d"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "df1a9b7f-9a28-4c6a-82c3-956369e1d10e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6123724356957945"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.length()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "0d714ab9-9286-4bcb-a907-d045e925f750",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(a - b).length()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "ee3cad63-fadd-4239-96b7-abb68859727b",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 109.471220634491$"
],
"text/plain": [
"109.471220634491"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.angle(b)"
]
},
{
"cell_type": "markdown",
"id": "d72c6456-9f50-4379-85f0-3f87b16c4b2a",
"metadata": {},
"source": [
"## Converting Between Martian and XYZ Coordinates"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "c8029c4a-57e7-4d90-acbb-ebf39ad85ec4",
"metadata": {},
"outputs": [],
"source": [
"import sympy as sp\n",
"root2 = sp.sqrt(2)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "230de934-ffa7-485c-9840-05ed1fb1373f",
"metadata": {},
"outputs": [],
"source": [
"import qrays\n",
"import importlib\n",
"importlib.reload(qrays)\n",
"from qrays import Vector, Qvector as Martian"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "8c2d2029-acb7-4294-956c-f8d6252ef0ee",
"metadata": {},
"outputs": [],
"source": [
"def to_xyz(a, b, c, d):\n",
" k = root2/4\n",
" x = k * (a - b - c + d)\n",
" y = k * (a - b + c - d)\n",
" z = k * (a + b - c - d)\n",
" return x,y,z"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "fe31ddf5-6993-4523-ba95-c27248f15c4c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(sqrt(2)/4, sqrt(2)/4, sqrt(2)/4)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x,y,z = to_xyz(1,0,0,0) # convert from Martian\n",
"(x,y,z)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "bac16c38-c6d1-4683-bad5-da803ac63a70",
"metadata": {},
"outputs": [],
"source": [
"def to_qray(x, y, z):\n",
" \"\"\"return (a, b, c, d) quadray based on current (x, y, z)\"\"\"\n",
" k = root2\n",
" \n",
" x_ge_0 = 1 if x >=0 else 0\n",
" y_ge_0 = 1 if y >=0 else 0\n",
" z_ge_0 = 1 if z >=0 else 0\n",
" x_lt_0 = 1 if x < 0 else 0\n",
" y_lt_0 = 1 if y < 0 else 0\n",
" z_lt_0 = 1 if z < 0 else 0\n",
" \n",
" a = k * (x_ge_0 * x + y_ge_0 * y + z_ge_0 * z)\n",
" b = k * (x_lt_0 * -x + y_lt_0 * -y + z_ge_0 * z)\n",
" c = k * (x_lt_0 * -x + y_ge_0 * y + z_lt_0 * -z)\n",
" d = k * (x_ge_0 * x + y_lt_0 * -y + z_lt_0 * -z)\n",
" # put in canonical form\n",
" m = min((a,b,c,d))\n",
" a,b,c,d = a-m, b-m, c-m, d-m\n",
" return (a, b, c, d)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "5e22e21e-1bd7-4b8f-a28a-c16b37f69158",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 0, 0, 0)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"to_qray(x, y, z) # convert to Martian"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "cc3aaaa2-6b96-434f-b503-e36554c97c0d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"xyz_vector(x=sqrt(2)/4, y=sqrt(2)/4, z=sqrt(2)/4)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"v = Vector((x,y,z))\n",
"v"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "660a1291-0591-49a4-841f-def657488271",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"ivm_vector(a=1, b=0, c=0, d=0)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q = v.quadray() # convert to Martian\n",
"q"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "a6b2b8ec-75da-4b04-bcf0-cf288893f887",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"xyz_vector(x=0.25*sqrt(2), y=0.25*sqrt(2), z=0.25*sqrt(2))"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q.xyz"
]
},
{
"cell_type": "markdown",
"id": "f58c3421-3863-45ac-9aef-eebfb4c95181",
"metadata": {},
"source": [
"Two of one quadray, added to one of two others, with a fourth set to zero, equals one of the twelve directions from a ball center to a neighboring ball center within the IVM (isotropic vector matrix). The ball packing in question is known as the CCP (cubic close packing).\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "a7fced32-903e-453a-a2d5-c6d291bfa24d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{(0, 1, 1, 2),\n",
" (0, 1, 2, 1),\n",
" (0, 2, 1, 1),\n",
" (1, 0, 1, 2),\n",
" (1, 0, 2, 1),\n",
" (1, 1, 0, 2),\n",
" (1, 1, 2, 0),\n",
" (1, 2, 0, 1),\n",
" (1, 2, 1, 0),\n",
" (2, 0, 1, 1),\n",
" (2, 1, 0, 1),\n",
" (2, 1, 1, 0)}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dir_12 = {spoke for spoke in perm((0,1,1,2))} # dupeless\n",
"dir_12"
]
},
{
"cell_type": "markdown",
"id": "4c2229cb-d7fd-4a43-894c-8105b2d07f43",
"metadata": {},
"source": [
"From Wikipedia:\n",
"\n",
"\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "77cb17f4-9b43-4ec7-bed9-8fb737df2335",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"spokes.pov ready for rendering\n"
]
}
],
"source": [
"from pov import POV_Vector, pov_header\n",
"beacon = [Martian((t)) for t in dir_12]\n",
"xyz_beacon = [POV_Vector(v.xyz.x, v.xyz.y, v.xyz.z) for v in beacon]\n",
"\n",
"# POV-Ray\n",
"edge_color = \"rgb <1, 0.4, 0>\"\n",
"edge_radius= 0.03\n",
"vert_color = \"rgb <0, 0, 1>\"\n",
"vert_radius= 0.05\n",
"\n",
"with open(\"spokes.pov\", 'w') as output:\n",
" print(pov_header, file=output) # print to the output file\n",
" for v in xyz_beacon:\n",
" v.draw_edge(edge_color, edge_radius, output)\n",
" v.draw_vert(vert_color, vert_radius, output) \n",
" \n",
"print(\"spokes.pov ready for rendering\")"
]
},
{
"cell_type": "markdown",
"id": "6bfc959d-1366-4cb5-ac7d-4f2941acb3ba",
"metadata": {},
"source": [
"![spokes](spokes.png)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "03b0bb7d-5a34-4016-be64-301eb42a3f13",
"metadata": {},
"outputs": [],
"source": [
"o,p,q,r,s,t,u,v,w,x,y,z = [Martian((t)) for t in dir_12]"
]
},
{
"cell_type": "markdown",
"id": "c19be080-493f-4d79-85b1-910e80eba897",
"metadata": {},
"source": [
"## Multiplication\n",
"\n",
"* vector times vector = area\n",
"* vector times vector times vector = volume\n",
"\n",
"In the case of the XYZ coordinate system, three vectors from the origin, in x, y and z directions, define a 90-90-90 degree corner. If the lengths of the three vectors are a, b, c then the volume of the resulting parallelopiped is their product. \n",
"\n",
"In the case of the IVM, consider any three vectors defining a 60-60-60 degree corner with lengths a, b and c. Their volume is the resulting tetrahedron, and is likewise their product.\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "6d0f5e43-ca57-464c-9169-1820273eb96e",
"metadata": {},
"outputs": [],
"source": [
"origin = Martian((0,0,0,0))"
]
},
{
"cell_type": "markdown",
"id": "0f0541c3-2eea-4852-807d-b4e71f9c367f",
"metadata": {},
"source": [
"The absolute value of the determinant of a matrix, times 1/4, gives the volume, in tetravolumes, of the tetrahedron determined by four quadrays (a, b, c, d), each with four coordinates (e.g. a0, a1, a2, a3).\n",
"\n",
"
\n",
"$$\n",
"V_{ivm} = (1/4) \n",
"\\begin{vmatrix}\n",
"a0&a1&a2&a3&1\\\\\n",
"b0&b1&b2&b3&1\\\\\n",
"c0&c1&c2&c3&1\\\\\n",
"d0&d1&d2&d3&1\\\\\n",
"1&1&1&1&0\\\\\n",
"\\end{vmatrix}\n",
"$$\n",
"
"
]
},
{
"cell_type": "markdown",
"id": "653087e8-5d6a-4f16-895c-0c2c9480d972",
"metadata": {},
"source": [
"Lets find three vectors from our 12 above, that form a 60-60-60 corner. We may then scale each to a different length and compute the resulting volume. The quadray to the origin, (0,0,0,0), will be one of the four points."
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "6ce04095-f34b-47dd-94a6-30af98e16688",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 60.0$"
],
"text/plain": [
"60.0000000000000"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"o.angle(s)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "9bb223c3-497b-44e6-9271-bbedb5ae01ff",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 60.0$"
],
"text/plain": [
"60.0000000000000"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.angle(v)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "e29822b9-ad92-4a3b-80fd-4fb21ce85293",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 60.0$"
],
"text/plain": [
"60.0000000000000"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"o.angle(v)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "cd34d391-6d90-4cba-be9d-9bb0c2824f4c",
"metadata": {},
"outputs": [],
"source": [
"from sympy import Matrix"
]
},
{
"cell_type": "markdown",
"id": "c8bafb14-683e-4442-84be-94a6aab4025e",
"metadata": {},
"source": [
"[The Matrix object in sympy](https://docs.sympy.org/latest/tutorial/matrices.html)\n",
"\n",
"[Volume Talk](https://github.com/4dsolutions/School_of_Tomorrow/blob/master/VolumeTalk.ipynb)\n",
"\n",
"[Tetravolumes from Quadrays](https://github.com/4dsolutions/School_of_Tomorrow/blob/master/Qvolume.ipynb)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "2b87d179-b3e8-4b79-9b82-30e4a187d6de",
"metadata": {},
"outputs": [],
"source": [
"# try varying scale factors\n",
"e0, e1, e2 = o*3, s*3, v*3 # per picture: 2, 2, 5"
]
},
{
"cell_type": "markdown",
"id": "c52905c7-61e8-4d27-9864-abe465d07ec6",
"metadata": {},
"source": [
"The four corners of a tetrahedron with a 60-60-60 degree corner at the origin, e0, e1, e2."
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "9db5d99f-e7d5-4199-92e6-94ef4e213bb0",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}0 & 0 & 0 & 0 & 1\\\\3 & 0 & 3 & 6 & 1\\\\3 & 0 & 6 & 3 & 1\\\\6 & 0 & 3 & 3 & 1\\\\1 & 1 & 1 & 1 & 0\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[0, 0, 0, 0, 1],\n",
"[3, 0, 3, 6, 1],\n",
"[3, 0, 6, 3, 1],\n",
"[6, 0, 3, 3, 1],\n",
"[1, 1, 1, 1, 0]])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"uvt = Matrix([[*origin.coords,1], # origin\n",
" [*e0.coords, 1], # e0\n",
" [*e1.coords, 1], # e1\n",
" [*e2.coords, 1], # e2\n",
" [1,1,1,1,0]])\n",
"uvt"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "ee44d4f1-ec90-41a2-9240-a8a8ae4572ba",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 27$"
],
"text/plain": [
"27"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"abs(uvt.det())/4"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "6aa831cf-38c6-4ea4-b0f8-f2c1b9000969",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 1.0$"
],
"text/plain": [
"1.00000000000000"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.area(v)"
]
},
{
"cell_type": "markdown",
"id": "52ad411d-925f-480c-8a06-8e183c08237f",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"id": "18926605-ab2a-488a-a210-23c4a5b2ade9",
"metadata": {},
"source": [
"## Volumes Table\n",
"\n",
"Now that we have the notion of \"tetravolumes\" firmly nailed down, we're able to create a new volumes table:\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "9d5c02f0-a9db-4635-a83f-96a5f6c94d76",
"metadata": {},
"outputs": [],
"source": [
"# try varying scale factors\n",
"e0, e1, e2 = o, s, v # 1, 1, 1"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "edf69c5a-b31c-4a4a-94da-39d3ef8b7874",
"metadata": {},
"outputs": [],
"source": [
"def tetravol(v0, v1, v2):\n",
" uvt = Matrix([[*origin.coords,1], # origin\n",
" [*v0.coords, 1], # e0\n",
" [*v1.coords, 1], # e1\n",
" [*v2.coords, 1], # e2\n",
" [1,1,1,1,0]])\n",
" return abs(uvt.det())/4\n",
"\n",
"def frustrum(start, end):\n",
" s0 = o*start\n",
" s1 = s*start\n",
" s2 = v*start\n",
" e0 = o*end\n",
" e1 = s*end\n",
" e2 = v*end\n",
" return tetravol(e0,e1,e2) - tetravol(s0, s1, s2)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "568a96bd-5334-4e19-a34e-96f68b714a63",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 1$"
],
"text/plain": [
"1"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tip = tetravol(e0, e1, e2)\n",
"tip"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "ee4be7c3-8125-4b2d-868f-3a83fef741d7",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 56$"
],
"text/plain": [
"56"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frust = frustrum(2, 4)\n",
"frust"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "b9fff6e5-8e61-4c8d-a5d5-a038d18b2f85",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 125$"
],
"text/plain": [
"125"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frustrum(0, 1) + frustrum(1, 2) + frustrum(2, 3) + frustrum(3, 4) + frustrum(4, 5)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "41d5e25d-06ed-47b2-a0a7-eeafede6a358",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "174d8c6d-4642-4680-94a7-07d6066d7091",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 ,\n",
" 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95, 1. , 1.05,\n",
" 1.1 , 1.15, 1.2 , 1.25, 1.3 , 1.35, 1.4 , 1.45, 1.5 , 1.55, 1.6 ,\n",
" 1.65, 1.7 , 1.75, 1.8 , 1.85, 1.9 , 1.95, 2. , 2.05, 2.1 , 2.15,\n",
" 2.2 , 2.25, 2.3 , 2.35, 2.4 , 2.45, 2.5 , 2.55, 2.6 , 2.65, 2.7 ,\n",
" 2.75, 2.8 , 2.85, 2.9 , 2.95, 3. , 3.05, 3.1 , 3.15, 3.2 , 3.25,\n",
" 3.3 , 3.35, 3.4 , 3.45, 3.5 , 3.55, 3.6 , 3.65, 3.7 , 3.75, 3.8 ,\n",
" 3.85, 3.9 , 3.95, 4. , 4.05, 4.1 , 4.15, 4.2 , 4.25, 4.3 , 4.35,\n",
" 4.4 , 4.45, 4.5 , 4.55, 4.6 , 4.65, 4.7 , 4.75, 4.8 , 4.85, 4.9 ,\n",
" 4.95])"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"notches = np.linspace(0, 5, 101)[:-1]\n",
"notches"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "b83c0305-bc02-4f15-b956-6a22ce538d6f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.05"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"delta = notches[1]-notches[0]\n",
"delta"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "929f7a1f-f734-4185-ae5d-2cda2d742e45",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n", " | notch | \n", "next_notch | \n", "
---|---|---|
0 | \n", "0.00 | \n", "0.05 | \n", "
1 | \n", "0.05 | \n", "0.10 | \n", "
2 | \n", "0.10 | \n", "0.15 | \n", "
3 | \n", "0.15 | \n", "0.20 | \n", "
4 | \n", "0.20 | \n", "0.25 | \n", "
\n", " | notch | \n", "next_notch | \n", "Frustrum | \n", "
---|---|---|---|
0 | \n", "0.00 | \n", "0.05 | \n", "0.000125 | \n", "
1 | \n", "0.05 | \n", "0.10 | \n", "0.000875 | \n", "
2 | \n", "0.10 | \n", "0.15 | \n", "0.002375 | \n", "
3 | \n", "0.15 | \n", "0.20 | \n", "0.004625 | \n", "
4 | \n", "0.20 | \n", "0.25 | \n", "0.007625 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
95 | \n", "4.75 | \n", "4.80 | \n", "3.420125 | \n", "
96 | \n", "4.80 | \n", "4.85 | \n", "3.492125 | \n", "
97 | \n", "4.85 | \n", "4.90 | \n", "3.564875 | \n", "
98 | \n", "4.90 | \n", "4.95 | \n", "3.638375 | \n", "
99 | \n", "4.95 | \n", "5.00 | \n", "3.712625 | \n", "
100 rows × 3 columns
\n", "\n", " | notch | \n", "next_notch | \n", "Frustrum | \n", "Cumulative | \n", "
---|---|---|---|---|
0 | \n", "0.00 | \n", "0.05 | \n", "0.000125 | \n", "0.000125 | \n", "
1 | \n", "0.05 | \n", "0.10 | \n", "0.000875 | \n", "0.001000 | \n", "
2 | \n", "0.10 | \n", "0.15 | \n", "0.002375 | \n", "0.003375 | \n", "
3 | \n", "0.15 | \n", "0.20 | \n", "0.004625 | \n", "0.008000 | \n", "
4 | \n", "0.20 | \n", "0.25 | \n", "0.007625 | \n", "0.015625 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
95 | \n", "4.75 | \n", "4.80 | \n", "3.420125 | \n", "110.592000 | \n", "
96 | \n", "4.80 | \n", "4.85 | \n", "3.492125 | \n", "114.084125 | \n", "
97 | \n", "4.85 | \n", "4.90 | \n", "3.564875 | \n", "117.649000 | \n", "
98 | \n", "4.90 | \n", "4.95 | \n", "3.638375 | \n", "121.287375 | \n", "
99 | \n", "4.95 | \n", "5.00 | \n", "3.712625 | \n", "125.000000 | \n", "
100 rows × 4 columns
\n", "\n", " | notch | \n", "next_notch | \n", "Frustrum | \n", "Cumulative | \n", "Difference | \n", "
---|---|---|---|---|---|
0 | \n", "0.00 | \n", "0.05 | \n", "0.000125 | \n", "0.000125 | \n", "NaN | \n", "
1 | \n", "0.05 | \n", "0.10 | \n", "0.000875 | \n", "0.001000 | \n", "0.00075 | \n", "
2 | \n", "0.10 | \n", "0.15 | \n", "0.002375 | \n", "0.003375 | \n", "0.00150 | \n", "
3 | \n", "0.15 | \n", "0.20 | \n", "0.004625 | \n", "0.008000 | \n", "0.00225 | \n", "
4 | \n", "0.20 | \n", "0.25 | \n", "0.007625 | \n", "0.015625 | \n", "0.00300 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
95 | \n", "4.75 | \n", "4.80 | \n", "3.420125 | \n", "110.592000 | \n", "0.07125 | \n", "
96 | \n", "4.80 | \n", "4.85 | \n", "3.492125 | \n", "114.084125 | \n", "0.07200 | \n", "
97 | \n", "4.85 | \n", "4.90 | \n", "3.564875 | \n", "117.649000 | \n", "0.07275 | \n", "
98 | \n", "4.90 | \n", "4.95 | \n", "3.638375 | \n", "121.287375 | \n", "0.07350 | \n", "
99 | \n", "4.95 | \n", "5.00 | \n", "3.712625 | \n", "125.000000 | \n", "0.07425 | \n", "
100 rows × 5 columns
\n", "\n", " | notch | \n", "next_notch | \n", "Frustrum | \n", "Cumulative | \n", "Difference | \n", "DiffDiff | \n", "
---|---|---|---|---|---|---|
0 | \n", "0.00 | \n", "0.05 | \n", "0.000125 | \n", "0.000125 | \n", "NaN | \n", "NaN | \n", "
1 | \n", "0.05 | \n", "0.10 | \n", "0.000875 | \n", "0.001000 | \n", "0.00075 | \n", "NaN | \n", "
2 | \n", "0.10 | \n", "0.15 | \n", "0.002375 | \n", "0.003375 | \n", "0.00150 | \n", "0.00075 | \n", "
3 | \n", "0.15 | \n", "0.20 | \n", "0.004625 | \n", "0.008000 | \n", "0.00225 | \n", "0.00075 | \n", "
4 | \n", "0.20 | \n", "0.25 | \n", "0.007625 | \n", "0.015625 | \n", "0.00300 | \n", "0.00075 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
95 | \n", "4.75 | \n", "4.80 | \n", "3.420125 | \n", "110.592000 | \n", "0.07125 | \n", "0.00075 | \n", "
96 | \n", "4.80 | \n", "4.85 | \n", "3.492125 | \n", "114.084125 | \n", "0.07200 | \n", "0.00075 | \n", "
97 | \n", "4.85 | \n", "4.90 | \n", "3.564875 | \n", "117.649000 | \n", "0.07275 | \n", "0.00075 | \n", "
98 | \n", "4.90 | \n", "4.95 | \n", "3.638375 | \n", "121.287375 | \n", "0.07350 | \n", "0.00075 | \n", "
99 | \n", "4.95 | \n", "5.00 | \n", "3.712625 | \n", "125.000000 | \n", "0.07425 | \n", "0.00075 | \n", "
100 rows × 6 columns
\n", "\n", " | notch | \n", "
---|---|
0 | \n", "0.00 | \n", "
1 | \n", "0.05 | \n", "
2 | \n", "0.10 | \n", "
3 | \n", "0.15 | \n", "
4 | \n", "0.20 | \n", "
... | \n", "... | \n", "
96 | \n", "4.80 | \n", "
97 | \n", "4.85 | \n", "
98 | \n", "4.90 | \n", "
99 | \n", "4.95 | \n", "
100 | \n", "5.00 | \n", "
101 rows × 1 columns
\n", "\n", " | notch | \n", "Frustrum | \n", "
---|---|---|
0 | \n", "0.00 | \n", "0.000000 | \n", "
1 | \n", "0.05 | \n", "0.000125 | \n", "
2 | \n", "0.10 | \n", "0.000875 | \n", "
3 | \n", "0.15 | \n", "0.002375 | \n", "
4 | \n", "0.20 | \n", "0.004625 | \n", "
... | \n", "... | \n", "... | \n", "
96 | \n", "4.80 | \n", "3.420125 | \n", "
97 | \n", "4.85 | \n", "3.492125 | \n", "
98 | \n", "4.90 | \n", "3.564875 | \n", "
99 | \n", "4.95 | \n", "3.638375 | \n", "
100 | \n", "5.00 | \n", "3.712625 | \n", "
101 rows × 2 columns
\n", "\n", " | notch | \n", "Frustrum | \n", "linear | \n", "
---|---|---|---|
0 | \n", "0.00 | \n", "0.000000 | \n", "-0.00075 | \n", "
1 | \n", "0.05 | \n", "0.000125 | \n", "0.00000 | \n", "
2 | \n", "0.10 | \n", "0.000875 | \n", "0.00075 | \n", "
3 | \n", "0.15 | \n", "0.002375 | \n", "0.00150 | \n", "
4 | \n", "0.20 | \n", "0.004625 | \n", "0.00225 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
96 | \n", "4.80 | \n", "3.420125 | \n", "0.07125 | \n", "
97 | \n", "4.85 | \n", "3.492125 | \n", "0.07200 | \n", "
98 | \n", "4.90 | \n", "3.564875 | \n", "0.07275 | \n", "
99 | \n", "4.95 | \n", "3.638375 | \n", "0.07350 | \n", "
100 | \n", "5.00 | \n", "3.712625 | \n", "0.07425 | \n", "
101 rows × 3 columns
\n", "\n", " | notch | \n", "Frustrum | \n", "linear | \n", "DiffFrustrum | \n", "
---|---|---|---|---|
0 | \n", "0.00 | \n", "0.000000 | \n", "-0.00075 | \n", "NaN | \n", "
1 | \n", "0.05 | \n", "0.000125 | \n", "0.00000 | \n", "0.000125 | \n", "
2 | \n", "0.10 | \n", "0.000875 | \n", "0.00075 | \n", "0.000750 | \n", "
3 | \n", "0.15 | \n", "0.002375 | \n", "0.00150 | \n", "0.001500 | \n", "
4 | \n", "0.20 | \n", "0.004625 | \n", "0.00225 | \n", "0.002250 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
96 | \n", "4.80 | \n", "3.420125 | \n", "0.07125 | \n", "0.071250 | \n", "
97 | \n", "4.85 | \n", "3.492125 | \n", "0.07200 | \n", "0.072000 | \n", "
98 | \n", "4.90 | \n", "3.564875 | \n", "0.07275 | \n", "0.072750 | \n", "
99 | \n", "4.95 | \n", "3.638375 | \n", "0.07350 | \n", "0.073500 | \n", "
100 | \n", "5.00 | \n", "3.712625 | \n", "0.07425 | \n", "0.074250 | \n", "
101 rows × 4 columns
\n", "\n", " | notch | \n", "Frustrum | \n", "linear | \n", "DiffFrustrum | \n", "Total_Volume | \n", "
---|---|---|---|---|---|
0 | \n", "0.00 | \n", "0.000000 | \n", "-0.00075 | \n", "NaN | \n", "0.000000 | \n", "
1 | \n", "0.05 | \n", "0.000125 | \n", "0.00000 | \n", "0.000125 | \n", "0.000125 | \n", "
2 | \n", "0.10 | \n", "0.000875 | \n", "0.00075 | \n", "0.000750 | \n", "0.001000 | \n", "
3 | \n", "0.15 | \n", "0.002375 | \n", "0.00150 | \n", "0.001500 | \n", "0.003375 | \n", "
4 | \n", "0.20 | \n", "0.004625 | \n", "0.00225 | \n", "0.002250 | \n", "0.008000 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
96 | \n", "4.80 | \n", "3.420125 | \n", "0.07125 | \n", "0.071250 | \n", "110.592000 | \n", "
97 | \n", "4.85 | \n", "3.492125 | \n", "0.07200 | \n", "0.072000 | \n", "114.084125 | \n", "
98 | \n", "4.90 | \n", "3.564875 | \n", "0.07275 | \n", "0.072750 | \n", "117.649000 | \n", "
99 | \n", "4.95 | \n", "3.638375 | \n", "0.07350 | \n", "0.073500 | \n", "121.287375 | \n", "
100 | \n", "5.00 | \n", "3.712625 | \n", "0.07425 | \n", "0.074250 | \n", "125.000000 | \n", "
101 rows × 5 columns
\n", "