{"id":749,"date":"2006-11-28T09:57:08","date_gmt":"2006-11-28T01:57:08","guid":{"rendered":"http:\/\/127.0.0.1\/website_linux\/blog\/?p=749"},"modified":"2006-11-28T09:57:08","modified_gmt":"2006-11-28T01:57:08","slug":"%e5%88%86%e6%9e%90%e4%bb%8e%e7%bd%91%e4%b8%8adownload%e7%9a%84marching-cubes%e7%a8%8b%e5%ba%8f","status":"publish","type":"post","link":"https:\/\/opgogo.com\/blog2\/?p=749","title":{"rendered":"\u5206\u6790\u4ece\u7f51\u4e0aDownload\u7684Marching Cubes\u7a0b\u5e8f"},"content":{"rendered":"<p>\/*<br \/>\n\u8fd9\u4e2a\u6587\u4ef6\u662f\u7528\u6765\u5206\u6790Marching Cubes\u7b97\u6cd5\u7684<br \/>\n*\/<\/p>\n<p>\/\/\u9996\u5148\u5bfc\u5165\u4e86\u4e00\u4e9b\u5e38\u7528\u7684\u5305<br \/>\nimport java.awt.*;<br \/>\nimport java.awt.event.*;<br \/>\nimport javax.swing.*;<br \/>\nimport javax.swing.event.*;<br \/>\nimport java.util.*;<\/p>\n<p>\/*<br \/>\n<applet code=\"MarchingCubes\" width=500 height=600><br \/>\n<\/applet><br \/>\n*\/<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e00\u4e2a\u4e09\u89d2\u5f62\u7c7b\uff0c3\u4e2a\u9876\u70b9<br \/>\nclass Triangle {<br \/>\nXYZ[] p = new XYZ[3];<br \/>\n}<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7f51\u683c\u5355\u5143\u7c7b\uff0c8\u4e2a\u9876\u70b9\uff0c8\u4e2a\u503c<br \/>\nclass Gridcell {<br \/>\nXYZ[] p = new XYZ[8];<br \/>\ndouble[] val = new double[8];<br \/>\n}<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e00\u4e2a\u9876\u70b9\u7c7b\uff0cx\uff0cy\uff0cz\u4e09\u4e2a\u5750\u6807<br \/>\nclass XYZ {<br \/>\ndouble x, y, z;<br \/>\n}<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e00\u4e2aMC\u7c7b\uff0c\u7ee7\u627fJApplet<br \/>\npublic class MarchingCubes extends JApplet {<\/p>\n<p>\/\/\u4e0b\u9762\u5b9a\u4e49\u4e86\u663e\u793a\u7a7a\u95f4<br \/>\nfinal double X_MAX = 250.0;<br \/>\nfinal double Y_MAX = 250.0;<br \/>\nfinal double Z_MAX = 250.0;<br \/>\nfinal double X_MIN = -250.0;<br \/>\nfinal double Y_MIN = -250.0;<br \/>\nfinal double Z_MIN = -250.0;<\/p>\n<p>\/\/\u4e0b\u9762\u5b9a\u4e49\u4e86\u4e09\u7ef4\u6570\u636e\u7684\u6570\u91cf<br \/>\nfinal int N_X = 64;<br \/>\nfinal int N_Y = 64;<br \/>\nfinal int N_Z = 64;<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5411\u91cf\uff0c\u7528\u6765\u5b58\u50a8\u4e09\u89d2\u5f62\u9635\u5217<br \/>\nprivate Vector m_triArray = new Vector();<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e09\u4e2a\u6807\u7b7e\uff0c\u7528\u6765\u5728\u754c\u9762\u4e0a\u663e\u793aX\uff0cY\uff0cZ\u5411\u7684\u8f6c\u89d2<br \/>\nprivate JLabel m_labelRotX, m_labelRotY, m_labelRotZ;<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e09\u4e2aint\u578b\u503c\uff0c\u7528\u6765\u5b58\u50a8X\uff0cY\uff0cZ\u7684\u8f6c\u89d2<br \/>\nprivate int m_rotX, m_rotY, m_rotZ;<\/p>\n<p>\/\/\u4e0b\u9762\u662fApplet\u7684init\u51fd\u6570\uff0c\u505a\u4e00\u4e9b\u521d\u59cb\u5316\u7684\u5de5\u4f5c<br \/>\npublic void init() {<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e00\u4e2a\u4e09\u7ef4\u6570\u7ec4\uff0c\u7528\u6765\u5b58\u50a8\u4e09\u7ef4\u6570\u636e<br \/>\ndouble[][][] data = new double[N_X][N_Y][N_Z];<\/p>\n<p>\/\/\u5b9a\u4e49\u4e86\u4e00\u4e2a\u9876\u70b9p<br \/>\nXYZ p = new XYZ();<\/p>\n<p>for (int i = 0; i < N_X; i++) {\nfor (int j = 0; j < N_Y; j++) {\nfor (int k = 0; k < N_Z; k++) {\n\n\/*\n\u4e0b\u9762\u4e09\u4e2a\u8868\u8fbe\u5f0f\u662f\u7528\u6765\u8ba1\u7b97\u70b9\u7684\u4f4d\u7f6e\u7684\u3002\n\u4f46\u662f\u4f3c\u4e4e\u8ba1\u7b97\u9519\u4e86\uff0c\u5e94\u8be5\u662f\np.x = X_MIN + i * (X_MAX - X_MIN) \/ (N_X - 1);\np.y = Y_MIN + j * (Y_MAX - Y_MIN) \/ (N_Y - 1);\np.z = Z_MIN + k * (Z_MAX - Z_MIN) \/ (N_Z - 1);\n*\/\np.x = X_MIN + i * (X_MAX - X_MIN) \/ N_X;\np.y = Y_MIN + j * (Y_MAX - Y_MIN) \/ N_Y;\np.z = Z_MIN + k * (Z_MAX - Z_MIN) \/ N_Z;\n\n\/\/p\u70b9\u7ecf\u8fc7\u51fd\u6570f()\u5904\u7406\u540e\uff0c\u5b58\u5165\u4e09\u7ef4\u6570\u7ec4data\ndata[i][j][k] = f(p);\n}\n}\n}\n\n\/\/\u751f\u6210\u4e00\u4e2a\u7f51\u683c\u5355\u5143\nGridcell grid = new Gridcell();\n\/\/\u751f\u6210\u4e00\u4e2a\u4e09\u89d2\u5f62\u6570\u7ec4\uff0c5\u4e2a\u4e09\u89d2\u5f62\nTriangle[] triangles = new Triangle[5];\n\/\/\u521d\u59cb\u5316\u8fd95\u4e2a\u4e09\u89d2\u5f62\nfor (int i = 0; i < triangles.length; i++) {\ntriangles[i] = new Triangle();\n}\n\n\/\/\u8ba1\u7b97\u7f51\u683c\u4f4d\u7f6e\uff0c\u7f51\u683c\u503c\uff0c\u7ed8\u5236\u4e09\u89d2\u5f62\nfor (int i = 0; i < N_X - 1; i++) {\nfor (int j = 0; j < N_Y - 1; j++) {\nfor (int k = 0; k < N_Z - 1; k++) {\ncalcGridPos(i, j, k, grid);\ncalcGridVal(i, j, k, data, grid);\npolygonise(grid, 1.0);\n\n}\n}\n}\n\n\/\/\u4e0b\u9762\u751f\u6210\u754c\u9762\nContainer cp = getContentPane();\ncp.setBackground(getBackground());\ncp.setLayout(new FlowLayout(FlowLayout.LEFT));\nJButton btDraw = new JButton(\"Draw\");\nbtDraw.addActionListener(new ActionListener() {\npublic void actionPerformed(ActionEvent ae) {\nmyPaint(getGraphics());\n}\n});\nJButton btClear = new JButton(\"Clear\");\nbtClear.addActionListener(new ActionListener() {\npublic void actionPerformed(ActionEvent ae) {\nrepaint();\n}\n});\nJPanel btPanel = new JPanel();\nbtPanel.setLayout(new GridLayout(2, 1, 0, 5));\nbtPanel.add(btDraw);\nbtPanel.add(btClear);\n\n\nm_labelRotX = new JLabel(Integer.toString(m_rotX) + \"      \",\nSwingConstants.RIGHT);\nm_labelRotY = new JLabel(Integer.toString(m_rotY) + \"      \",\nSwingConstants.RIGHT);\nm_labelRotZ = new JLabel(Integer.toString(m_rotZ) + \"      \",\nSwingConstants.RIGHT);\nJLabel staticRotX = new JLabel(\"X\u8f74\u65cb\u8f6c\");\nJLabel staticRotY = new JLabel(\"Y\u8f74\u65cb\u8f6c\");\nJLabel staticRotZ = new JLabel(\"Z\u8f74\u65cb\u8f6c\");\n\nJSlider sliderRotX = new JSlider(JSlider.HORIZONTAL, -180, 180, 0);\nsliderRotX.addChangeListener(new ChangeListener() {\npublic void stateChanged(ChangeEvent e) {\nJSlider sl = (JSlider)e.getSource();\nm_rotX = sl.getValue();\nm_labelRotX.setText(Integer.toString(m_rotX) + \"   \");\n}\n});\nJSlider sliderRotY = new JSlider(JSlider.HORIZONTAL, -180, 180, 0);\nsliderRotY.addChangeListener(new ChangeListener() {\npublic void stateChanged(ChangeEvent e) {\nJSlider sl = (JSlider)e.getSource();\nm_rotY = sl.getValue();\nm_labelRotY.setText(Integer.toString(m_rotY) + \"   \");\n}\n});\nJSlider sliderRotZ = new JSlider(JSlider.HORIZONTAL, -180, 180, 0);\nsliderRotZ.addChangeListener(new ChangeListener() {\npublic void stateChanged(ChangeEvent e) {\nJSlider sl = (JSlider)e.getSource();\nm_rotZ = sl.getValue();\nm_labelRotZ.setText(Integer.toString(m_rotZ) + \"   \");\n}\n});\n\nJPanel rotPanel = new JPanel();\nrotPanel.setLayout(new GridLayout(3, 1));\nJPanel rotXPanel = new JPanel();\nrotXPanel.setLayout(new FlowLayout(FlowLayout.LEFT));\nJPanel rotYPanel = new JPanel();\nrotYPanel.setLayout(new FlowLayout(FlowLayout.LEFT));\nJPanel rotZPanel = new JPanel();\nrotZPanel.setLayout(new FlowLayout(FlowLayout.LEFT));\n\nrotXPanel.add(sliderRotX);\nrotXPanel.add(staticRotX);\nrotXPanel.add(m_labelRotX);\nrotYPanel.add(sliderRotY);\nrotYPanel.add(staticRotY);\nrotYPanel.add(m_labelRotY);\nrotZPanel.add(sliderRotZ);\nrotZPanel.add(staticRotZ);\nrotZPanel.add(m_labelRotZ);\n\nrotPanel.add(rotXPanel);\nrotPanel.add(rotYPanel);\nrotPanel.add(rotZPanel);\n\ncp.add(btPanel);\ncp.add(rotPanel);\n}\n\npublic void myPaint(Graphics g) {\n\nColor tmpColor = g.getColor();\ng.setColor(getBackground());\ng.fillRect(0, 100, 500, 500);\ng.setColor(tmpColor);\n\nint nTriangle = m_triArray.size();\n\nTriangle tmpTriangle = new Triangle();\nfor (int i = 0; i < tmpTriangle.p.length; i ++)\ntmpTriangle.p[i] = new XYZ();\n\nfor (int i = 5; i < nTriangle; i++) {\nfinal Triangle triangle = (Triangle)m_triArray.elementAt(i);\n\nfor (int j = 0; j < triangle.p.length; j++) {\ntmpTriangle.p[j].x = triangle.p[j].x;\ntmpTriangle.p[j].y = triangle.p[j].y;\ntmpTriangle.p[j].z = triangle.p[j].z;\n}\n\ndrawTriangle(g, tmpTriangle);\n}\n}\n\nprivate void drawTriangle(Graphics g, Triangle triangle) {\n\nrotYTriangle(triangle, m_rotY);\nrotXTriangle(triangle, m_rotX);\nrotZTriangle(triangle, m_rotZ);\n\nint[] xPoints = {(int)Math.floor(triangle.p[0].x + 0.5),\n(int)Math.floor(triangle.p[1].x + 0.5),\n(int)Math.floor(triangle.p[2].x + 0.5)};\nint[] yPoints = {(int)Math.floor(triangle.p[0].y + 0.5) - 100,\n(int)Math.floor(triangle.p[1].y + 0.5) - 100,\n(int)Math.floor(triangle.p[2].y + 0.5) - 100};\n\ntransSystemCoord(xPoints, yPoints);\n\ng.drawPolygon(xPoints, yPoints, 3);\n}\n\nprivate void transSystemCoord(int[] xPoints, int[] yPoints) {\nfor (int i = 0; i < xPoints.length; i++)\nxPoints[i] = xPoints[i] + (int)(-X_MIN);\nfor (int i = 0; i < yPoints.length; i++)\nyPoints[i] = yPoints[i]*(-1) + (int)(-Y_MIN);\n}\n\nprivate void rotYTriangle(Triangle tri, double ang) {\n\nfor (int i = 0; i < tri.p.length; i++) {\ndouble zz = tri.p[i].z * Math.cos(ang*Math.PI\/180) -\ntri.p[i].x * Math.sin(ang*Math.PI\/180);\n\ndouble xx = tri.p[i].z * Math.sin(ang*Math.PI\/180) +\ntri.p[i].x * Math.cos(ang*Math.PI\/180);\n\ntri.p[i].x = xx;\ntri.p[i].z = zz;\n}\n\n}\n\nprivate void rotXTriangle(Triangle tri, double ang) {\n\nfor (int i = 0; i < tri.p.length; i++) {\ndouble yy = tri.p[i].y * Math.cos(ang*Math.PI\/180) -\ntri.p[i].z * Math.sin(ang*Math.PI\/180);\n\ndouble zz = tri.p[i].y * Math.sin(ang*Math.PI\/180) +\ntri.p[i].z * Math.cos(ang*Math.PI\/180);\n\ntri.p[i].y = yy;\ntri.p[i].z = zz;\n}\n\n}\n\nprivate void rotZTriangle(Triangle tri, double ang) {\n\nfor (int i = 0; i < tri.p.length; i++) {\ndouble xx = tri.p[i].x * Math.cos(ang*Math.PI\/180) -\ntri.p[i].y * Math.sin(ang*Math.PI\/180);\n\ndouble yy = tri.p[i].x * Math.sin(ang*Math.PI\/180) +\ntri.p[i].y * Math.cos(ang*Math.PI\/180);\n\ntri.p[i].x = xx;\ntri.p[i].y = yy;\n}\n\n}\n\n\/\/\u8fd9\u4e2a\u51fd\u6570\u8c03\u7528\u51fd\u6570genPos()\u8ba1\u7b97\u4e86\u7f51\u683c\u76848\u4e2a\u9876\u70b9\u4f4d\u7f6e\nprivate void calcGridPos(int i, int j, int k, Gridcell grid) {\n\ngrid.p[0] = genPos(i, j, k);\ngrid.p[1] = genPos(i+1, j, k);\ngrid.p[2] = genPos(i+1, j+1, k);\ngrid.p[3] = genPos(i, j+1, k);\ngrid.p[4] = genPos(i, j, k+1);\ngrid.p[5] = genPos(i+1, j, k+1);\ngrid.p[6] = genPos(i+1, j+1, k+1);\ngrid.p[7] = genPos(i, j+1, k+1);\n}\n\n\/\/\u8fd9\u4e2a\u51fd\u6570\u8ba1\u7b97\u4e86\u7f51\u683c\u70b9\u7684\u4f4d\u7f6e\nprivate XYZ genPos(int i, int j, int k) {\n\nXYZ p = new XYZ();\n\/*\n\u4e0b\u9762\u4e09\u4e2a\u8868\u8fbe\u5f0f\u662f\u7528\u6765\u8ba1\u7b97\u70b9\u7684\u4f4d\u7f6e\u7684\u3002\n\u4f46\u662f\u4f3c\u4e4e\u8ba1\u7b97\u9519\u4e86\uff0c\u5e94\u8be5\u662f\np.x = X_MIN + i * (X_MAX - X_MIN) \/ (N_X - 1);\np.y = Y_MIN + j * (Y_MAX - Y_MIN) \/ (N_Y - 1);\np.z = Z_MIN + k * (Z_MAX - Z_MIN) \/ (N_Z - 1);\n*\/\np.x = X_MIN + i * (X_MAX - X_MIN) \/ N_X;\np.y = Y_MIN + j * (Y_MAX - Y_MIN) \/ N_Y;\np.z = Z_MIN + k * (Z_MAX - Z_MIN) \/ N_Z;\n\nreturn p;\n}\n\n\/\/\u751f\u6210\u7f51\u683c\u503c\nprivate void calcGridVal(int i, int j, int k, double[][][] data,\nGridcell grid) {\ngrid.val[0] = data[i][j][k];\ngrid.val[1] = data[i+1][j][k];\ngrid.val[2] = data[i+1][j+1][k];\ngrid.val[3] = data[i][j+1][k];\ngrid.val[4] = data[i][j][k+1];\ngrid.val[5] = data[i+1][j][k+1];\ngrid.val[6] = data[i+1][j+1][k+1];\ngrid.val[7] = data[i][j+1][k+1];\n}\n\n\n\/*\n\u8fd9\u4e2a\u51fd\u6570\u7528\u6765\u6839\u636e\u573a\u51fd\u6570\u8ba1\u7b97\u7f51\u683c\u70b9\u4e0a\u7684\u503c\n*\/\nprotected double f(XYZ p) {\n\/\/\u6839\u636e\u692d\u7403\u4f53\u7684\u51fd\u6570\uff0c\u6765\u8fd4\u56de\u6570\u503c\n\/*\ndouble rsq = 2.0 * p.x * p.x + p.y * p.y + p.z * p.z;\nif (rsq < 40000.0)\nreturn 100.0;\nelse\nreturn 0.0;\n*\/\n\n\/\/\u6839\u636e\u8f6e\u80ce\u4f53\u7684\u51fd\u6570\uff0c\u6765\u8fd4\u56de\u6570\u503c\nfinal double a = 500, b = 1000, c = 700, d = 150;\ndouble tmp = Math.sqrt((p.x*p.x\/a*a) + (p.y*p.y\/b*b)) - d;\ndouble r = tmp*tmp + p.z*p.z\/c*c;\nif (r < 1500.0)\nreturn 100.0;\nelse\nreturn 0.0;\n}\n\n\n\/\/\u8fd9\u4e2a\u51fd\u6570\u7528\u6765\u751f\u6210\u4e09\u89d2\u5f62\nprotected void polygonise(Gridcell grid, double isoLevel) {\n\n\/\/\u9996\u5148\u786e\u5b9a\u7f51\u683c\u5355\u5143\u7b26\u5408\u54ea\u79cdMC\u5355\u5143\n\nint cubeIndex = 0;\n\nif (grid.val[0] < isoLevel) cubeIndex |= 1;\nif (grid.val[1] < isoLevel) cubeIndex |= 2;\nif (grid.val[2] < isoLevel) cubeIndex |= 4;\nif (grid.val[3] < isoLevel) cubeIndex |= 8;\nif (grid.val[4] < isoLevel) cubeIndex |= 16;\nif (grid.val[5] < isoLevel) cubeIndex |= 32;\nif (grid.val[6] < isoLevel) cubeIndex |= 64;\nif (grid.val[7] < isoLevel) cubeIndex |= 128;\n\nif (edgeTable[cubeIndex] == 0)\nreturn;\n\n\/\/\u5982\u679c\u7f51\u683c\u5355\u5143\u8de8\u8d8a\u4e86\u9600\u503c\uff0c\u8ba1\u7b9712\u6761\u8fb9\u4e0a\u7684\u63d2\u503c\u70b9\nXYZ[] vertList = new XYZ[12];\n\nif ((edgeTable[cubeIndex] &#038; 1) != 0)\nvertList[0] =\nvertexInterp(isoLevel, grid.p[0], grid.p[1], grid.val[0], grid.val[1]);\nif ((edgeTable[cubeIndex] &#038; 2) != 0)\nvertList[1] =\nvertexInterp(isoLevel, grid.p[1], grid.p[2], grid.val[1], grid.val[2]);\nif ((edgeTable[cubeIndex] &#038; 4) != 0)\nvertList[2] =\nvertexInterp(isoLevel, grid.p[2], grid.p[3], grid.val[2], grid.val[3]);\nif ((edgeTable[cubeIndex] &#038; 8) != 0)\nvertList[3] =\nvertexInterp(isoLevel, grid.p[3], grid.p[0], grid.val[3], grid.val[0]);\nif ((edgeTable[cubeIndex] &#038; 16) != 0)\nvertList[4] =\nvertexInterp(isoLevel, grid.p[4], grid.p[5], grid.val[4], grid.val[5]);\nif ((edgeTable[cubeIndex] &#038; 32) != 0)\nvertList[5] =\nvertexInterp(isoLevel, grid.p[5], grid.p[6], grid.val[5], grid.val[6]);\nif ((edgeTable[cubeIndex] &#038; 64) != 0)\nvertList[6] =\nvertexInterp(isoLevel, grid.p[6], grid.p[7], grid.val[6], grid.val[7]);\nif ((edgeTable[cubeIndex] &#038; 128) != 0)\nvertList[7] =\nvertexInterp(isoLevel, grid.p[7], grid.p[4], grid.val[7], grid.val[4]);\nif ((edgeTable[cubeIndex] &#038; 256) != 0)\nvertList[8] =\nvertexInterp(isoLevel, grid.p[0], grid.p[4], grid.val[0], grid.val[4]);\nif ((edgeTable[cubeIndex] &#038; 512) != 0)\nvertList[9] =\nvertexInterp(isoLevel, grid.p[1], grid.p[5], grid.val[1], grid.val[5]);\nif ((edgeTable[cubeIndex] &#038; 1024) != 0)\nvertList[10] =\nvertexInterp(isoLevel, grid.p[2], grid.p[6], grid.val[2], grid.val[6]);\nif ((edgeTable[cubeIndex] &#038; 2048) != 0)\nvertList[11] =\nvertexInterp(isoLevel, grid.p[3], grid.p[7], grid.val[3], grid.val[7]);\n\n\/\/\u751f\u6210\u4e09\u89d2\u5f62\nfor (int i = 0; triTable[cubeIndex][i] != -1; i+= 3) {\nTriangle triangle = new Triangle();\n\ntriangle.p[0] = vertList[ triTable[cubeIndex][i]   ];\ntriangle.p[1] = vertList[ triTable[cubeIndex][i+1] ];\ntriangle.p[2] = vertList[ triTable[cubeIndex][i+2] ];\n\nm_triArray.add(triangle);\n}\n\nreturn;\n}\n\n\/\/\u8fd9\u4e2a\u51fd\u6570\u7528\u6765\u8ba1\u7b97\u7f51\u683c\u5355\u5143\u8fb9\u4e0a\u7684\u63d2\u503c\u70b9\nXYZ vertexInterp(double isoLevel, XYZ p1, XYZ p2, double valp1, double valp2) {\n\nXYZ p = new XYZ();\n\nif (Math.abs(isoLevel - valp1) < 0.00001)\nreturn p1;\nif (Math.abs(isoLevel - valp2) < 0.00001)\nreturn p2;\nif (Math.abs(valp1 - valp2) < 0.00001)\nreturn p1;\n\ndouble mu = (isoLevel - valp1) \/ (valp2 - valp1);\np.x = p1.x + mu * (p2.x - p1.x);\np.y = p1.y + mu * (p2.y - p1.y);\np.z = p1.z + mu * (p2.z - p1.z);\n\nreturn p;\n}\n\n\n\nint[] edgeTable = {\n0x0  , 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\n0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\n0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\n0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\n0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c,\n0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\n0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac,\n0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\n0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c,\n0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\n0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc,\n0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\n0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c,\n0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\n0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc ,\n0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\n0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\n0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\n0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\n0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\n0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\n0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\n0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\n0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460,\n0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\n0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0,\n0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\n0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230,\n0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\n0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190,\n0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\n0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0   };\n\nint[][] triTable = {\n{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1},\n{3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1},\n{3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1},\n{3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1},\n{9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1},\n{9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1},\n{2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1},\n{8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1},\n{9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1},\n{4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1},\n{3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1},\n{1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1},\n{4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1},\n{4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1},\n{9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1},\n{5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1},\n{2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1},\n{9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1},\n{0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1},\n{2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1},\n{10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1},\n{4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1},\n{5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1},\n{5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1},\n{9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1},\n{0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1},\n{1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1},\n{10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1},\n{8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1},\n{2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1},\n{7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1},\n{9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1},\n{2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1},\n{11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1},\n{9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1},\n{5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1},\n{11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1},\n{11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1},\n{1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1},\n{9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1},\n{5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1},\n{2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1},\n{0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1},\n{5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1},\n{6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1},\n{3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1},\n{6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1},\n{5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1},\n{1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1},\n{10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1},\n{6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1},\n{8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1},\n{7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1},\n{3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1},\n{5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1},\n{0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1},\n{9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1},\n{8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1},\n{5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1},\n{0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1},\n{6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1},\n{10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1},\n{10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1},\n{8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1},\n{1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1},\n{3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1},\n{0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1},\n{10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1},\n{3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1},\n{6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1},\n{9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1},\n{8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1},\n{3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1},\n{6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1},\n{0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1},\n{10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1},\n{10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1},\n{2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1},\n{7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1},\n{7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1},\n{2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1},\n{1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1},\n{11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1},\n{8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1},\n{0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1},\n{7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1},\n{10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1},\n{2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1},\n{6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1},\n{7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1},\n{2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1},\n{1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1},\n{10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1},\n{10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1},\n{0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1},\n{7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1},\n{6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1},\n{8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1},\n{9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1},\n{6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1},\n{4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1},\n{10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1},\n{8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1},\n{0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1},\n{1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1},\n{8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1},\n{10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1},\n{4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1},\n{10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1},\n{5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1},\n{11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1},\n{9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1},\n{6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1},\n{7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1},\n{3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1},\n{7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1},\n{9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1},\n{3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1},\n{6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1},\n{9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1},\n{1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1},\n{4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1},\n{7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1},\n{6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1},\n{3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1},\n{0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1},\n{6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1},\n{0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1},\n{11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1},\n{6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1},\n{5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1},\n{9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1},\n{1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1},\n{1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1},\n{10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1},\n{0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1},\n{5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1},\n{10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1},\n{11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1},\n{9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1},\n{7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1},\n{2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1},\n{8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1},\n{9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1},\n{9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1},\n{1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1},\n{9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1},\n{9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1},\n{5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1},\n{0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1},\n{10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1},\n{2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1},\n{0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1},\n{0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1},\n{9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1},\n{5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1},\n{3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1},\n{5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1},\n{8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1},\n{0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1},\n{9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1},\n{0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1},\n{1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1},\n{3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1},\n{4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1},\n{9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1},\n{11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1},\n{11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1},\n{2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1},\n{9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1},\n{3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1},\n{1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1},\n{4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1},\n{4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1},\n{0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1},\n{3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1},\n{3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1},\n{0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1},\n{9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1},\n{1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},\n{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}};\n\n}\n\n\n\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\/* \u8fd9\u4e2a\u6587\u4ef6\u662f\u7528\u6765\u5206\u6790Marching Cubes\u7b97\u6cd5\u7684 *\/ \/\/\u9996\u5148\u5bfc\u5165\u4e86\u4e00\u4e9b\u5e38\u7528\u7684\u5305 import java.awt.*; import java.awt.event.*; import ja&hellip; <\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[16],"tags":[],"class_list":["post-749","post","type-post","status-publish","format-standard","hentry","category-study"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=\/wp\/v2\/posts\/749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=749"}],"version-history":[{"count":0,"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=\/wp\/v2\/posts\/749\/revisions"}],"wp:attachment":[{"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opgogo.com\/blog2\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}