OSDN Git Service

[NyARToolKit for java]update document
[nyartoolkit-and/nyartoolkit-and.git] / lib / src / jp / nyatla / nyartoolkit / core / types / NyARDoublePoint2d.java
1 /* \r
2  * PROJECT: NyARToolkit\r
3  * --------------------------------------------------------------------------------\r
4  * This work is based on the original ARToolKit developed by\r
5  *   Hirokazu Kato\r
6  *   Mark Billinghurst\r
7  *   HITLab, University of Washington, Seattle\r
8  * http://www.hitl.washington.edu/artoolkit/\r
9  *\r
10  * The NyARToolkit is Java edition ARToolKit class library.\r
11  * Copyright (C)2008-2009 Ryo Iizuka\r
12  *\r
13  * This program is free software: you can redistribute it and/or modify\r
14  * it under the terms of the GNU General Public License as published by\r
15  * the Free Software Foundation, either version 3 of the License, or\r
16  * (at your option) any later version.\r
17  * \r
18  * This program is distributed in the hope that it will be useful,\r
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
21  * GNU General Public License for more details.\r
22  *\r
23  * You should have received a copy of the GNU General Public License\r
24  * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
25  * \r
26  * For further information please contact.\r
27  *      http://nyatla.jp/nyatoolkit/\r
28  *      <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
29  * \r
30  */\r
31 package jp.nyatla.nyartoolkit.core.types;\r
32 \r
33 \r
34 /**\r
35  * このクラスはデータ型です。\r
36  * 2次元の浮動小数点座標を格納します。\r
37  */\r
38 public class NyARDoublePoint2d\r
39 {\r
40         /** X座標の値です。*/\r
41         public double x;\r
42         /** Y座標の値です。*/\r
43         public double y;\r
44         /**\r
45          * この関数は、オブジェクトの一次元配列を作ります。\r
46          * @param i_number\r
47          * 作成する配列の長さ\r
48          * @return\r
49          * 新しい配列。\r
50          */\r
51         public static NyARDoublePoint2d[] createArray(int i_number)\r
52         {\r
53                 NyARDoublePoint2d[] ret=new NyARDoublePoint2d[i_number];\r
54                 for(int i=0;i<i_number;i++)\r
55                 {\r
56                         ret[i]=new NyARDoublePoint2d();\r
57                 }\r
58                 return ret;\r
59         }\r
60         /**\r
61          * この関数は、オブジェクトの二次元配列を作ります。\r
62          * @param i_length_x\r
63          * 作成する配列の列数\r
64          * @param i_length_y\r
65          * 作成する配列の行数\r
66          * @return\r
67          * 新しい配列。\r
68          */     \r
69         public static NyARDoublePoint2d[][] create2dArray(int i_length_x,int i_length_y)\r
70         {\r
71                 NyARDoublePoint2d[][] ret=new NyARDoublePoint2d[i_length_y][i_length_x];\r
72                 for(int i=0;i<i_length_y;i++)\r
73                 {\r
74                         for(int i2=0;i2<i_length_x;i2++)\r
75                         {\r
76                                 ret[i][i2]=new NyARDoublePoint2d();\r
77                         }\r
78                 }\r
79                 return ret;\r
80         }\r
81         /**\r
82          * この関数は、3点で定義される直線から、外積を計算します。\r
83          * 外積は、p1->p2と、p2->p3で定義する直線の外積です。\r
84          * @param p1\r
85          * 点1\r
86          * @param p2\r
87          * 点2\r
88          * @param p3\r
89          * 点3\r
90          * @return\r
91          * 外積の値\r
92          */\r
93         public final static double crossProduct3Point(NyARDoublePoint2d p1,NyARDoublePoint2d p2,NyARDoublePoint2d p3)\r
94         {\r
95                 return (p2.x-p1.x)*(p3.y-p2.y)-(p2.y-p1.y)*(p3.x-p2.x);\r
96         }\r
97         /**\r
98          * この関数は、3点で定義される直線から、外積を計算します。\r
99          * 外積は、p1->p2と、p2->p3で定義する直線の外積です。\r
100          * @param p1\r
101          * 点1\r
102          * @param p2\r
103          * 点2\r
104          * @param p3_x\r
105          * 点3の座標(X)\r
106          * @param p3_y\r
107          * 点3の座標(Y)\r
108          * @return\r
109          * 外積の値\r
110          */\r
111         public final static double crossProduct3Point(NyARDoublePoint2d p1,NyARDoublePoint2d p2,double p3_x,double p3_y)\r
112         {\r
113                 return (p2.x-p1.x)*(p3_y-p2.y)-(p2.y-p1.y)*(p3_x-p2.x);\r
114         }\r
115         /**\r
116          * この関数は、頂点集合から、中央値(Σp[n]/n)を求めます。\r
117          * @param i_points\r
118          * 頂点集合を格納した配列です。\r
119          * @param i_number_of_data\r
120          * 配列中の有効な頂点数です。\r
121          * @param o_out\r
122          * 中央値を受け取るオブジェクトです。\r
123          */\r
124         public final static void makeCenter(NyARDoublePoint2d[] i_points,int i_number_of_data,NyARDoublePoint2d o_out)\r
125         {\r
126                 double x,y;\r
127                 x=y=0;\r
128                 for(int i=i_number_of_data-1;i>=0;i--)\r
129                 {\r
130                         x+=i_points[i].x;\r
131                         y+=i_points[i].y;\r
132                 }\r
133                 o_out.x=x/i_number_of_data;\r
134                 o_out.x=y/i_number_of_data;\r
135         }\r
136         /**\r
137          * この関数は、頂点集合から、中央値(Σp[n]/n)を求めます。\r
138          * @param i_points\r
139          * 頂点集合を格納した配列です。\r
140          * @param i_number_of_data\r
141          * 配列中の有効な頂点数です。\r
142          * @param o_out\r
143          * 中央値を受け取るオブジェクトです。\r
144          */\r
145         public final static void makeCenter(NyARDoublePoint2d[] i_points,int i_number_of_data,NyARIntPoint2d o_out)\r
146         {\r
147                 double lx,ly;\r
148                 lx=ly=0;\r
149                 for(int i=i_number_of_data-1;i>=0;i--)\r
150                 {\r
151                         lx+=i_points[i].x;\r
152                         ly+=i_points[i].y;\r
153                 }\r
154                 o_out.x=(int)(lx/i_number_of_data);\r
155                 o_out.y=(int)(ly/i_number_of_data);\r
156         }\r
157         /**\r
158          * コンストラクタです。\r
159          * 初期値を格納したインスタンスを生成します。\r
160          */\r
161         public NyARDoublePoint2d()\r
162         {\r
163                 this.x=0;\r
164                 this.y=0;\r
165                 return;\r
166         }\r
167         /**\r
168          * コンストラクタです。\r
169          * 初期値を指定してインスタンスを生成します。\r
170          * @param i_x\r
171          * {@link #x}の初期値\r
172          * @param i_y\r
173          * {@link #y}の初期値\r
174          */\r
175         public NyARDoublePoint2d(double i_x,double i_y)\r
176         {\r
177                 this.x=i_x;\r
178                 this.y=i_y;\r
179                 return;\r
180         }\r
181         /**\r
182          * コンストラクタです。\r
183          * i_srcの値で初期化したインスタンスを生成します。\r
184          * @param i_src\r
185          * 初期値とするオブジェクト\r
186          */\r
187         public NyARDoublePoint2d(NyARDoublePoint2d i_src)\r
188         {\r
189                 this.x=i_src.x;\r
190                 this.y=i_src.y;\r
191                 return;\r
192         }\r
193         /**\r
194          * コンストラクタです。\r
195          * i_srcの値で初期化したインスタンスを生成します。\r
196          * @param i_src\r
197          * 初期値とするオブジェクト\r
198          */\r
199         public NyARDoublePoint2d(NyARIntPoint2d i_src)\r
200         {\r
201                 this.x=(double)i_src.x;\r
202                 this.y=(double)i_src.y;\r
203                 return;\r
204         }\r
205         /**\r
206          * この関数は、インスタンスの座標と、指定点との距離の2乗値を返します。\r
207          * @param i_p1\r
208          * 点の座標\r
209          * @return\r
210          * i_p1との距離の二乗値\r
211          */     \r
212         public final double sqDist(NyARDoublePoint2d i_p1)\r
213         {\r
214                 double x,y;\r
215                 x=this.x-i_p1.x;\r
216                 y=this.y-i_p1.y;\r
217                 return x*x+y*y;\r
218         }\r
219         /**\r
220          * この関数は、インスタンスの座標と、指定点との距離の2乗値を返します。\r
221          * @param i_p1\r
222          * 点の座標\r
223          * @return\r
224          * i_p1との距離の二乗値\r
225          */     \r
226         public final double sqDist(NyARIntPoint2d i_p1)\r
227         {\r
228                 double x,y;\r
229                 x=this.x-i_p1.x;\r
230                 y=this.y-i_p1.y;\r
231                 return x*x+y*y;\r
232         }\r
233         /**\r
234          * この関数は、オブジェクトからインスタンスに値をセットします。\r
235          * @param i_src\r
236          * コピー元のオブジェクト。\r
237          */\r
238         public final void setValue(NyARDoublePoint2d i_src)\r
239         {\r
240                 this.x=i_src.x;\r
241                 this.y=i_src.y;\r
242                 return;\r
243         }\r
244         /**\r
245          * この関数は、オブジェクトからインスタンスに値をセットします。\r
246          * @param i_src\r
247          * コピー元のオブジェクト。\r
248          */\r
249         public final void setValue(NyARIntPoint2d i_src)\r
250         {\r
251                 this.x=(double)i_src.x;\r
252                 this.y=(double)i_src.y;\r
253                 return;\r
254         }\r
255         /**\r
256          * この関数は、インスタンスに値をセットします。\r
257          * @param i_x\r
258          * {@link #x}にセットする値\r
259          * @param i_y\r
260          * {@link #y}にセットする値\r
261          */\r
262         public final void setValue(double i_x,double i_y)\r
263         {\r
264                 this.x=i_x;\r
265                 this.y=i_y;\r
266                 return;\r
267         }\r
268         \r
269 }\r