{"version":9,"randomSeed":"7f045aeefd74559f399e780d47dc2065","graph":{"viewport":{"xmin":-10,"ymin":-5.319248930883933,"xmax":10,"ymax":5.319248930883936},"showGrid":false,"showXAxis":false,"showYAxis":false},"expressions":{"list":[{"type":"text","id":"51","text":"inspired by \"Alice, Bob, and the average shadow of a cube\" by 3Blue1Brown (2021) https://www.youtube.com/watch?v=ltLUadnCyi0"},{"type":"folder","id":"61","title":"initial vertices","collapsed":true},{"type":"expression","id":"1","folderId":"61","color":"#c74440","latex":"P_{0x}=\\left[-1,1,-1,1,-1,1,-1,1\\right]"},{"type":"expression","id":"2","folderId":"61","color":"#2d70b3","latex":"P_{0y}=\\left[-1,-1,1,1,-1,-1,1,1\\right]"},{"type":"expression","id":"3","folderId":"61","color":"#388c46","latex":"P_{0z}=\\left[-1,-1,-1,-1,1,1,1,1\\right]"},{"type":"folder","id":"27","title":"rotation around y-axis","collapsed":true},{"type":"expression","id":"4","folderId":"27","color":"#6042a6","latex":"\\alpha=0.524","slider":{"hardMin":true,"hardMax":true,"loopMode":"LOOP_FORWARD","isPlaying":true,"min":"0","max":"2\\pi"}},{"type":"expression","id":"8","folderId":"27","color":"#388c46","latex":"P_{1x}=P_{0x}\\cos\\alpha-P_{0z}\\sin\\alpha"},{"type":"expression","id":"9","folderId":"27","color":"#6042a6","latex":"P_{1y}=P_{0y}"},{"type":"expression","id":"10","folderId":"27","color":"#000000","latex":"P_{1z}=P_{0x}\\sin\\alpha+P_{0z}\\cos\\alpha"},{"type":"folder","id":"29","title":"rotation around x-axis","collapsed":true},{"type":"expression","id":"5","folderId":"29","color":"#000000","latex":"\\beta=1.806","slider":{"hardMin":true,"hardMax":true,"loopMode":"LOOP_FORWARD","isPlaying":true,"min":"0","max":"2\\pi"}},{"type":"expression","id":"11","folderId":"29","color":"#c74440","latex":"P_{2x}=P_{1x}"},{"type":"expression","id":"12","folderId":"29","color":"#2d70b3","latex":"P_{2y}=P_{1z}\\sin\\beta+P_{1y}\\cos\\beta"},{"type":"expression","id":"13","folderId":"29","color":"#388c46","latex":"P_{2z}=P_{1z}\\cos\\beta-P_{1y}\\sin\\beta"},{"type":"folder","id":"63","title":"projection","collapsed":true},{"type":"expression","id":"6","folderId":"63","color":"#c74440","latex":"P\\left(v\\right)=\\frac{\\left(v\\left[1\\right],v\\left[2\\right]\\right)}{1+0.1v\\left[3\\right]}"},{"type":"expression","id":"30","folderId":"63","color":"#6042a6","latex":"K=\\left[1...\\operatorname{length}\\left(P_{0x}\\right)\\right]"},{"type":"expression","id":"7","folderId":"63","color":"#2d70b3","latex":"V=\\left[P\\left(\\left[0,1,0\\right]+\\left[P_{2x}\\left[k\\right],P_{2y}\\left[k\\right],P_{2z}\\left[k\\right]\\right]\\right)\\operatorname{for}k=K\\right]","label":"${K}","hidden":true},{"type":"expression","id":"14","folderId":"63","color":"#6042a6","latex":"S=\\left[P\\left(\\left[0,-3,0\\right]+\\left[P_{2x}\\left[k\\right],0,P_{2z}\\left[k\\right]\\right]\\right)\\operatorname{for}k=K\\right]","hidden":true,"lines":false},{"type":"folder","id":"76","title":"z-sorting","collapsed":true},{"type":"expression","id":"16","folderId":"76","color":"#c74440","latex":"T_{0}=\\left[1,3,2,1,2,5,1,5,3,2,3,4,2,4,6,2,6,5,3,7,4,3,5,7,4,8,6,4,7,8,5,6,7,6,8,7\\right]"},{"type":"expression","id":"72","folderId":"76","color":"#c74440","latex":"T_{I}=\\left[1...\\frac{\\operatorname{length}\\left(T_{0}\\right)}{3}\\right]"},{"type":"expression","id":"69","folderId":"76","color":"#388c46","latex":"Z_{S}=\\left[-A\\left(T_{0}\\left[3i-2\\right],T_{0}\\left[3i-1\\right],T_{0}\\left[3i\\right]\\right)\\left[3\\right]\\operatorname{for}i=T_{I}\\right]"},{"type":"expression","id":"71","folderId":"76","color":"#000000","latex":"A\\left(i,j,k\\right)=\\frac{\\left[P_{2x}\\left[i\\right]+P_{2x}\\left[j\\right]+P_{2x}\\left[k\\right],P_{2y}\\left[i\\right]+P_{2y}\\left[j\\right]+P_{2y}\\left[k\\right],P_{2z}\\left[i\\right]+P_{2z}\\left[j\\right]+P_{2z}\\left[k\\right]\\right]}{3}"},{"type":"expression","id":"74","folderId":"76","color":"#388c46","latex":"T=T_{0}"},{"type":"folder","id":"84","title":"back-face culling","collapsed":true},{"type":"expression","id":"85","folderId":"84","color":"#c74440","latex":"B_{F}=\\left[\\left\\{D\\left(N_{P}\\left(T\\left[3i-2\\right],T\\left[3i-1\\right],T\\left[3i\\right]\\right),\\left[0,0,1\\right]\\right)\\le0,0\\right\\}\\operatorname{for}i=T_{I}\\right]"},{"type":"folder","id":"65","title":"background","collapsed":true},{"type":"text","id":"47","folderId":"65","text":"sky"},{"type":"expression","id":"49","folderId":"65","color":"#6042a6","latex":"G=\\operatorname{rgb}\\left(100,100,100\\right)"},{"type":"expression","id":"48","folderId":"65","color":"#388c46","latex":"y\\le y+1","colorLatex":"G"},{"type":"text","id":"35","folderId":"65","text":"plane"},{"type":"expression","id":"32","folderId":"65","color":"#388c46","latex":"y\\le-1","fillOpacity":"1"},{"type":"text","id":"41","folderId":"65","text":"plane lines"},{"type":"expression","id":"44","folderId":"65","color":"#000000","latex":"W=\\operatorname{rgb}\\left(255,255,255\\right)"},{"type":"expression","id":"43","folderId":"65","color":"#c74440","latex":"y=\\left[P\\left(\\left[0,-3,k\\right]\\right).y\\operatorname{for}k=\\left[-5...20\\right]\\right]","colorLatex":"W"},{"type":"expression","id":"45","folderId":"65","color":"#c74440","latex":"\\left[P\\left(\\left[k,-3,t\\right]\\right)\\operatorname{for}k=\\left[-20...20\\right]\\right]","parametricDomain":{"min":"-5","max":"20"},"colorLatex":"W","domain":{"min":"-5","max":"20"}},{"type":"folder","id":"82","title":"display","collapsed":true},{"type":"expression","id":"68","folderId":"82","color":"#2d70b3","latex":"C_{L}=\\operatorname{sort}\\left(\\left[L_{C}\\left(L_{V}\\left(T\\left[3j-2\\right],T\\left[3j-1\\right],T\\left[3j\\right]\\right)\\right)\\operatorname{for}j=T_{I}\\right],Z_{S}\\right)"},{"type":"expression","id":"17","folderId":"82","color":"#2d70b3","latex":"\\operatorname{sort}\\left(\\left[\\left\\{B_{F}\\left[j\\right]\\ge1:\\operatorname{polygon}\\left(V\\left[T\\left[3j-2\\right]\\right],V\\left[T\\left[3j-1\\right]\\right],V\\left[T\\left[3j\\right]\\right]\\right)\\right\\}\\operatorname{for}j=T_{I}\\right],Z_{S}\\right)","lines":false,"colorLatex":"C_{L}","fillOpacity":"1"},{"type":"text","id":"39","folderId":"82","text":"shadow"},{"type":"expression","id":"15","folderId":"82","color":"#000000","latex":"\\left[\\operatorname{polygon}\\left(S\\left[T\\left[3j-2\\right]\\right],S\\left[T\\left[3j-1\\right]\\right],S\\left[T\\left[3j\\right]\\right]\\right)\\operatorname{for}j=T_{I}\\right]","fillOpacity":"1"},{"type":"folder","id":"67","title":"normals and lighting","collapsed":true},{"type":"expression","id":"54","folderId":"67","color":"#2d70b3","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":"expression","id":"55","folderId":"67","color":"#388c46","latex":"L_{C}\\left(x\\right)=\\operatorname{rgb}\\left(128x,128+128x,128+128x\\right)"},{"type":"expression","id":"56","folderId":"67","color":"#6042a6","latex":"L_{V}\\left(i,j,k\\right)=\\max\\left(0,D\\left(N_{P}\\left(i,j,k\\right),\\left[0,1,0\\right]\\right)\\right)"},{"type":"expression","id":"57","folderId":"67","color":"#000000","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":"expression","id":"58","folderId":"67","color":"#c74440","latex":"N\\left(v\\right)=\\frac{v}{\\sqrt{D\\left(v,v\\right)}}"},{"type":"expression","id":"79","folderId":"67","color":"#2d70b3","latex":"N_{P}\\left(i,j,k\\right)=N\\left(C\\left(\\left[P_{2x}\\left[j\\right]-P_{2x}\\left[i\\right],P_{2y}\\left[j\\right]-P_{2y}\\left[i\\right],P_{2z}\\left[j\\right]-P_{2z}\\left[i\\right]\\right],\\left[P_{2x}\\left[k\\right]-P_{2x}\\left[i\\right],P_{2y}\\left[k\\right]-P_{2y}\\left[i\\right],P_{2z}\\left[k\\right]-P_{2z}\\left[i\\right]\\right]\\right)\\right)"},{"type":"expression","id":"80","folderId":"67","color":"#388c46","latex":"\\left[\\operatorname{polygon}\\left(P\\left(\\left[0,1,0\\right]+A\\left(T\\left[3i-2\\right],T\\left[3i-1\\right],T\\left[3i\\right]\\right)\\right),P\\left(\\left[0,1,0\\right]+A\\left(T\\left[3i-2\\right],T\\left[3i-1\\right],T\\left[3i\\right]\\right)+0.3N_{P}\\left(T\\left[3i-2\\right],T\\left[3i-1\\right],T\\left[3i\\right]\\right)\\right)\\right)\\operatorname{for}i=T_{I}\\right]","hidden":true}]}}