2 * PROJECT: NyARToolkit
\r
3 * --------------------------------------------------------------------------------
\r
4 * The NyARToolkit is Java version ARToolkit class library.
\r
5 * Copyright (C)2008 R.Iizuka
\r
7 * This program is free software; you can redistribute it and/or
\r
8 * modify it under the terms of the GNU General Public License
\r
9 * as published by the Free Software Foundation; either version 2
\r
10 * of the License, or (at your option) any later version.
\r
12 * This program is distributed in the hope that it will be useful,
\r
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
15 * GNU General Public License for more details.
\r
17 * You should have received a copy of the GNU General Public License
\r
18 * along with this framework; if not, write to the Free Software
\r
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
21 * For further information please contact.
\r
22 * http://nyatla.jp/nyatoolkit/
\r
23 * <airmail(at)ebony.plala.or.jp>
\r
26 package jp.nyatla.nyartoolkit.dev;
\r
29 import jp.nyatla.nyartoolkit.NyARException;
\r
30 import jp.nyatla.nyartoolkit.core.raster.rgb.*;
\r
31 import jp.nyatla.nyartoolkit.core.rasterreader.*;
\r
32 import jp.nyatla.nyartoolkit.core.squaredetect.NyARSquare;
\r
33 import jp.nyatla.nyartoolkit.core.types.*;
\r
34 import jp.nyatla.nyartoolkit.core.types.matrix.*;
\r
35 import jp.nyatla.nyartoolkit.core.pickup.*;
\r
38 class NyARDoubleLine2d
\r
41 void set(NyARDoublePoint2d i_point_a,NyARDoublePoint2d i_point_b)
\r
43 this.x=i_point_a.x-i_point_b.x;
\r
44 this.y=i_point_a.y-i_point_b.y;
\r
47 void add(NyARDoubleLine2d i_param,NyARDoubleLine2d o_result)
\r
49 o_result.x=this.x+i_param.x;
\r
50 o_result.y=this.y+i_param.y;
\r
53 void sum(NyARDoubleLine2d i_param,NyARDoubleLine2d o_result)
\r
55 o_result.x=this.x-i_param.x;
\r
56 o_result.y=this.y-i_param.y;
\r
64 double cross(NyARDoubleLine2d i_param)
\r
66 return this.x*i_param.y-this.y*i_param.x;
\r
73 double dot(NyARDoubleLine2d i_param)
\r
75 return this.x*i_param.x+this.y*i_param.y;
\r
84 return Math.sqrt(this.x*this.x+this.y*this.y);
\r
95 public static LineParam[] createArray(int i_length)
\r
97 LineParam[] result=new LineParam[i_length];
\r
98 for(int i=result.length-1;i>=0;i--){
\r
99 result[i]=new LineParam();
\r
112 public Complex(double i_r,double i_i)
\r
117 public void add(Complex i_v)
\r
122 public void sub(Complex i_v)
\r
127 public void sub(Complex i_v1,Complex i_v2)
\r
129 this.r=i_v1.r-i_v2.r;
\r
130 this.i=i_v1.i-i_v2.i;
\r
133 public void mul(Complex i_v)
\r
138 final double d2=Math.sqrt(r*r+i*i);
\r
139 final double s2=Math.acos(r/d2);
\r
142 final double d1=Math.sqrt(r*r+i*i);
\r
143 final double s1=Math.acos(r/d1);
\r
145 this.r=d1*d2*Math.cos(s2+s1);
\r
146 this.i=d1*d2*Math.sin(s2+s1);
\r
149 public void div(Complex i_v)
\r
154 final double d2=Math.sqrt(r*r+i*i);
\r
155 final double s2=Math.acos(r/d2);
\r
158 final double d1=Math.sqrt(r*r+i*i);
\r
159 final double s1=Math.acos(r/d1);
\r
161 this.r=d2/d1*Math.cos(s2/s1);
\r
162 this.i=d2/d1*Math.sin(s2/s1);
\r
165 public void pow(Complex i_v,double i_base)
\r
170 double d=Math.sqrt(r*r+i*i);
\r
171 final double s=Math.acos(r/d)*i_base;
\r
172 d=Math.pow(d,i_base);
\r
173 this.r=d*Math.cos(s);
\r
174 this.i=d*Math.sin(s);
\r
176 public void sqrt(Complex i_v)
\r
181 double d=Math.sqrt(r*r+i*i);
\r
182 final double s=Math.acos(r/d)*0.5;
\r
184 this.r=d*Math.cos(s);
\r
185 this.i=d*Math.sin(s);
\r
187 public double dist()
\r
189 return Math.sqrt(this.r*this.r+this.i*this.i);
\r
196 * 24ビットカラーのマーカーを保持するために使うクラスです。 このクラスは、ARToolkitのパターンと、ラスタから取得したパターンを保持します。
\r
200 public class NyARColorPatt_DiagonalRatio implements INyARColorPatt
\r
202 private int[] _patdata;
\r
203 private NyARBufferReader _buf_reader;
\r
204 private NyARRgbPixelReader_INT1D_X8R8G8B8_32 _pixelreader;
\r
205 private NyARIntSize _size;
\r
207 public final int getWidth()
\r
209 return this._size.w;
\r
212 public final int getHeight()
\r
214 return this._size.h;
\r
217 public final NyARIntSize getSize()
\r
222 public final INyARBufferReader getBufferReader()
\r
224 return this._buf_reader;
\r
227 public final INyARRgbPixelReader getRgbPixelReader()
\r
229 return this._pixelreader;
\r
231 NyARDoubleMatrix44 _invmat=new NyARDoubleMatrix44();
\r
236 public NyARColorPatt_DiagonalRatio(int i_model)
\r
238 int resolution=(1<<i_model)+1;
\r
239 this._size=new NyARIntSize(resolution,resolution);
\r
240 this._patdata = new int[resolution*resolution];
\r
241 this._buf_reader=new NyARBufferReader(this._patdata,NyARBufferReader.BUFFERFORMAT_INT1D_X8R8G8B8_32);
\r
242 this._pixelreader=new NyARRgbPixelReader_INT1D_X8R8G8B8_32(this._patdata,this._size);
\r
244 this._vertex_map=NyARDoublePoint2d.create2dArray(this._size.h,this._size.w);
\r
248 public NyARDoublePoint2d[][] _vertex_map;
\r
249 public boolean pickFromRaster(INyARRgbRaster image, NyARSquare i_square)throws NyARException
\r
251 NyARDoublePoint2d center=new NyARDoublePoint2d();
\r
253 solvCrossPoint(i_square.sqvertex[0],i_square.sqvertex[2],i_square.sqvertex[1],i_square.sqvertex[3],center);
\r
255 int[] rgb_tmp=new int[3];
\r
256 INyARRgbPixelReader reader=image.getRgbPixelReader();
\r
257 //頂点マトリクスの計算(2=2分割,3=4分割,4=8分割)
\r
258 NyARDoublePoint2d[][] vertex_map=this._vertex_map;
\r
259 solvLinePointArray(center,this._size.h-1,i_square.sqvertex,vertex_map);
\r
260 for(int i=0;i<this._size.h;i++){
\r
261 for(int i2=0;i2<this._size.w;i2++){
\r
262 if(vertex_map[i][i2].x>320||vertex_map[i][i2].y>240||vertex_map[i][i2].x<0||vertex_map[i][i2].y<0)
\r
264 //System.out.println(vertex_map[i][i2].x+","+vertex_map[i][i2].y);
\r
265 this._patdata[i2+i*this._size.w]=0;
\r
268 reader.getPixel((int)vertex_map[i][i2].x,(int)vertex_map[i][i2].y,rgb_tmp);
\r
269 this._patdata[i2+i*this._size.w]=(rgb_tmp[0]<<16)|(rgb_tmp[1]<<8)|rgb_tmp[2];
\r
275 * 直線をscaleで2^n分割した配列を計算する。
\r
281 private void solvLinePointArray4(NyARDoublePoint2d i_center,int i_div,NyARDoublePoint2d[] i_vertex,NyARDoublePoint2d[][] o_result)
\r
283 //分割直線の計算(2=2分割,3=4分割,4=8分割)
\r
285 o_result[0][0].setValue(i_center);
\r
289 NyARDoublePoint2d vec01=new NyARDoublePoint2d();
\r
290 NyARDoublePoint2d vec12=new NyARDoublePoint2d();
\r
291 NyARDoublePoint2d vec03=new NyARDoublePoint2d();
\r
292 NyARDoublePoint2d vec32=new NyARDoublePoint2d();
\r
293 vec01.vecSub(i_vertex[1],i_vertex[0]);
\r
294 vec12.vecSub(i_vertex[2],i_vertex[1]);
\r
295 vec03.vecSub(i_vertex[3],i_vertex[0]);
\r
296 vec32.vecSub(i_vertex[2],i_vertex[3]);
\r
298 //中心点から[0]->[1]と平行なベクトルの終点を計算
\r
299 NyARDoublePoint2d vec01_ep=new NyARDoublePoint2d();
\r
300 vec01_ep.vecAdd(vec01,i_center);
\r
301 //中心点から[3]->[2]と平行なベクトルの終点を計算
\r
302 NyARDoublePoint2d vec32_ep=new NyARDoublePoint2d();
\r
303 vec32_ep.vecAdd(vec32,i_center);
\r
305 NyARDoublePoint2d cx_e=new NyARDoublePoint2d();
\r
306 cx_e.x=(vec01_ep.x+vec32_ep.x)/2;
\r
307 cx_e.y=(vec01_ep.y+vec32_ep.y)/2;
\r
309 //ベクトル[1]->[2]との交差点を計算
\r
310 solvCrossPoint(i_center,cx_e,i_vertex[1],i_vertex[2],o_result[1][2]);
\r
311 //ベクトル[3]->[0]との交差点を計算
\r
312 solvCrossPoint(i_center,cx_e,i_vertex[3],i_vertex[0],o_result[1][0]);
\r
316 //中心点から[1]->[2]と平行なベクトルの終点を計算
\r
317 NyARDoublePoint2d vec12_ep=new NyARDoublePoint2d();
\r
318 vec12_ep.vecAdd(vec12,i_center);
\r
319 //中心点から[0]->[3]と平行なベクトルの終点を計算
\r
320 NyARDoublePoint2d vec03_ep=new NyARDoublePoint2d();
\r
321 vec03_ep.vecAdd(vec03,i_center);
\r
323 NyARDoublePoint2d cx_e2=new NyARDoublePoint2d();
\r
324 cx_e2.x=(vec12_ep.x+vec03_ep.x)/2;
\r
325 cx_e2.y=(vec12_ep.y+vec03_ep.y)/2;
\r
327 //cx_e2とベクトル[0]->[1]との交差点を計算
\r
328 solvCrossPoint(i_center,cx_e2,i_vertex[0],i_vertex[1],o_result[0][1]);
\r
329 //ベクトル[3]->[2]との交差点を計算
\r
330 solvCrossPoint(i_center,cx_e2,i_vertex[3],i_vertex[2],o_result[2][1]);
\r
337 private void solvLinePointArray(NyARDoublePoint2d i_center,int i_div,NyARDoublePoint2d[] i_vertex,NyARDoublePoint2d[][] o_result)
\r
340 o_result[0][0].setValue(i_center);
\r
343 NyARDoublePoint2d vt=new NyARDoublePoint2d();
\r
344 vt.x=(i_vertex[0].x+i_vertex[1].x)/2;
\r
345 vt.y=(i_vertex[0].y+i_vertex[1].y)/2;
\r
347 NyARDoublePoint2d vb=new NyARDoublePoint2d();
\r
348 vb.x=(i_vertex[2].x+i_vertex[3].x)/2;
\r
349 vb.y=(i_vertex[2].y+i_vertex[3].y)/2;
\r
352 vt.vecAdd(i_center);
\r
354 //[0][1]->[2][3]ベクトル
\r
355 solvCrossPoint(vt,i_center,i_vertex[0],i_vertex[1],o_result[1][2]);
\r
356 //[0][1]->[2][3]ベクトル:v[3][0]
\r
357 solvCrossPoint(vt,i_center,i_vertex[3],i_vertex[2],o_result[1][0]);
\r
364 NyARDoublePoint2d vec01=new NyARDoublePoint2d();
\r
365 NyARDoublePoint2d vec12=new NyARDoublePoint2d();
\r
366 NyARDoublePoint2d vec03=new NyARDoublePoint2d();
\r
367 NyARDoublePoint2d vec32=new NyARDoublePoint2d();
\r
368 vec01.vecSub(i_vertex[1],i_vertex[0]);
\r
369 vec12.vecSub(i_vertex[2],i_vertex[1]);
\r
370 vec03.vecSub(i_vertex[3],i_vertex[0]);
\r
371 vec32.vecSub(i_vertex[2],i_vertex[3]);
\r
373 //中心点から[0]->[1]と平行なベクトルの終点を計算
\r
374 NyARDoublePoint2d vec01_ep=new NyARDoublePoint2d();
\r
375 vec01_ep.vecSum(vec01,i_center);
\r
376 //中心点から[3]->[2]と平行なベクトルの終点を計算
\r
377 NyARDoublePoint2d vec32_ep=new NyARDoublePoint2d();
\r
378 vec32_ep.vecSum(vec32,i_center);
\r
380 NyARDoublePoint2d cx_e=new NyARDoublePoint2d();
\r
381 cx_e.x=(vec01_ep.x+vec32_ep.x)/2;
\r
382 cx_e.y=(vec01_ep.y+vec32_ep.y)/2;
\r
384 //ベクトル[1]->[2]との交差点を計算
\r
385 solvCrossPoint(i_center,cx_e,i_vertex[1],i_vertex[2],o_result[1][2]);
\r
386 //ベクトル[3]->[0]との交差点を計算
\r
387 solvCrossPoint(i_center,cx_e,i_vertex[3],i_vertex[0],o_result[1][0]);
\r
391 //中心点から[1]->[2]と平行なベクトルの終点を計算
\r
392 NyARDoublePoint2d vec12_ep=new NyARDoublePoint2d();
\r
393 vec12_ep.vecSum(vec12,i_center);
\r
394 //中心点から[0]->[3]と平行なベクトルの終点を計算
\r
395 NyARDoublePoint2d vec03_ep=new NyARDoublePoint2d();
\r
396 vec03_ep.vecSum(vec03,i_center);
\r
398 NyARDoublePoint2d cx_e2=new NyARDoublePoint2d();
\r
399 cx_e2.x=(vec12_ep.x+vec03_ep.x)/2;
\r
400 cx_e2.y=(vec12_ep.y+vec03_ep.y)/2;
\r
402 //cx_e2とベクトル[0]->[1]との交差点を計算
\r
403 solvCrossPoint(i_center,cx_e2,i_vertex[0],i_vertex[1],o_result[0][1]);
\r
404 //ベクトル[3]->[2]との交差点を計算
\r
405 solvCrossPoint(i_center,cx_e2,i_vertex[3],i_vertex[2],o_result[2][1]);
\r
415 private void solvLinePointArray3(NyARDoublePoint2d i_canter,int i_div,NyARDoublePoint2d[] i_vertex,NyARDoublePoint2d[][] o_result)
\r
417 NyARDoublePoint2d scale=new NyARDoublePoint2d();
\r
418 //分割直線の計算(2=2分割,3=4分割,4=8分割)
\r
420 NyARDoublePoint2d[] r=o_result[d/2];
\r
422 r[0].x=i_vertex[0].x;
\r
423 r[0].y=i_vertex[0].y;
\r
424 r[d].x=i_vertex[2].x;
\r
425 r[d].y=i_vertex[2].y;
\r
426 scale.x=(i_canter.x-i_vertex[0].x)/(i_vertex[2].x-i_vertex[0].x);
\r
427 scale.y=(i_canter.y-i_vertex[0].y)/(i_vertex[2].y-i_vertex[0].y);
\r
429 solvLinePointArray_b(scale,0,d,r);
\r
431 for(int i=0;i<=d;i++){
\r
432 o_result[i][i].x=r[i].x;
\r
433 o_result[i][i].y=r[i].y;
\r
436 r[0].x=i_vertex[3].x;
\r
437 r[0].y=i_vertex[3].y;
\r
438 r[d].x=i_vertex[1].x;
\r
439 r[d].y=i_vertex[1].y;
\r
440 scale.x=(i_canter.x-i_vertex[3].x)/(i_vertex[1].x-i_vertex[3].x);
\r
441 scale.y=(i_canter.y-i_vertex[3].y)/(i_vertex[1].y-i_vertex[3].y);
\r
442 solvLinePointArray_b(scale,0,d,r);
\r
444 for(int i=0;i<=d;i++){
\r
445 o_result[d-i][i].x=r[i].x;
\r
446 o_result[d-i][i].y=r[i].y;
\r
449 for(int i=0;i<=d;i++){
\r
450 final NyARDoublePoint2d y1=o_result[i][i];
\r
451 final NyARDoublePoint2d y2=o_result[d-i][i];
\r
455 for(int i2=0;i2<=d;i2++){
\r
465 final NyARDoublePoint2d x1=o_result[i2][i2];
\r
466 final NyARDoublePoint2d x2=o_result[i2][d-i2];
\r
467 solvCrossPoint(y1,y2,x1,x2,o_result[i2][i]);
\r
474 * 直線をscaleで2^n分割した配列を計算する。
\r
480 private void solvLinePointArray2(NyARDoublePoint2d i_canter,int i_div,NyARDoublePoint2d[] i_vertex,NyARDoublePoint2d[][] o_result)
\r
482 NyARDoublePoint2d scale=new NyARDoublePoint2d();
\r
483 //分割直線の計算(2=2分割,3=4分割,4=8分割)
\r
485 NyARDoublePoint2d[] r=o_result[d/2];
\r
487 r[0].x=i_vertex[0].x;
\r
488 r[0].y=i_vertex[0].y;
\r
489 r[d].x=i_vertex[2].x;
\r
490 r[d].y=i_vertex[2].y;
\r
491 // scale.x=(i_canter.x-i_vertex[0].x)/(i_vertex[2].x-i_vertex[0].x);
\r
492 // scale.y=(i_canter.y-i_vertex[0].y)/(i_vertex[2].y-i_vertex[0].y);
\r
493 double sx,kx,lx,sy,ky,ly;
\r
496 kx=solvK(i_canter.x-sx,i_vertex[2].x-sx);
\r
497 lx=solvL(kx,i_canter.x-sx);
\r
500 ky=solvK(i_canter.y-sy,i_vertex[2].y-sy);
\r
501 ly=solvL(kx,i_canter.y-sy);
\r
503 solvLinePointArray_b(scale,0,d,r);
\r
505 for(int i=0;i<=d;i++){
\r
506 o_result[i][i].x=sx+kx*lx;
\r
507 o_result[i][i].y=sy+ky*ly;
\r
513 kx=solvK(i_canter.x-sx,i_vertex[1].x-sx);
\r
514 lx=solvL(kx,i_canter.x-sx);
\r
517 ky=solvK(i_canter.y-sy,i_vertex[1].y-sy);
\r
518 ly=solvL(kx,i_canter.y-sy);
\r
520 solvLinePointArray_b(scale,0,d,r);
\r
522 for(int i=0;i<=d;i++){
\r
523 o_result[d-i][i].x=sx+kx*lx;
\r
524 o_result[d-i][i].y=sy+ky*ly;
\r
529 for(int i=0;i<=d;i++){
\r
530 final NyARDoublePoint2d y1=o_result[i][i];
\r
531 final NyARDoublePoint2d y2=o_result[d-i][i];
\r
535 for(int i2=0;i2<=d;i2++){
\r
545 final NyARDoublePoint2d x1=o_result[i2][i2];
\r
546 final NyARDoublePoint2d x2=o_result[i2][d-i2];
\r
547 solvCrossPoint(y1,y2,x1,x2,o_result[i2][i]);
\r
554 private void solvLinePointArray_b(NyARDoublePoint2d i_scale,int i_si,int i_ei,NyARDoublePoint2d[] o_result)
\r
556 int ci=(i_ei-i_si)/2+i_si;
\r
557 o_result[ci].x=i_scale.x*(o_result[i_ei].x-o_result[i_si].x)+o_result[i_si].x;
\r
558 o_result[ci].y=i_scale.y*(o_result[i_ei].y-o_result[i_si].y)+o_result[i_si].y;
\r
563 solvLinePointArray_b(i_scale,i_si,ci,o_result);
\r
564 solvLinePointArray_b(i_scale,ci,i_ei,o_result);
\r
568 private void solvCrossPoint(NyARIntPoint2d i_p1,NyARIntPoint2d i_p2,NyARIntPoint2d i_p3,NyARIntPoint2d i_p4,NyARDoublePoint2d o_result)
\r
570 NyARDoublePoint2d va=new NyARDoublePoint2d(i_p2);
\r
571 NyARDoublePoint2d vb=new NyARDoublePoint2d(i_p4);
\r
574 o_result.setValue(i_p3);
\r
575 o_result.vecSub(i_p1);
\r
576 va.vecMul(va, vb.vecCross(o_result)/vb.vecCross(va));
\r
577 o_result.setValue(va);
\r
578 o_result.vecAdd(i_p1);
\r
582 //return a1 + a * cross(b, b1-a1) / cross(b, a);
\r
584 private void solvCrossPoint(NyARDoublePoint2d i_p1,NyARDoublePoint2d i_p2,NyARDoublePoint2d i_p3,NyARDoublePoint2d i_p4,NyARDoublePoint2d o_result)
\r
586 NyARDoublePoint2d va=new NyARDoublePoint2d(i_p2);
\r
587 NyARDoublePoint2d vb=new NyARDoublePoint2d(i_p4);
\r
590 o_result.setValue(i_p3);
\r
591 o_result.vecSub(i_p1);
\r
592 va.vecMul(va, vb.vecCross(o_result)/vb.vecCross(va));
\r
593 o_result.setValue(va);
\r
594 o_result.vecAdd(i_p1);
\r
598 //return a1 + a * cross(b, b1-a1) / cross(b, a);
\r
600 double pow_1_3(double a)
\r
602 double x = Math.pow(a, 1./3);
\r
603 return (2*x+a/x/x)/3; // modifier
\r
609 //(Sqrt(((3*Z*((-Z)/(3*Z))^2-(2*Z^2)/(3*Z)+Z-1)/Z)^3/27+(Z*((-Z)/(3*Z))^2+Z*((-Z)/(3*Z))^3-((Z-1)*Z)/(3*Z)+Z-1)^2/(4*Z^2))-(Z*((-Z)/(3*Z))^2+Z*((-Z)/(3*Z))^3-((Z-1)*Z)/(3*Z)+Z-1)/(2*Z))^(1/3)+(-((Z*((-Z)/(3*Z))^2+Z*((-Z)/(3*Z))^3-((Z-1)*Z)/(3*Z)+Z-1)/(2*Z)+Sqrt(((3*Z*((-Z)/(3*Z))^2-(2*Z^2)/(3*Z)+Z-1)/Z)^3/27+(Z*((-Z)/(3*Z))^2+Z*((-Z)/(3*Z))^3-((Z-1)*Z)/(3*Z)+Z-1)^2/(4*Z^2))))^(1/3)-Z/(3*Z)
\r
610 private double solvK(double mp,double vp)
\r
616 double d=(2.0*Z*Z);//(2*Z^2)
\r
617 double e=(4.0*Z*Z);//(4*Z^2)
\r
619 double g=(Z*f*f+Z*f*f*f-c/b+Z-1);//(Z*f^2+Z*f^3-c/b+Z-1)
\r
620 double h=(3.0*Z*f*f-d/b+Z-1.0);//(3*Z*f^2-d/b+Z-1)
\r
622 Complex j=new Complex(0,i*i*i/27.0+g*g/e);//(0,i*i*i/27.0+g*g/e);
\r
624 // j.i=Math.sqrt(-i*i*i/27.0+g*g/e);
\r
626 Complex k=new Complex();
\r
629 Complex l=new Complex();
\r
630 l.r=-(g/(2.0*Z)+j.r);
\r
635 double fi=k.dist()+l.dist()-Z/b;
\r
638 private double solvL(double k,double mp)
\r
640 return 100/(1+k*k+k*k*k+k);
\r
644 public static void main(String[] args)
\r
648 NyARColorPatt_DiagonalRatio t = new NyARColorPatt_DiagonalRatio(3);
\r
649 double k=t.solvK(60,100);
\r
650 double l=t.solvL(k,60);
\r
652 // t.Test_arGetVersion();
\r
653 NyARSquare s=new NyARSquare();
\r
654 s.sqvertex[0].x=10;
\r
655 s.sqvertex[0].y=10;
\r
656 s.sqvertex[1].x=90;
\r
658 s.sqvertex[2].x=100;
\r
659 s.sqvertex[2].y=100;
\r
661 s.sqvertex[3].y=100;
\r
662 //t.getLineCrossPoint(s);
\r
663 } catch (Exception e) {
\r
664 e.printStackTrace();
\r