--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit JOGL sample program.\r
+ * --------------------------------------------------------------------------------\r
+ * The MIT License\r
+ * Copyright (c) 2008 nyatla\r
+ * airmail(at)ebony.plala.or.jp\r
+ * http://nyatla.jp/nyartoolkit/\r
+ * \r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy\r
+ * of this software and associated documentation files (the "Software"), to deal\r
+ * in the Software without restriction, including without limitation the rights\r
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+ * copies of the Software, and to permit persons to whom the Software is\r
+ * furnished to do so, subject to the following conditions:\r
+ * The above copyright notice and this permission notice shall be included in\r
+ * all copies or substantial portions of the Software.\r
+ * \r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+ * THE SOFTWARE.\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.jogl.sample;\r
+\r
+import java.awt.event.*;\r
+import java.awt.*;\r
+import javax.media.Buffer;\r
+import javax.media.opengl.*;\r
+import com.sun.opengl.util.*;\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.*;\r
+import jp.nyatla.nyartoolkit.core.param.*;\r
+import jp.nyatla.nyartoolkit.core.transmat.*;\r
+import jp.nyatla.nyartoolkit.core.raster.rgb.*;\r
+import jp.nyatla.nyartoolkit.detector.*;\r
+import jp.nyatla.nyartoolkit.jogl.utils.*;\r
+import javax.imageio.*;\r
+import java.awt.image.*;\r
+import java.io.*;\r
+import jp.nyatla.nyartoolkit.utils.j2se.*;\r
+\r
+/**\r
+ * simpleLiteと同じようなテストプログラム 出来る限りARToolKitのサンプルと似せて作ってあります。 最も一致する"Hiro"マーカーを一つ選択して、その上に立方体を表示します。\r
+ * \r
+ */\r
+public class JpegSimpleLite implements GLEventListener\r
+{\r
+ private Animator _animator;\r
+\r
+ private NyARRgbRaster_RGB _src_image;\r
+\r
+ private GL _gl;\r
+\r
+ private NyARGLUtil _glnya;\r
+\r
+ // NyARToolkit関係\r
+ private NyARSingleDetectMarker _nya;\r
+\r
+ private NyARParam _ar_param;\r
+\r
+ private Object _sync_object=new Object();\r
+ private double[] _camera_projection = new double[16];\r
+\r
+ /**\r
+ * 立方体を書く\r
+ * \r
+ */\r
+ void drawCube()\r
+ {\r
+ // Colour cube data.\r
+ int polyList = 0;\r
+ float fSize = 0.5f;// マーカーサイズに対して0.5倍なので、4cmの立方体\r
+ int f, i;\r
+ float[][] cube_vertices = new float[][] { { 1.0f, 1.0f, 1.0f }, { 1.0f, -1.0f, 1.0f }, { -1.0f, -1.0f, 1.0f }, { -1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, -1.0f }, { 1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f }, { -1.0f, 1.0f, -1.0f } };\r
+ float[][] cube_vertex_colors = new float[][] { { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 1.0f }, { 1.0f, 0.0f, 1.0f }, { 1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f } };\r
+ int cube_num_faces = 6;\r
+ short[][] cube_faces = new short[][] { { 3, 2, 1, 0 }, { 2, 3, 7, 6 }, { 0, 1, 5, 4 }, { 3, 0, 4, 7 }, { 1, 2, 6, 5 }, { 4, 5, 6, 7 } };\r
+\r
+ if (polyList == 0) {\r
+ polyList = _gl.glGenLists(1);\r
+ _gl.glNewList(polyList, GL.GL_COMPILE);\r
+ _gl.glBegin(GL.GL_QUADS);\r
+ for (f = 0; f < cube_num_faces; f++)\r
+ for (i = 0; i < 4; i++) {\r
+ _gl.glColor3f(cube_vertex_colors[cube_faces[f][i]][0], cube_vertex_colors[cube_faces[f][i]][1], cube_vertex_colors[cube_faces[f][i]][2]);\r
+ _gl.glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize);\r
+ }\r
+ _gl.glEnd();\r
+ _gl.glColor3f(0.0f, 0.0f, 0.0f);\r
+ for (f = 0; f < cube_num_faces; f++) {\r
+ _gl.glBegin(GL.GL_LINE_LOOP);\r
+ for (i = 0; i < 4; i++)\r
+ _gl.glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize);\r
+ _gl.glEnd();\r
+ }\r
+ _gl.glEndList();\r
+ }\r
+\r
+ _gl.glPushMatrix(); // Save world coordinate system.\r
+ _gl.glTranslatef(0.0f, 0.0f, 0.5f); // Place base of cube on marker surface.\r
+ _gl.glRotatef(0.0f, 0.0f, 0.0f, 1.0f); // Rotate about z axis.\r
+ _gl.glDisable(GL.GL_LIGHTING); // Just use colours.\r
+ _gl.glCallList(polyList); // Draw the cube.\r
+ _gl.glPopMatrix(); // Restore world coordinate system.\r
+\r
+ }\r
+\r
+ public JpegSimpleLite(NyARParam i_param, NyARCode i_ar_code,BufferedImage i_image) throws NyARException,IOException\r
+ {\r
+ this._ar_param = i_param;\r
+\r
+ Frame frame = new Frame("Jpeg reader demo");\r
+ // GL対応のRGBラスタオブジェクト\r
+ this._src_image = new NyARRgbRaster_RGB(i_image.getWidth(),i_image.getHeight(),true);\r
+ NyARRasterImageIO.copy(i_image, this._src_image);\r
+ \r
+ \r
+ // NyARToolkitの準備\r
+ this._ar_param.changeScreenSize(i_image.getWidth(),i_image.getHeight());\r
+ this._nya = new NyARSingleDetectMarker(this._ar_param, i_ar_code, 80.0,this._src_image.getBufferType());\r
+ this._nya.setContinueMode(false);// ここをtrueにすると、transMatContinueモード(History計算)になります。\r
+ \r
+ // 3Dを描画するコンポーネント\r
+ GLCanvas canvas = new GLCanvas();\r
+ frame.add(canvas);\r
+ canvas.addGLEventListener(this);\r
+ frame.addWindowListener(new WindowAdapter() {\r
+ public void windowClosing(WindowEvent e)\r
+ {\r
+ System.exit(0);\r
+ }\r
+ });\r
+\r
+ frame.setVisible(true);\r
+ Insets ins = frame.getInsets();\r
+ frame.setSize(i_image.getWidth() + ins.left + ins.right, i_image.getHeight() + ins.top + ins.bottom);\r
+ canvas.setBounds(ins.left, ins.top, i_image.getWidth(), i_image.getHeight());\r
+ }\r
+\r
+ public void init(GLAutoDrawable drawable)\r
+ {\r
+ this._gl = drawable.getGL();\r
+ this._gl.glEnable(GL.GL_DEPTH_TEST);\r
+ this._gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);\r
+ // NyARToolkitの準備\r
+ try {\r
+ // NyARToolkit用の支援クラス\r
+ _glnya = new NyARGLUtil(_gl);\r
+ // キャプチャ開始\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ // カメラパラメータの計算\r
+ this._glnya.toCameraFrustumRH(this._ar_param,this._camera_projection);\r
+ this._animator = new Animator(drawable);\r
+ this._animator.start();\r
+ return;\r
+ }\r
+\r
+ public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height)\r
+ {\r
+ _gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);\r
+ _gl.glViewport(0, 0, width, height);\r
+\r
+ // 視体積の設定\r
+ _gl.glMatrixMode(GL.GL_PROJECTION);\r
+ _gl.glLoadIdentity();\r
+ // 見る位置\r
+ _gl.glMatrixMode(GL.GL_MODELVIEW);\r
+ _gl.glLoadIdentity();\r
+ }\r
+\r
+ private boolean _is_marker_exist=false;\r
+ private NyARTransMatResult __display_transmat_result = new NyARTransMatResult();\r
+\r
+ private double[] __display_wk = new double[16];\r
+\r
+ public void display(GLAutoDrawable drawable)\r
+ {\r
+ NyARTransMatResult transmat_result = __display_transmat_result;\r
+ // 背景を書く\r
+ this._gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear the buffers for new frame.\r
+ try{\r
+ this._is_marker_exist=this._nya.detectMarkerLite(this._src_image);\r
+ this._glnya.drawBackGround(this._src_image, 1.0);\r
+ synchronized(this._sync_object){\r
+ // マーカーがあれば、立方体を描画\r
+ if (this._is_marker_exist){\r
+ System.out.println(this._nya.getConfidence());\r
+ // マーカーの一致度を調査するならば、ここでnya.getConfidence()で一致度を調べて下さい。\r
+ // Projection transformation.\r
+ _gl.glMatrixMode(GL.GL_PROJECTION);\r
+ _gl.glLoadMatrixd(_camera_projection, 0);\r
+ _gl.glMatrixMode(GL.GL_MODELVIEW);\r
+ // Viewing transformation.\r
+ _gl.glLoadIdentity();\r
+ // 変換行列を取得\r
+ _nya.getTransmationMatrix(transmat_result);\r
+ // 変換行列をOpenGL形式に変換\r
+ _glnya.toCameraViewRH(transmat_result, __display_wk);\r
+ _gl.glLoadMatrixd(__display_wk, 0);\r
+ \r
+ // All other lighting and geometry goes here.\r
+ drawCube();\r
+ }\r
+ }\r
+ Thread.sleep(1);// タスク実行権限を一旦渡す\r
+ }catch(Exception e){\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+ public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged)\r
+ {\r
+ }\r
+\r
+ private final static String CARCODE_FILE = "../../Data/patt.hiro";\r
+\r
+ private final static String PARAM_FILE = "../../Data/camera_para.dat";\r
+ private final static String SAMPLE_FILES = "../../Data/staticimage_sample.png";\r
+\r
+ public static void main(String[] args)\r
+ {\r
+ try {\r
+ NyARParam param = new NyARParam();\r
+ param.loadARParamFromFile(PARAM_FILE);\r
+ NyARCode code = new NyARCode(16, 16);\r
+ code.loadARPattFromFile(CARCODE_FILE);\r
+ BufferedImage src_image = ImageIO.read(new File(SAMPLE_FILES));\r
+\r
+ new JpegSimpleLite(param, code,src_image);\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ return;\r
+ }\r
+}\r
*/\r
public class NyARPerspectiveParamGenerator_O1 extends NyARPerspectiveParamGenerator\r
{\r
- public NyARPerspectiveParamGenerator_O1(int i_local_x,int i_local_y,int i_width, int i_height)\r
+ public NyARPerspectiveParamGenerator_O1(int i_local_x, int i_local_y, int i_width, int i_height)\r
{\r
- super(i_local_x,i_local_y,i_width,i_height);\r
+ super(1, 1, i_width, i_height);\r
return;\r
- }/*\r
- final public boolean getParam(final NyARIntPoint2d[] i_vertex,double[] o_param)throws NyARException\r
+ }\r
+\r
+\r
+ final public boolean getParam(final NyARIntPoint2d[] i_vertex, double[] o_param) throws NyARException\r
{\r
- double G,H;\r
- double w1,w2,w3,w4;\r
- final double x0=i_vertex[0].x;\r
- final double x1=i_vertex[1].x;\r
- final double x2=i_vertex[2].x;\r
- final double x3=i_vertex[3].x;\r
- final double y0=i_vertex[0].y;\r
- final double y1=i_vertex[1].y;\r
- final double y2=i_vertex[2].y;\r
- final double y3=i_vertex[3].y;\r
- final double ltx=this._local_x;\r
- final double lty=this._local_y;\r
- final double rbx=ltx+this._width;\r
- final double rby=lty+this._height;\r
-\r
- \r
- w1=-y3+y0;\r
- w2= y2-y1;\r
- final double la2_33=ltx*w1+rbx*w2;//これが0になるのはまずい。\r
- final double la2_34=(rby*(-y3+y2)+lty*(y0-y1))/la2_33;\r
- final double ra2_3 =(-w1-w2)/la2_33;\r
- \r
- w1=-x3+x0;\r
- w2=x2-x1;\r
- final double la1_33=ltx*w1+rbx*w2;//これが0になるのはまずい。\r
- \r
- //GHを計算\r
- H=(ra2_3-((-w1-w2)/la1_33))/(la2_34-((rby*(-x3+x2)+lty*(x0-x1))/la1_33));\r
- G=ra2_3-la2_34*H;\r
- o_param[7]=H;\r
- o_param[6]=G;\r
-\r
- //残りを計算\r
- w3=rby-lty;\r
- w4=rbx-ltx;\r
- w1=(y2-y1-H*(-rby*y2+lty*y1)-G*(-rbx*y2+rbx*y1))/w3;\r
- w2=(y1-y0-H*(-lty*y1+lty*y0)-G*(-rbx*y1+ltx*y0))/w4;\r
- o_param[5]=y0*(1+H*lty+G*ltx)-w1*lty-w2*ltx;\r
- o_param[4]=w1;\r
- o_param[3]=w2;\r
- \r
- \r
- w1=(x2-x1-H*(-rby*x2+lty*x1)-G*(-rbx*x2+rbx*x1))/w3;\r
- w2=(x1-x0-H*(-lty*x1+lty*x0)-G*(-rbx*x1+ltx*x0))/w4;\r
- o_param[2]=x0*(1+H*lty+G*ltx)-w1*lty-w2*ltx;\r
- o_param[1]=w1;\r
- o_param[0]=w2;\r
+ final double ltx = this._local_x;\r
+ final double lty = this._local_y;\r
+ final double rbx = ltx + this._width;\r
+ final double rby = lty + this._height;\r
+\r
+ double det_1;\r
+ double a13, a14, a23, a24, a33, a34, a43, a44;\r
+ double b11, b12, b13, b14, b21, b22, b23, b24, b31, b32, b33, b34, b41, b42, b43, b44;\r
+ double t1, t2, t3, t4, t5, t6;\r
+ double v1, v2, v3, v4;\r
+ double kx0, kx1, kx2, kx3, kx4, kx5, kx6, kx7;\r
+ double ky0, ky1, ky2, ky3, ky4, ky5, ky6, ky7;\r
+ {\r
+ v1 = i_vertex[0].x;\r
+ v2 = i_vertex[1].x;\r
+ v3 = i_vertex[2].x;\r
+ v4 = i_vertex[3].x;\r
+ a13 = -ltx * v1;\r
+ a14 = -lty * v1;\r
+ a23 = -rbx * v2;\r
+ a24 = -lty * v2;\r
+ a33 = -rbx * v3;\r
+ a34 = -rby * v3;\r
+ a43 = -ltx * v4;\r
+ a44 = -rby * v4;\r
+\r
+ t1 = a33 * a44 - a34 * a43;\r
+ t4 = a34 * ltx - rbx * a44;\r
+ t5 = rbx * a43 - a33 * ltx;\r
+ t2 = rby * (a34 - a44);\r
+ t3 = rby * (a43 - a33);\r
+ t6 = rby * (rbx - ltx);\r
+\r
+ b21 = -a23 * t4 - a24 * t5 - rbx * t1;\r
+ b11 = (a23 * t2 + a24 * t3) + lty * t1;\r
+ b31 = (a24 * t6 - rbx * t2) + lty * t4;\r
+ b41 = (-rbx * t3 - a23 * t6) + lty * t5;\r
+\r
+ t1 = a43 * a14 - a44 * a13;\r
+ t2 = a44 * lty - rby * a14;\r
+ t3 = rby * a13 - a43 * lty;\r
+ t4 = ltx * (a44 - a14);\r
+ t5 = ltx * (a13 - a43);\r
+ t6 = ltx * (lty - rby);\r
+\r
+ b12 = -rby * t1 - a33 * t2 - a34 * t3;\r
+ b22 = (a33 * t4 + a34 * t5) + rbx * t1;\r
+ b32 = (-a34 * t6 - rby * t4) + rbx * t2;\r
+ b42 = (-rby * t5 + a33 * t6) + rbx * t3;\r
+\r
+ t1 = a13 * a24 - a14 * a23;\r
+ t4 = a14 * rbx - ltx * a24;\r
+ t5 = ltx * a23 - a13 * rbx;\r
+ t2 = lty * (a14 - a24);\r
+ t3 = lty * (a23 - a13);\r
+ t6 = lty * (ltx - rbx);\r
+\r
+ b23 = -a43 * t4 - a44 * t5 - ltx * t1;\r
+ b13 = (a43 * t2 + a44 * t3) + rby * t1;\r
+ b33 = (a44 * t6 - ltx * t2) + rby * t4;\r
+ b43 = (-ltx * t3 - a43 * t6) + rby * t5;\r
+\r
+ t1 = a23 * a34 - a24 * a33;\r
+ t2 = a24 * rby - lty * a34;\r
+ t3 = lty * a33 - a23 * rby;\r
+ t4 = rbx * (a24 - a34);\r
+ t5 = rbx * (a33 - a23);\r
+ t6 = rbx * (rby - lty);\r
+\r
+ b14 = -lty * t1 - a13 * t2 - a14 * t3;\r
+ b24 = a13 * t4 + a14 * t5 + ltx * t1;\r
+ b34 = -a14 * t6 - lty * t4 + ltx * t2;\r
+ b44 = -lty * t5 + a13 * t6 + ltx * t3;\r
+\r
+ det_1 = (ltx * (b11 + b14) + rbx * (b12 + b13));\r
+ if (det_1 == 0) {\r
+ return false;\r
+ }\r
+ det_1 = 1 / det_1;\r
+\r
+ kx0 = (b11 * v1 + b12 * v2 + b13 * v3 + b14 * v4) * det_1;\r
+ kx1 = (b11 + b12 + b13 + b14) * det_1;\r
+ kx2 = (b21 * v1 + b22 * v2 + b23 * v3 + b24 * v4) * det_1;\r
+ kx3 = (b21 + b22 + b23 + b24) * det_1;\r
+ kx4 = (b31 * v1 + b32 * v2 + b33 * v3 + b34 * v4) * det_1;\r
+ kx5 = (b31 + b32 + b33 + b34) * det_1;\r
+ kx6 = (b41 * v1 + b42 * v2 + b43 * v3 + b44 * v4) * det_1;\r
+ kx7 = (b41 + b42 + b43 + b44) * det_1;\r
+ }\r
+ {\r
+ v1 = i_vertex[0].y;\r
+ v2 = i_vertex[1].y;\r
+ v3 = i_vertex[2].y;\r
+ v4 = i_vertex[3].y;\r
+ a13 = -ltx * v1;\r
+ a14 = -lty * v1;\r
+ a23 = -rbx * v2;\r
+ a24 = -lty * v2;\r
+ a33 = -rbx * v3;\r
+ a34 = -rby * v3;\r
+ a43 = -ltx * v4;\r
+ a44 = -rby * v4;\r
+\r
+ t1 = a33 * a44 - a34 * a43;\r
+ t4 = a34 * ltx - rbx * a44;\r
+ t5 = rbx * a43 - a33 * ltx;\r
+ t2 = rby * (a34 - a44);\r
+ t3 = rby * (a43 - a33);\r
+ t6 = rby * (rbx - ltx);\r
+\r
+ b21 = -a23 * t4 - a24 * t5 - rbx * t1;\r
+ b11 = (a23 * t2 + a24 * t3) + lty * t1;\r
+ b31 = (a24 * t6 - rbx * t2) + lty * t4;\r
+ b41 = (-rbx * t3 - a23 * t6) + lty * t5;\r
+\r
+ t1 = a43 * a14 - a44 * a13;\r
+ t2 = a44 * lty - rby * a14;\r
+ t3 = rby * a13 - a43 * lty;\r
+ t4 = ltx * (a44 - a14);\r
+ t5 = ltx * (a13 - a43);\r
+ t6 = ltx * (lty - rby);\r
+\r
+ b12 = -rby * t1 - a33 * t2 - a34 * t3;\r
+ b22 = (a33 * t4 + a34 * t5) + rbx * t1;\r
+ b32 = (-a34 * t6 - rby * t4) + rbx * t2;\r
+ b42 = (-rby * t5 + a33 * t6) + rbx * t3;\r
+\r
+ t1 = a13 * a24 - a14 * a23;\r
+ t4 = a14 * rbx - ltx * a24;\r
+ t5 = ltx * a23 - a13 * rbx;\r
+ t2 = lty * (a14 - a24);\r
+ t3 = lty * (a23 - a13);\r
+ t6 = lty * (ltx - rbx);\r
+\r
+ b23 = -a43 * t4 - a44 * t5 - ltx * t1;\r
+ b13 = (a43 * t2 + a44 * t3) + rby * t1;\r
+ b33 = (a44 * t6 - ltx * t2) + rby * t4;\r
+ b43 = (-ltx * t3 - a43 * t6) + rby * t5;\r
+\r
+ t1 = a23 * a34 - a24 * a33;\r
+ t2 = a24 * rby - lty * a34;\r
+ t3 = lty * a33 - a23 * rby;\r
+ t4 = rbx * (a24 - a34);\r
+ t5 = rbx * (a33 - a23);\r
+ t6 = rbx * (rby - lty);\r
+\r
+ b14 = -lty * t1 - a13 * t2 - a14 * t3;\r
+ b24 = a13 * t4 + a14 * t5 + ltx * t1;\r
+ b34 = -a14 * t6 - lty * t4 + ltx * t2;\r
+ b44 = -lty * t5 + a13 * t6 + ltx * t3;\r
+\r
+ det_1 = (ltx * (b11 + b14) + rbx * (b12 + b13));\r
+ if (det_1 == 0) {\r
+ return false;\r
+ }\r
+ det_1 = 1 / det_1;\r
+\r
+ ky0 = (b11 * v1 + b12 * v2 + b13 * v3 + b14 * v4) * det_1;\r
+ ky1 = (b11 + b12 + b13 + b14) * det_1;\r
+ ky2 = (b21 * v1 + b22 * v2 + b23 * v3 + b24 * v4) * det_1;\r
+ ky3 = (b21 + b22 + b23 + b24) * det_1;\r
+ ky4 = (b31 * v1 + b32 * v2 + b33 * v3 + b34 * v4) * det_1;\r
+ ky5 = (b31 + b32 + b33 + b34) * det_1;\r
+ ky6 = (b41 * v1 + b42 * v2 + b43 * v3 + b44 * v4) * det_1;\r
+ ky7 = (b41 + b42 + b43 + b44) * det_1;\r
+ }\r
+\r
+ det_1 = kx5 * (-ky7) - (-ky5) * kx7;\r
+ if (det_1 == 0) {\r
+ return false;\r
+ }\r
+ det_1 = 1 / det_1;\r
+\r
+ double C, F;\r
+ o_param[2] = C = (-ky7 * det_1) * (kx4 - ky4) + (ky5 * det_1) * (kx6 - ky6); // C\r
+ o_param[5] = F = (-kx7 * det_1) * (kx4 - ky4) + (kx5 * det_1) * (kx6 - ky6); // F\r
+ o_param[6] = kx4 - C * kx5;\r
+ o_param[7] = kx6 - C * kx7;\r
+ o_param[0] = kx0 - C * kx1;\r
+ o_param[1] = kx2 - C * kx3;\r
+ o_param[3] = ky0 - F * ky1;\r
+ o_param[4] = ky2 - F * ky3;\r
return true;\r
- }*/\r
+ }\r
}\r