OSDN Git Service

[NyARToolKit for java]update document
[nyartoolkit-and/nyartoolkit-and.git] / lib / src / jp / nyatla / nyartoolkit / core / types / NyARIntSize.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 import jp.nyatla.nyartoolkit.NyARException;\r
34 \r
35 /**\r
36  * このクラスは、整数型の距離値を格納します。\r
37  *\r
38  */\r
39 public class NyARIntSize\r
40 {\r
41         /** Y軸方向のサイズ値*/\r
42         public int h;\r
43         /** X軸方向のサイズ値*/\r
44         public int w;\r
45         /**\r
46          * コンストラクタです。\r
47          * 初期値を格納したインスタンスを生成します。\r
48          */\r
49         public NyARIntSize()\r
50         {\r
51                 this.w=0;\r
52                 this.h=0;\r
53                 return;         \r
54         }\r
55         /**\r
56          * コンストラクタです。\r
57          * @param i_ref_object\r
58          * 引数値で初期化したインスタンスを生成します。\r
59          */\r
60         public NyARIntSize(NyARIntSize i_ref_object)\r
61         {\r
62                 this.w=i_ref_object.w;\r
63                 this.h=i_ref_object.h;\r
64                 return;         \r
65         }\r
66         /**\r
67          * コンストラクタです。\r
68          * @param i_width\r
69          * {@link #w}に設定する値\r
70          * @param i_height\r
71          * {@link #h}に設定する値\r
72          */\r
73         public NyARIntSize(int i_width,int i_height)\r
74         {\r
75                 this.w=i_width;\r
76                 this.h=i_height;\r
77                 return;\r
78         }\r
79         /**\r
80          * この関数は、引数値をインスタンスにセットします。\r
81          * @param i_w\r
82          * {@link #w}に設定する値\r
83          * @param i_h\r
84          * {@link #h}に設定する値\r
85          */\r
86         public final void setValue(int i_w,int i_h)\r
87         {\r
88                 this.w=i_w;\r
89                 this.h=i_h;\r
90                 return;\r
91         }\r
92         /**\r
93          * この関数は、サイズが引数値と同一であるかを確認します。\r
94          * @param i_width\r
95          * 比較するサイズ値(W)\r
96          * @param i_height\r
97          * 比較するサイズ値(H)\r
98          * @return\r
99          * サイズが引数値と同じなら、trueを返します。\r
100          * @throws NyARException\r
101          */\r
102         public final boolean isEqualSize(int i_width, int i_height)\r
103         {\r
104                 if (i_width == this.w && i_height == this.h) {\r
105                         return true;\r
106                 }\r
107                 return false;\r
108         }\r
109 \r
110         /**\r
111          * この関数は、サイズが引数値と同一であるかを確認します。\r
112          * @param i_size\r
113          * 比較するサイズ値\r
114          * @return\r
115          * サイズが引数値と同じなら、trueを返します。\r
116          * @throws NyARException\r
117          */\r
118         public final boolean isEqualSize(NyARIntSize i_size)\r
119         {\r
120                 if (i_size.w == this.w && i_size.h == this.h) {\r
121                         return true;\r
122                 }\r
123                 return false;\r
124         }\r
125         /**\r
126          * この関数は、引数値がインスタンスのサイズよりも小さいかを返します。\r
127          * @param i_x\r
128          * 比較するサイズ値(W)\r
129          * @param i_y\r
130          * 比較するサイズ値(H)\r
131          * @return\r
132          * 引数値がインスタンスのサイズよりも小さければ、trueを返します。\r
133          * @throws NyARException\r
134          */\r
135         public final boolean isInnerSize(int i_x,int i_y)\r
136         {\r
137                 return (i_x<=this.w && i_y<=this.h);\r
138         }\r
139         /**\r
140          * この関数は、引数値がインスタンスのサイズよりも小さいかを返します。\r
141          * @param i_size\r
142          * 比較するサイズ値\r
143          * @return\r
144          * 引数値がインスタンスのサイズよりも小さければ、trueを返します。\r
145          * @throws NyARException\r
146          */\r
147         public final boolean isInnerSize(NyARIntSize i_size)\r
148         {\r
149                 return (i_size.w<=this.w && i_size.h<=this.h);\r
150         }\r
151         /**\r
152          * この関数は、座標がサイズの範囲内(0,0基点)よりも小さいかを返します。\r
153          * @param i_point\r
154          * 調査する座標点\r
155          * @return\r
156          * 引数値が範囲内ならば、trueを返します。\r
157          * @throws NyARException\r
158          */\r
159         public final boolean isInnerSize(NyARDoublePoint2d i_point)\r
160         {\r
161                 return (i_point.x<this.w && i_point.y<this.h && 0<=i_point.x && 0<=i_point.y);\r
162         }\r
163         /**\r
164          * この関数は、座標がサイズの範囲内(0,0-w,hの矩形)にあるかを返します。\r
165          * @param i_x\r
166          * 調査する座標点\r
167          * @param i_y\r
168          * 調査する座標点\r
169          * @return\r
170          * 引数値が範囲内ならば、trueを返します。\r
171          * @throws NyARException\r
172          */\r
173         public final boolean isInnerPoint(int i_x,int i_y)\r
174         {\r
175                 return (i_x<this.w && i_y<this.h && 0<=i_x && 0<=i_y);\r
176         }\r
177         /**\r
178          * この関数は、座標がサイズの範囲内(0,0-w,hの矩形)にあるかを返します。\r
179          * @param i_pos\r
180          * 調査する座標点\r
181          * @return\r
182          * 引数値が範囲内ならば、trueを返します。\r
183          * @throws NyARException\r
184          */\r
185         public final boolean isInnerPoint(NyARDoublePoint2d i_pos)\r
186         {\r
187                 return (i_pos.x<this.w && i_pos.y<this.h && 0<=i_pos.x && 0<=i_pos.y);\r
188         }\r
189         /**\r
190          * この関数は、座標がサイズの範囲内(0,0-w,hの矩形)にあるかを返します。\r
191          * @param i_pos\r
192          * 調査する座標点\r
193          * @return\r
194          * 引数値が範囲内ならば、trueを返します。\r
195          * @throws NyARException\r
196          */\r
197         public final boolean isInnerPoint(NyARIntPoint2d i_pos)\r
198         {\r
199                 return (i_pos.x<this.w && i_pos.y<this.h && 0<=i_pos.x && 0<=i_pos.y);\r
200         }\r
201         /**\r
202          * この関数は、頂点集合を包括する矩形のサイズ値(幅、高さ)を計算して、インスタンスにセットします。\r
203          * @param i_vertex\r
204          * 頂点集合を格納した配列\r
205          * @param i_num_of_vertex\r
206          * 計算対象とする要素の数\r
207          */\r
208         public final void setAreaRect(NyARDoublePoint2d[] i_vertex,int i_num_of_vertex)\r
209         {\r
210                 //エリアを求める。\r
211                 int xmax,xmin,ymax,ymin;\r
212                 xmin=xmax=(int)i_vertex[i_num_of_vertex-1].x;\r
213                 ymin=ymax=(int)i_vertex[i_num_of_vertex-1].y;\r
214                 for(int i=i_num_of_vertex-2;i>=0;i--){\r
215                         if(i_vertex[i].x<xmin){\r
216                                 xmin=(int)i_vertex[i].x;\r
217                         }else if(i_vertex[i].x>xmax){\r
218                                 xmax=(int)i_vertex[i].x;\r
219                         }\r
220                         if(i_vertex[i].y<ymin){\r
221                                 ymin=(int)i_vertex[i].y;\r
222                         }else if(i_vertex[i].y>ymax){\r
223                                 ymax=(int)i_vertex[i].y;\r
224                         }\r
225                 }\r
226                 this.h=ymax-ymin+1;\r
227                 this.w=xmax-xmin+1;\r
228         }\r
229         /**\r
230          * この関数は、頂点集合を包括する矩形のサイズ値(幅、高さ)を計算して、インスタンスにセットします。\r
231          * @param i_vertex\r
232          * 頂点集合を格納した配列\r
233          * @param i_num_of_vertex\r
234          * 計算対象とする要素の数\r
235          */     \r
236         public final void setAreaRect(NyARIntPoint2d[] i_vertex,int i_num_of_vertex)\r
237         {\r
238                 //エリアを求める。\r
239                 int xmax,xmin,ymax,ymin;\r
240                 xmin=xmax=(int)i_vertex[i_num_of_vertex-1].x;\r
241                 ymin=ymax=(int)i_vertex[i_num_of_vertex-1].y;\r
242                 for(int i=i_num_of_vertex-2;i>=0;i--){\r
243                         if(i_vertex[i].x<xmin){\r
244                                 xmin=(int)i_vertex[i].x;\r
245                         }else if(i_vertex[i].x>xmax){\r
246                                 xmax=(int)i_vertex[i].x;\r
247                         }\r
248                         if(i_vertex[i].y<ymin){\r
249                                 ymin=(int)i_vertex[i].y;\r
250                         }else if(i_vertex[i].y>ymax){\r
251                                 ymax=(int)i_vertex[i].y;\r
252                         }\r
253                 }\r
254                 this.h=ymax-ymin+1;\r
255                 this.w=xmax-xmin+1;\r
256         }\r
257 \r
258 }\r