{"version":9,"randomSeed":"7fde73130a04aa8921b1047a140ae75c","graph":{"viewport":{"xmin":-1.25,"ymin":-1.3858471038236508,"xmax":1.25,"ymax":1.3858471038236473},"showGrid":false},"expressions":{"list":[{"type":"folder","id":"61","title":"library of useful functions","collapsed":true},{"type":"text","id":"62","folderId":"61","text":"project, R^3 -> R^2"},{"type":"expression","id":"63","folderId":"61","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":"64","folderId":"61","text":"dot product, R^n -> R^n -> R"},{"type":"expression","id":"65","folderId":"61","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":"66","folderId":"61","text":"cross product, R^3 -> R^3"},{"type":"expression","id":"67","folderId":"61","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":"68","folderId":"61","text":"normalise vector, R^n -> R^n"},{"type":"expression","id":"69","folderId":"61","color":"#6042a6","latex":"N\\left(v\\right)=\\frac{v}{\\sqrt{D\\left(v,v\\right)}}"},{"type":"text","id":"70","folderId":"61","text":"insert element as replacement, R^n -> N -> {R, R^2} -> R^n"},{"type":"expression","id":"71","folderId":"61","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":"72","folderId":"61","text":"rotate around each axis, R^3 -> R^3"},{"type":"expression","id":"73","folderId":"61","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":"74","folderId":"61","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":"75","folderId":"61","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":"46","title":"complex and parametric function setup"},{"type":"expression","id":"121","folderId":"46","color":"#c74440","latex":"S\\left(z\\right)=\\left(-z.y,z.x\\right)","labelSize":"medium"},{"type":"expression","id":"98","folderId":"46","color":"#388c46","latex":"F\\left(z\\right)=\\frac{1}{2}\\left(\\left(e^{z.y}+e^{-z.y}\\right)\\sin\\left(z.x\\right),\\left(e^{z.y}-e^{-z.y}\\right)\\cos\\left(z.x\\right)\\right)"},{"type":"expression","id":"97","folderId":"46","color":"#2d70b3","latex":"f_{comp}\\left(p\\right)=\\left[p.x,\\operatorname{distance}\\left(\\left(0,0\\right),F\\left(p\\right)\\right),p.y\\right]"},{"type":"folder","id":"77","title":"rotation setup","collapsed":true},{"type":"expression","id":"78","folderId":"77","color":"#2d70b3","latex":"\\alpha=-1.17","slider":{"hardMin":true,"hardMax":true,"min":"-2\\pi","max":"2\\pi"}},{"type":"expression","id":"79","folderId":"77","color":"#388c46","latex":"\\beta=-0.8","slider":{"hardMin":true,"hardMax":true,"min":"-\\pi","max":"\\pi"}},{"type":"expression","id":"80","folderId":"77","color":"#fa7e19","latex":"\\left(\\alpha,\\beta\\right)"},{"type":"text","id":"26","text":"function to map 2D points into 3D points on the surface"},{"type":"expression","id":"13","color":"#c74440","latex":"f\\left(p\\right)=\\left[0,0,6\\right]+R_{x}\\left(R_{y}\\left(f_{comp}\\left(p\\right),\\alpha\\right),\\beta\\right)"},{"type":"text","id":"28","text":"number of polygons around each dimension"},{"type":"expression","id":"14","color":"#2d70b3","latex":"n_{x}=24","slider":{"hardMin":true,"hardMax":true,"min":"1","max":"100","step":"1"}},{"type":"expression","id":"15","color":"#388c46","latex":"n_{y}=8","slider":{"hardMin":true,"hardMax":true,"min":"1","max":"100","step":"1"}},{"type":"text","id":"88","text":"width (in input space) of the full surface along each dimension"},{"type":"expression","id":"89","color":"#2d70b3","latex":"w_{x}=8","slider":{"hardMin":true,"min":"0"}},{"type":"expression","id":"90","color":"#388c46","latex":"w_{y}=3","slider":{"hardMin":true,"min":"0"}},{"type":"text","id":"30","text":"list of 2D points to sample"},{"type":"expression","id":"16","color":"#6042a6","latex":"J=\\left[\\left(i,j\\right)\\operatorname{for}i=w_{x}\\cdot\\left[0,\\frac{1}{n_{x}},\\frac{2}{n_{x}}...1\\right]-\\frac{w_{x}}{2},j=w_{y}\\cdot\\left[0,\\frac{1}{n_{y}},\\frac{2}{n_{y}}...1\\right]-\\frac{w_{y}}{2}\\right]","hidden":true},{"type":"text","id":"32","text":"vertices of surface approximation"},{"type":"expression","id":"17","color":"#000000","latex":"\\left[P\\left(f\\left(z\\right)\\right)\\operatorname{for}z=J\\right]","hidden":true},{"type":"text","id":"34","text":"increment to approximate normals"},{"type":"expression","id":"18","color":"#c74440","latex":"h=0.0001","slider":{"hardMin":true,"hardMax":true,"min":"0","max":"1"}},{"type":"text","id":"36","text":"lighting magnitude"},{"type":"expression","id":"20","color":"#388c46","latex":"M=\\left[\\max\\left(0,D\\left(-N\\left(C\\left(f\\left(z+\\left(h,0\\right)\\right)-f\\left(z\\right),f\\left(z+\\left(0,h\\right)\\right)-f\\left(z\\right)\\right)\\right),N\\left(\\left[1,1,-1\\right]\\right)\\right)\\right)\\operatorname{for}z=J\\right]"},{"type":"text","id":"116","text":"argument hue"},{"type":"expression","id":"117","color":"#2d70b3","latex":"A=\\left[\\arctan\\left(F\\left(z\\right).y,F\\left(z\\right).x\\right)\\operatorname{for}z=J\\right]","labelSize":"medium"},{"type":"text","id":"38","text":"colours"},{"type":"folder","id":"105","title":"HSL (only varying hue) implementation with radian input","hidden":true,"collapsed":true},{"type":"expression","id":"113","folderId":"105","color":"#000000","latex":"x=\\left[-\\pi,\\pi\\right]"},{"type":"expression","id":"114","folderId":"105","color":"#000000","latex":"y=\\left[0,1\\right]"},{"type":"expression","id":"100","folderId":"105","color":"#c74440","latex":"H_{r}\\left(c\\right)=\\frac{1}{2}-\\frac{1}{2}\\sin\\left(c\\right)"},{"type":"expression","id":"106","folderId":"105","color":"#388c46","latex":"H_{g}\\left(c\\right)=\\frac{1}{2}+\\frac{1}{2}\\cos c"},{"type":"expression","id":"107","folderId":"105","color":"#000000","latex":"H_{b}\\left(c\\right)=\\frac{1}{2}+\\frac{1}{2}\\sin\\left(c\\right)","labelSize":"medium"},{"type":"expression","id":"108","folderId":"105","color":"#c74440","latex":"c_{r}=\\operatorname{rgb}\\left(255H_{r}\\left(c_{s}\\right),255H_{g}\\left(c_{s}\\right),255H_{b}\\left(c_{s}\\right)\\right)"},{"type":"expression","id":"109","folderId":"105","color":"#2d70b3","latex":"c_{s}=-3.141592653589793","labelSize":"medium","slider":{"hardMin":true,"hardMax":true,"min":"-\\pi","max":"\\pi","step":"\\frac{\\pi}{4}"}},{"type":"expression","id":"119","color":"#6042a6","latex":"b_{a}=128","slider":{"hardMin":true,"hardMax":true,"min":"0","max":"255","step":"1"}},{"type":"expression","id":"118","color":"#388c46","latex":"b_{d}=64","slider":{"hardMin":true,"hardMax":true,"min":"0","max":"255","step":"1"}},{"type":"expression","id":"21","color":"#6042a6","latex":"W=\\operatorname{sort}\\left(\\left[\\operatorname{rgb}\\left(b_{a}H_{r}\\left(A\\left[s\\right]\\right)+b_{d}M\\left[s\\right],b_{a}H_{g}\\left(A\\left[s\\right]\\right)+b_{d}M\\left[s\\right],b_{a}H_{b}\\left(A\\left[s\\right]\\right)+b_{d}M\\left[s\\right]\\right)\\operatorname{for}s=\\left[1...\\operatorname{length}\\left(J\\right)\\right]\\right],\\left[-f\\left(z\\right)\\left[3\\right]\\operatorname{for}z=J\\right]\\right)"},{"type":"text","id":"40","text":"polygon list"},{"type":"expression","id":"22","color":"#000000","latex":"G=\\left[\\operatorname{polygon}\\left(P\\left(f\\left(z\\right)\\right),P\\left(f\\left(z+\\left(\\frac{w_{x}}{n_{x}},0\\right)\\right)\\right),P\\left(f\\left(z+\\left(\\frac{w_{x}}{n_{x}},\\frac{w_{y}}{n_{y}}\\right)\\right)\\right),P\\left(f\\left(z+\\left(0,\\frac{w_{y}}{n_{y}}\\right)\\right)\\right)\\right)\\operatorname{for}z=J\\right]","hidden":true,"fill":false,"colorLatex":"R","fillOpacity":"1"},{"type":"text","id":"84","text":"shuffled rainbow"},{"type":"expression","id":"85","color":"#6042a6","latex":"R=\\operatorname{shuffle}\\left(\\left[\\operatorname{hsv}\\left(k,1,1\\right)\\operatorname{for}k=\\left[0,0.5...360\\right]\\right]\\right)"},{"type":"text","id":"51","text":"background"},{"type":"expression","id":"52","color":"#2d70b3","latex":"x\\le x+1","lines":false,"fillOpacity":"1"},{"type":"text","id":"42","text":"z-sorted polygon list"},{"type":"expression","id":"23","color":"#c74440","latex":"H=\\operatorname{sort}\\left(G,\\left[-f\\left(z\\right)\\left[3\\right]\\operatorname{for}z=J\\right]\\right)","lines":false,"colorLatex":"W","fillOpacity":"1"},{"type":"text","id":"44","text":"surface normals"},{"type":"expression","id":"24","color":"#fa7e19","latex":"\\left[\\operatorname{polygon}\\left(P\\left(f\\left(z\\right)\\right),P\\left(f\\left(z\\right)+0.1N\\left(-C\\left(f\\left(z+\\left(h,0\\right)\\right)-f\\left(z\\right),f\\left(z+\\left(0,h\\right)\\right)-f\\left(z\\right)\\right)\\right)\\right)\\right)\\operatorname{for}z=J\\right]","hidden":true}]}}