{"version":10,"randomSeed":"698bc8d3fe50e72233e3b2e3e9822493","graph":{"viewport":{"xmin":-2.892832848782849,"ymin":-2.95943559454463,"xmax":4.057832315550813,"ymax":3.9912295697890365},"showGrid":false,"showXAxis":false,"showYAxis":false},"expressions":{"list":[{"type":"text","id":"8","text":"present voxel-centres"},{"type":"expression","id":"1","color":"#c74440","latex":"C_{V1}=\\left[-1,-1,-1,-1,-1,0,-1,-1,1,0,-1,-1,0,-1,0,0,-1,1,1,-1,-1,1,-1,0,1,-1,1,1,0,1,-1,0,1,-1,0,-1,1,0,-1,0,1,0\\right]"},{"type":"expression","id":"124","color":"#000000","latex":"C_{V}=\\left[0,0,2,1,0,2,0,-1,2,1,-1,2,-1,-1,2,-1,1,2,1,1,2,0,1,2\\right]"},{"type":"text","id":"6","text":"view angle"},{"type":"expression","id":"2","color":"#2d70b3","latex":"\\alpha=0.57","slider":{"hardMin":true,"hardMax":true,"min":"-\\pi","max":"\\pi"}},{"type":"expression","id":"3","color":"#388c46","latex":"\\beta=-0.01","slider":{"hardMin":true,"hardMax":true,"min":"-\\pi","max":"\\pi"}},{"type":"expression","id":"4","color":"#388c46","latex":"\\left(\\alpha,\\beta\\right)"},{"type":"folder","id":"44","title":"library of useful functions","collapsed":true},{"type":"text","id":"45","folderId":"44","text":"project, R^3 -> R^2"},{"type":"expression","id":"46","folderId":"44","color":"#2d70b3","latex":"P\\left(v\\right)=\\frac{\\left(v\\left[1\\right],v\\left[2\\right]\\right)}{v\\left[3\\right]}"},{"type":"text","id":"47","folderId":"44","text":"project list, R^(3*n) -> R^3 -> R^2 -> (R^2)^n"},{"type":"expression","id":"48","folderId":"44","color":"#2d70b3","latex":"P_{L}\\left(v,o,\\phi\\right)=\\left[P\\left(R_{x}\\left(R_{y}\\left(o+\\left[v\\left[3k-2\\right],v\\left[3k-1\\right],v\\left[3k\\right]\\right],\\phi.x\\right),\\phi.y\\right)\\right)\\operatorname{for}k=\\left[1...\\frac{\\operatorname{length}\\left(v\\right)}{3}\\right]\\right]"},{"type":"text","id":"49","folderId":"44","text":"dot product, R^n -> R^n -> R"},{"type":"expression","id":"50","folderId":"44","color":"#c74440","latex":"D\\left(u,v\\right)=\\sum_{k=1}^{\\min\\left(\\operatorname{length}\\left(u\\right),\\operatorname{length}\\left(v\\right)\\right)}u\\left[k\\right]v\\left[k\\right]"},{"type":"text","id":"51","folderId":"44","text":"cross product, R^3 -> R^3"},{"type":"expression","id":"52","folderId":"44","color":"#388c46","latex":"C\\left(u,v\\right)=\\left[u\\left[2\\right]v\\left[3\\right]-u\\left[3\\right]v\\left[2\\right],u\\left[3\\right]v\\left[1\\right]-u\\left[1\\right]v\\left[3\\right],u\\left[1\\right]v\\left[2\\right]-u\\left[2\\right]v\\left[1\\right]\\right]"},{"type":"text","id":"53","folderId":"44","text":"normalise vector, R^n -> R^n"},{"type":"expression","id":"54","folderId":"44","color":"#6042a6","latex":"N\\left(v\\right)=\\frac{v}{\\sqrt{D\\left(v,v\\right)}}"},{"type":"text","id":"55","folderId":"44","text":"insert element as replacement, R^n -> N -> {R, R^2} -> R^n"},{"type":"expression","id":"56","folderId":"44","color":"#2d70b3","latex":"I\\left(L,i,x\\right)=\\left\\{i=1:\\operatorname{join}\\left(x,L\\left[2...\\right]\\right),i=\\operatorname{length}\\left(L\\right):\\operatorname{join}\\left(L\\left[1...\\operatorname{length}\\left(L\\right)-1\\right],x\\right),\\operatorname{join}\\left(L\\left[1...i-1\\right],x,L\\left[i+1...\\right]\\right)\\right\\}"},{"type":"text","id":"57","folderId":"44","text":"rotate around each axis, R^3 -> R^3"},{"type":"expression","id":"58","folderId":"44","color":"#2d70b3","latex":"R_{x}\\left(v,\\theta\\right)=\\left[v\\left[1\\right],v\\left[2\\right]\\cos\\theta-v\\left[3\\right]\\sin\\theta,v\\left[2\\right]\\sin\\theta+v\\left[3\\right]\\cos\\theta\\right]"},{"type":"expression","id":"59","folderId":"44","color":"#388c46","latex":"R_{y}\\left(v,\\theta\\right)=\\left[v\\left[1\\right]\\cos\\theta-v\\left[3\\right]\\sin\\theta,v\\left[2\\right],v\\left[1\\right]\\sin\\theta+v\\left[3\\right]\\cos\\theta\\right]"},{"type":"expression","id":"60","folderId":"44","color":"#6042a6","latex":"R_{z}\\left(v,\\theta\\right)=\\left[v\\left[1\\right]\\cos\\theta-v\\left[2\\right]\\sin\\theta,v\\left[1\\right]\\sin\\theta+v\\left[2\\right]\\cos\\theta,v\\left[3\\right]\\right]"},{"type":"folder","id":"62","title":"3D transformations","collapsed":true},{"type":"text","id":"64","folderId":"62","text":"transform list of 3D points, as if for projection (offset, then rotate) but without projection (outputs list of 3D points)"},{"type":"expression","id":"65","folderId":"62","color":"#388c46","latex":"T_{P}\\left(v,o,\\phi\\right)=R_{x}\\left(R_{y}\\left(o+v,\\phi.x\\right),\\phi.y\\right)"},{"type":"expression","id":"66","folderId":"62","color":"#6042a6","latex":"T_{PL}\\left(v,o,\\phi\\right)=\\left[T_{P}\\left(F_{P}\\left(v,k\\right),o,\\phi\\right)\\left[k_{f}\\right]\\operatorname{for}k_{f}=\\left[1,2,3\\right],k=\\left[1...\\frac{\\operatorname{length}\\left(v\\right)}{3}\\right]\\right]"},{"type":"text","id":"68","folderId":"62","text":"get 3D point from list of joined points at index"},{"type":"expression","id":"69","folderId":"62","color":"#c74440","latex":"F_{P}\\left(v,i\\right)=\\left[v\\left[3i-2\\right],v\\left[3i-1\\right],v\\left[3i\\right]\\right]"},{"type":"text","id":"30","text":"render bounds"},{"type":"expression","id":"31","color":"#000000","latex":"x_{I}=\\left[-1...1\\right]"},{"type":"expression","id":"32","color":"#c74440","latex":"y_{I}=\\left[-1...1\\right]"},{"type":"expression","id":"33","color":"#2d70b3","latex":"z_{I}=\\left[-1...3\\right]"},{"type":"text","id":"71","text":"is voxel present at position?"},{"type":"expression","id":"73","color":"#6042a6","latex":"E_{P}\\left(u,v\\right)=\\left\\{u\\left[1\\right]=v\\left[1\\right]\\right\\}\\left\\{u\\left[2\\right]=v\\left[2\\right]\\right\\}\\left\\{u\\left[3\\right]=v\\left[3\\right]\\right\\}"},{"type":"expression","id":"72","color":"#388c46","latex":"V_{P}\\left(v\\right)=1-\\prod_{k=1}^{\\frac{\\operatorname{length}\\left(C_{V}\\right)}{3}}\\left\\{E_{P}\\left(v,F_{P}\\left(C_{V},k\\right)\\right)=1:0,1\\right\\}"},{"type":"text","id":"83","text":"should we display the face for the given cube (with face-direction as axis index)?\n0 = don't display, 1 = face on one favoured side, 2 = face on the opposing side"},{"type":"expression","id":"93","color":"#000000","latex":"E\\left(k\\right)=\\left\\{\\operatorname{mod}\\left(k,3\\right)=1:\\left[1,0,0\\right],\\operatorname{mod}\\left(k,3\\right)=2:\\left[0,1,0\\right],\\operatorname{mod}\\left(k,3\\right)=0:\\left[0,0,1\\right]\\right\\}","hidden":true},{"type":"text","id":"118","text":"TODO: replace z > 1/2 with minimum z (among corners) > 0"},{"type":"expression","id":"119","color":"#c74440","latex":"Z_{F}\\left(v,a,c,d\\right)=T_{P}\\left(v,\\frac{1}{2}E\\left(a\\right)+\\frac{1}{2}cE\\left(a+1\\right)+\\frac{1}{2}dE\\left(a-1\\right),\\left(\\alpha,\\beta\\right)\\right)\\left[3\\right]"},{"type":"expression","id":"123","color":"#6042a6"},{"type":"expression","id":"84","color":"#2d70b3","latex":"D_{F}\\left(v,a\\right)=\\max\\left(V_{P}\\left(v\\right)\\left(1-V_{P}\\left(v+E\\left(a\\right)\\right)\\right)\\left\\{D\\left(T_{P}\\left(E\\left(a\\right),v,\\left(\\alpha,\\beta\\right)\\right)-T_{P}\\left(v,\\left[0,0,0\\right],\\left(\\alpha,\\beta\\right)\\right),T_{P}\\left(v,\\frac{1}{2}E\\left(a\\right),\\left(\\alpha,\\beta\\right)\\right)\\right)\\le0,0\\right\\}\\left\\{Z_{F}\\left(v,a,1,1\\right)>0,0\\right\\},2V_{P}\\left(v+E\\left(a\\right)\\right)\\left(1-V_{P}\\left(v\\right)\\right)\\left\\{D\\left(T_{P}\\left(-E\\left(a\\right),v,\\left(\\alpha,\\beta\\right)\\right)-T_{P}\\left(v,\\left[0,0,0\\right],\\left(\\alpha,\\beta\\right)\\right),T_{P}\\left(v,\\frac{1}{2}E\\left(a\\right),\\left(\\alpha,\\beta\\right)\\right)\\right)\\le0,0\\right\\}\\left\\{T_{P}\\left(v,\\frac{1}{2}E\\left(a\\right),\\left(\\alpha,\\beta\\right)\\right)\\left[3\\right]\\ge\\frac{1}{2},0\\right\\}\\right)"},{"type":"text","id":"102","text":"light position"},{"type":"expression","id":"96","color":"#388c46","latex":"L_{P}=\\left[0,0.5,0.5\\right]"},{"type":"expression","id":"100","color":"#2d70b3","latex":"M\\left(v\\right)=\\sqrt{D\\left(v,v\\right)}"},{"type":"text","id":"26","text":"xy-faces"},{"type":"expression","id":"28","color":"#388c46","latex":"F_{xy}=\\left[\\left\\{D_{F}\\left(\\left[x_{1},y_{1},z_{1}\\right],3\\right)\\ge1:\\operatorname{polygon}\\left(P_{L}\\left(\\left[x_{1}+\\frac{1}{2},y_{1}+\\frac{1}{2},z_{1},x_{1}+\\frac{1}{2},y_{1}-\\frac{1}{2},z_{1},x_{1}-\\frac{1}{2},y_{1}-\\frac{1}{2},z_{1},x_{1}-\\frac{1}{2},y_{1}+\\frac{1}{2},z_{1}\\right],\\left[0,0,\\frac{1}{2}\\right],\\left(\\alpha,\\beta\\right)\\right)\\right),\\operatorname{polygon}\\left(\\left(0,0\\right),\\left(0,0\\right)\\right)\\right\\}\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]","hidden":true,"lines":false,"fill":true,"colorLatex":"H_{xy}","fillOpacity":"1"},{"type":"expression","id":"94","color":"#c74440","latex":"H_{xy}=\\left[\\operatorname{hsv}\\left(0,0,-\\frac{D\\left(N\\left(L_{P}-\\left[x_{1},y_{1},z_{1}+\\frac{1}{2}\\right]\\right),\\left(2D_{F}\\left(\\left[x_{1},y_{1},z_{1}\\right],3\\right)-3\\right)E\\left(3\\right)\\right)}{M\\left(L_{P}-\\left[x_{1},y_{1},z_{1}+\\frac{1}{2}\\right]\\right)}\\right)\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]"},{"type":"expression","id":"106","color":"#c74440","latex":"Z_{xy}=\\left[T_{P}\\left(\\left[x_{1},y_{1},z_{1}\\right],\\left[0,0,\\frac{1}{2}\\right],\\left(\\alpha,\\beta\\right)\\right)\\left[3\\right]\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]"},{"type":"text","id":"76","text":"xz-faces"},{"type":"expression","id":"74","color":"#2d70b3","latex":"F_{xz}=\\left[\\left\\{D_{F}\\left(\\left[x_{1},y_{1},z_{1}\\right],2\\right)\\ge1:\\operatorname{polygon}\\left(P_{L}\\left(\\left[x_{1}+\\frac{1}{2},y_{1},z_{1}+\\frac{1}{2},x_{1}+\\frac{1}{2},y_{1},z_{1}-\\frac{1}{2},x_{1}-\\frac{1}{2},y_{1},z_{1}-\\frac{1}{2},x_{1}-\\frac{1}{2},y_{1},z_{1}+\\frac{1}{2}\\right],\\left[0,\\frac{1}{2},0\\right],\\left(\\alpha,\\beta\\right)\\right)\\right),\\operatorname{polygon}\\left(\\left(0,0\\right),\\left(0,0\\right)\\right)\\right\\}\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]","hidden":true,"lines":false,"fill":true,"colorLatex":"H_{xz}","fillOpacity":"1"},{"type":"expression","id":"99","color":"#c74440","latex":"H_{xz}=\\left[\\operatorname{hsv}\\left(0,0,-\\frac{D\\left(N\\left(L_{P}-\\left[x_{1},y_{1}+\\frac{1}{2},z_{1}\\right]\\right),\\left(2D_{F}\\left(\\left[x_{1},y_{1},z_{1}\\right],2\\right)-3\\right)E\\left(2\\right)\\right)}{M\\left(L_{P}-\\left[x_{1},y_{1}+\\frac{1}{2},z_{1}\\right]\\right)^{2}}\\right)\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]"},{"type":"expression","id":"109","color":"#6042a6","latex":"Z_{xz}=\\left[T_{P}\\left(\\left[x_{1},y_{1},z_{1}\\right],\\left[0,\\frac{1}{2},0\\right],\\left(\\alpha,\\beta\\right)\\right)\\left[3\\right]\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]"},{"type":"text","id":"78","text":"yz-faces"},{"type":"expression","id":"79","color":"#6042a6","latex":"F_{yz}=\\left[\\left\\{D_{F}\\left(\\left[x_{1},y_{1},z_{1}\\right],1\\right)\\ge1:\\operatorname{polygon}\\left(P_{L}\\left(\\left[x_{1},y_{1}+\\frac{1}{2},z_{1}+\\frac{1}{2},x_{1},y_{1}+\\frac{1}{2},z_{1}-\\frac{1}{2},x_{1},y_{1}-\\frac{1}{2},z_{1}-\\frac{1}{2},x_{1},y_{1}-\\frac{1}{2},z_{1}+\\frac{1}{2}\\right],\\left[\\frac{1}{2},0,0\\right],\\left(\\alpha,\\beta\\right)\\right)\\right),\\operatorname{polygon}\\left(\\left(0,0\\right),\\left(0,0\\right)\\right)\\right\\}\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]","hidden":true,"lines":false,"colorLatex":"H_{yz}","fillOpacity":"1"},{"type":"expression","id":"103","color":"#6042a6","latex":"H_{yz}=\\left[\\operatorname{hsv}\\left(0,0,-\\frac{D\\left(N\\left(L_{P}-\\left[x_{1}+\\frac{1}{2},y_{1},z_{1}\\right]\\right),\\left(2D_{F}\\left(\\left[x_{1},y_{1},z_{1}\\right],1\\right)-3\\right)E\\left(1\\right)\\right)}{M\\left(L_{P}-\\left[x_{1}+\\frac{1}{2},y_{1},z_{1}\\right]\\right)^{2}}\\right)\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]"},{"type":"expression","id":"110","color":"#000000","latex":"Z_{yz}=\\left[T_{P}\\left(\\left[x_{1},y_{1},z_{1}\\right],\\left[\\frac{1}{2},0,0\\right],\\left(\\alpha,\\beta\\right)\\right)\\left[3\\right]\\operatorname{for}x_{1}=x_{I},y_{1}=y_{I},z_{1}=z_{I}\\right]"},{"type":"text","id":"114","text":"uniting the face-sets"},{"type":"expression","id":"115","color":"#6042a6","latex":"F=\\operatorname{sort}\\left(\\operatorname{join}\\left(F_{xy},F_{xz},F_{yz}\\right),-\\operatorname{join}\\left(Z_{xy},Z_{xz},Z_{yz}\\right)\\right)","lines":false,"colorLatex":"H","fillOpacity":"1"},{"type":"expression","id":"116","color":"#000000","latex":"H=\\operatorname{sort}\\left(\\operatorname{join}\\left(H_{xy},H_{xz},H_{yz}\\right),-\\operatorname{join}\\left(Z_{xy},Z_{xz},Z_{yz}\\right)\\right)"},{"type":"text","id":"81","text":"TODO:\n- z-sorting? (might not be necessary with enough culling)"}]}}