{"version":9,"randomSeed":"a1c4e72cb97cbc6bac04767b112166c2","graph":{"viewport":{"xmin":-0.5007836700909687,"ymin":-1.041451887828241,"xmax":0.5400990667793695,"ymax":-0.2030168436822242},"showGrid":false,"showXAxis":false,"showYAxis":false},"expressions":{"list":[{"type":"folder","id":"77","title":"vector functions","collapsed":true},{"type":"text","id":"35","folderId":"77","text":"torus point by angular coordinates"},{"type":"expression","id":"1","folderId":"77","color":"#c74440","latex":"T\\left(p\\right)=O+\\left[R\\cos\\left(p.x\\right)+r\\cos\\left(p.x\\right)\\cos\\left(p.y\\right),r\\sin\\left(p.y\\right),R\\sin\\left(p.x\\right)+r\\sin\\left(p.x\\right)\\cos\\left(p.y\\right)\\right]"},{"type":"text","id":"37","folderId":"77","text":"torus surface normal by angular coordinates"},{"type":"expression","id":"31","folderId":"77","color":"#c74440","latex":"S\\left(p\\right)=N\\left(\\left[\\cos\\left(p.x\\right)\\cos\\left(p.y\\right),\\sin\\left(p.y\\right),\\sin\\left(p.x\\right)\\cos\\left(p.y\\right)\\right]\\right)"},{"type":"text","id":"39","folderId":"77","text":"normalise vector"},{"type":"expression","id":"32","folderId":"77","color":"#2d70b3","latex":"N\\left(v\\right)=\\frac{v}{\\sqrt{v\\left[1\\right]^{2}+v\\left[2\\right]^{2}+v\\left[3\\right]^{2}}}"},{"type":"text","id":"47","folderId":"77","text":"3D -> 2D projection"},{"type":"expression","id":"6","folderId":"77","color":"#c74440","latex":"P\\left(v\\right)=\\frac{\\left(v\\left[1\\right],v\\left[2\\right]\\right)}{v\\left[3\\right]}"},{"type":"text","id":"93","folderId":"77","text":"dot product"},{"type":"expression","id":"61","folderId":"77","color":"#c74440","latex":"D\\left(u,v\\right)=u\\left[1\\right]v\\left[1\\right]+u\\left[2\\right]v\\left[2\\right]+u\\left[3\\right]v\\left[3\\right]"},{"type":"folder","id":"79","title":"setup","collapsed":true},{"type":"text","id":"41","folderId":"79","text":"major and minor radii"},{"type":"expression","id":"2","folderId":"79","color":"#2d70b3","latex":"R=3","slider":{"hardMin":true,"hardMax":true,"min":"0"}},{"type":"expression","id":"3","folderId":"79","color":"#388c46","latex":"r=1","hidden":true,"slider":{"hardMin":true,"hardMax":true,"min":"0"}},{"type":"text","id":"43","folderId":"79","text":"centre of torus"},{"type":"expression","id":"4","folderId":"79","color":"#6042a6","latex":"O=\\left[0,-5,10\\right]"},{"type":"text","id":"45","folderId":"79","text":"rotation of torus (around y-axis)"},{"type":"expression","id":"9","folderId":"79","color":"#6042a6","latex":"s=0","hidden":true,"slider":{"hardMin":true,"hardMax":true,"loopMode":"LOOP_FORWARD","min":"0","max":"2\\pi"}},{"type":"text","id":"85","folderId":"79","text":"polygons around minor circumference"},{"type":"expression","id":"57","folderId":"79","color":"#388c46","latex":"w=20","slider":{"hardMin":true,"hardMax":true,"min":"1","max":"1000"}},{"type":"text","id":"87","folderId":"79","text":"total polygons"},{"type":"expression","id":"8","folderId":"79","color":"#388c46","latex":"n=800","slider":{"hardMin":true,"min":"1","max":"1000","step":"1"}},{"type":"folder","id":"81","title":"point selection","collapsed":true},{"type":"text","id":"49","folderId":"81","text":"initial grid of angle-points"},{"type":"expression","id":"50","folderId":"81","color":"#2d70b3","latex":"A_{0}=\\left[\\left(2\\pi\\cdot\\frac{\\operatorname{floor}\\left(\\frac{p}{w}\\right)}{\\frac{n}{w}}+s,2\\pi\\cdot\\frac{\\operatorname{mod}\\left(p,w\\right)}{w}\\right)\\operatorname{for}p=\\left[1...n\\right]\\right]","hidden":true},{"type":"text","id":"89","folderId":"81","text":"sorted by z-coordinate of point"},{"type":"expression","id":"73","folderId":"81","color":"#c74440","latex":"A_{Z}=\\operatorname{sort}\\left(A_{0},\\left[-T\\left(z_{1}\\right)\\left[3\\right]\\operatorname{for}z_{1}=A_{0}\\right]\\right)","hidden":true},{"type":"text","id":"91","folderId":"81","text":"helper for back-face culling"},{"type":"expression","id":"71","folderId":"81","color":"#2d70b3","latex":"A_{B}=\\left[D\\left(S\\left(z_{2}\\right),T\\left(z_{2}\\right)\\right)\\operatorname{for}z_{2}=A_{Z}\\right]"},{"type":"text","id":"75","folderId":"81","text":"back-face culled angles"},{"type":"expression","id":"70","folderId":"81","color":"#c74440","latex":"A_{R}=A_{Z}\\left[A_{B}\\le0\\right]"},{"type":"folder","id":"83","title":"rendering","collapsed":true},{"type":"text","id":"53","folderId":"83","text":"colour (0 to 256) from vector (0 to 1)"},{"type":"expression","id":"55","folderId":"83","color":"#c74440","latex":"C_{N}\\left(v\\right)=\\operatorname{rgb}\\left(256v\\left[1\\right],256v\\left[2\\right],256v\\left[3\\right]\\right)"},{"type":"text","id":"59","folderId":"83","text":"lighting from normal (Lambertian)"},{"type":"expression","id":"60","folderId":"83","color":"#000000","latex":"L\\left(v\\right)=\\max\\left(D\\left(v,N\\left(\\left[1,1,-1\\right]\\right)\\right),0\\right)"},{"type":"text","id":"95","folderId":"83","text":"colours of polygons, in order"},{"type":"expression","id":"51","folderId":"83","color":"#388c46","latex":"C=\\left[C_{N}\\left(L\\left(S\\left(k+\\left(s,0\\right)\\right)\\right)\\cdot\\left[1,1,1\\right]\\right)\\operatorname{for}k=A_{R}\\right]"},{"type":"text","id":"101","folderId":"83","text":"background"},{"type":"expression","id":"102","folderId":"83","color":"#2d70b3","latex":"x\\le x+1","fillOpacity":"1"},{"type":"text","id":"97","folderId":"83","text":"surface normals"},{"type":"expression","id":"72","folderId":"83","color":"#388c46","latex":"\\left[\\operatorname{polygon}\\left(P\\left(T\\left(k\\right)\\right),P\\left(T\\left(k\\right)+0.1\\cdot S\\left(k+\\left(s,0\\right)\\right)\\right)\\right)\\operatorname{for}k=A_{R}\\right]","hidden":true},{"type":"text","id":"99","folderId":"83","text":"final render"},{"type":"expression","id":"7","folderId":"83","color":"#000000","latex":"\\left[\\operatorname{polygon}\\left(P\\left(T\\left(k\\right)\\right),P\\left(T\\left(k+\\left(\\frac{2\\pi w}{n},0\\right)\\right)\\right),P\\left(T\\left(k+\\left(\\frac{2\\pi w}{n},\\frac{2\\pi}{w}\\right)\\right)\\right),P\\left(T\\left(k+\\left(0,\\frac{2\\pi}{w}\\right)\\right)\\right)\\right)\\operatorname{for}k=A_{R}\\right]","lines":false,"colorLatex":"C","fillOpacity":"1","lineOpacity":"0.5","lineWidth":"1"}]}}