\r
\r
/**\r
- * 定点と傾きのパラメータで、直線を表現します。\r
- *\r
+ * このクラスは、通過点とX,Yの変化量で、直線を定義します。\r
*/\r
public class NyARVecLinear2d\r
{\r
+ /** 直線の通過点(X)*/\r
public double x;\r
+ /** 直線の通過点(Y)*/\r
public double y;\r
+ /** x方向の直線の変化量*/\r
public double dx;\r
+ /** y方向の直線の変化量*/\r
public double dy;\r
+ \r
+ /**\r
+ * この関数は、指定サイズのオブジェクト配列を作ります。\r
+ * @param i_number\r
+ * 作成する配列の長さ\r
+ * @return\r
+ * 新しい配列。\r
+ */ \r
public static NyARVecLinear2d[] createArray(int i_length)\r
{\r
NyARVecLinear2d[] r=new NyARVecLinear2d[i_length];\r
return r;\r
}\r
/**\r
- * 法線ベクトルを計算します。\r
+ * この関数は、法線を計算します。\r
+ * 通過点は変更しません。\r
* @param i_src\r
- * å\85\83ã\81®ã\83\99ã\82¯ã\83\88ã\83«を指定します。この値には、thisを指定できます。\r
+ * å\85\83ã\81®ã\82¤ã\83³ã\82¹ã\82¿ã\83³ã\82¹を指定します。この値には、thisを指定できます。\r
*/\r
public final void normalVec(NyARVecLinear2d i_src)\r
{\r
this.dx=i_src.dy;\r
this.dy=-w;\r
}\r
+ /**\r
+ * この関数は、オブジェクトの値をインスタンスにセットします。\r
+ * @param i_value\r
+ * コピー元のオブジェクト\r
+ */\r
public final void setValue(NyARVecLinear2d i_value)\r
{\r
this.dx=i_value.dx;\r
this.y=i_value.y;\r
}\r
/**\r
- * このベクトルと指定した直線が作るCos値を返します。\r
+ * この関数は、この直線と引数の直線とが作るCos値を返します。\r
* @param i_v1\r
+ * 直線を格納したオブジェクト\r
* @return\r
+ * 2直線のCOS値(radian)\r
*/\r
public final double getVecCos(NyARVecLinear2d i_v1)\r
{\r
double d=(x1*x2+y1*y2)/Math.sqrt((x1*x1+y1*y1)*(x2*x2+y2*y2));\r
return d;\r
}\r
+ /**\r
+ * この関数は、この直線と引数の直線とが作るCos値の絶対値を返します。\r
+ * @param i_v1\r
+ * 直線を格納したオブジェクト\r
+ * @return\r
+ * 2直線のCOS値の絶対値(radian)\r
+ */\r
public final double getAbsVecCos(NyARVecLinear2d i_v1)\r
{\r
- double x1=i_v1.dx;\r
- double y1=i_v1.dy;\r
- double x2=this.dx;\r
- double y2=this.dy;\r
- double d=(x1*x2+y1*y2)/Math.sqrt((x1*x1+y1*y1)*(x2*x2+y2*y2));\r
+ double d=getVecCos(i_v1);\r
return d>=0?d:-d;\r
}\r
/**\r
- * このベクトルと指定したベクトルが作るCos値を返します。\r
+ * この関数は、この直線とベクトルが作るCos値を返します。\r
* @param i_dx\r
+ * ベクトルのX成分\r
* @param i_dy\r
+ * ベクトルのY成分\r
* @return\r
+ * 2直線のCOS値(radian)\r
*/\r
public final double getVecCos(double i_dx,double i_dy)\r
{\r
double x1=this.dx;\r
double y1=this.dy;\r
- double d=(x1*i_dx+y1*i_dy)/Math.sqrt((x1*x1+y1*y1)*(i_dx*i_dx+i_dy*i_dy));\r
- return d;\r
+ return (x1*i_dx+y1*i_dy)/Math.sqrt((x1*x1+y1*y1)*(i_dx*i_dx+i_dy*i_dy));\r
}\r
- public final double getVecCos(NyARDoublePoint2d i_pos1,NyARDoublePoint2d i_pos2)\r
+ /**\r
+ * この関数は、この直線とベクトルが作るCos値の絶対値を返します。\r
+ * @param i_v2_x\r
+ * ベクトルのX成分\r
+ * @param i_v2_y\r
+ * ベクトルのY成分\r
+ * @return\r
+ * 2直線のCOS値の絶対値(radian)\r
+ */\r
+ public final double getAbsVecCos(double i_v2_x,double i_v2_y)\r
{\r
- double d=getAbsVecCos(i_pos2.x-i_pos1.x,i_pos2.y-i_pos1.y);\r
+ double d=getVecCos(i_v2_x,i_v2_y);\r
return d>=0?d:-d;\r
} \r
- public final double getAbsVecCos(double i_v2_x,double i_v2_y)\r
+ /**\r
+ * この関数は、この直線と線分が作るCos値を返します。\r
+ * @param i_pos1\r
+ * 線分の端点1\r
+ * @param i_pos2\r
+ * 線分の端点2\r
+ * @return\r
+ * 2直線のCOS値(radian)\r
+ */\r
+ public final double getVecCos(NyARDoublePoint2d i_pos1,NyARDoublePoint2d i_pos2)\r
{\r
- double x1=this.dx;\r
- double y1=this.dy;\r
- double d=(x1*i_v2_x+y1*i_v2_y)/Math.sqrt((x1*x1+y1*y1)*(i_v2_x*i_v2_x+i_v2_y*i_v2_y));\r
- return d>=0?d:-d;\r
- }\r
+ return getVecCos(i_pos2.x-i_pos1.x,i_pos2.y-i_pos1.y);\r
+ } \r
+\r
/**\r
- * このベクトルと、i_pos1-<i_pos2を結ぶ線分が作るcos値の絶対値を返します。\r
+ * この関数は、この直線と線分が作るCos値の絶対値を返します。\r
* @param i_pos1\r
+ * 線分の端点1\r
* @param i_pos2\r
+ * 線分の端点2\r
* @return\r
+ * 2直線のCOS値の絶対値(radian)\r
*/\r
public final double getAbsVecCos(NyARDoublePoint2d i_pos1,NyARDoublePoint2d i_pos2)\r
{\r
- double d=getAbsVecCos(i_pos2.x-i_pos1.x,i_pos2.y-i_pos1.y);\r
- return d>=0?d:-d;\r
+ return getAbsVecCos(i_pos2.x-i_pos1.x,i_pos2.y-i_pos1.y);\r
}\r
\r
/**\r
- * 交点を求めます。\r
+ * この関数は、直線との交点を求めます。\r
* @param i_vector1\r
- * @param i_vector2\r
+ * 交点を求める直線\r
* @param o_point\r
+ * 交点座標を得るオブジェクト。\r
* @return\r
+ * 交点が求まると、trueを返します。\r
*/\r
public final boolean crossPos(NyARVecLinear2d i_vector1,NyARDoublePoint2d o_point)\r
{\r
return true;\r
}\r
/**\r
- * 直線と、i_sp1とi_sp2の作る線分との二乗距離値の合計を返します。\r
- * 線分と直線の類似度を\r
+ * この関数は、この直線と、i_sp1とi_sp2の作る線分との、二乗距離値の合計を返します。\r
+ * 計算方法は、線分の端点を通過する直線の法線上での、端点と直線の距離の合計です。\r
+ * 線分と直線の類似度を判定する数値になります。\r
* @param i_sp1\r
+ * 線分の端点1\r
* @param i_sp2\r
- * @param o_point\r
+ * 線分の端点2\r
* @return\r
- * 距離が取れないときは無限大です。\r
+ * 二乗距離値の合計。距離が取れないときは無限大です。\r
*/\r
public final double sqDistBySegmentLineEdge(NyARDoublePoint2d i_sp1,NyARDoublePoint2d i_sp2)\r
{\r
}\r
\r
/**\r
- * i_lineの直線をセットします。x,yの値は、(i_x,i_y)を通過するi_lineの法線とi_lineの交点をセットします。\r
+ * この関数は、i_lineの直線を、インスタンスにセットします。\r
+ * {@link #x},{@link #y}の値は、(i_x,i_y)を通過するi_lineの法線とi_lineの交点をセットします。\r
* @param i_line\r
+ * セットする直線式\r
* @param i_x\r
+ * {@link #x},{@link #y}を確定するための、法線の通過点\r
* @param i_y\r
+ * {@link #x},{@link #y}を確定するための、法線の通過点\r
+ * @return\r
+ * セットに成功すると、trueを返します。\r
*/\r
public boolean setLinear(NyARLinear i_line,double i_x,double i_y)\r
{\r
return true;\r
}\r
/**\r
- * 点群から最小二乗法で直線を計算してセットします。\r
- * 通過点x,yは、点群の中央値を通過する、算出された直線の法線との交点です。\r
+ * この関数は、頂点群から最小二乗法を使用して直線を計算します。\r
* @param i_points\r
+ * 頂点群を格納した配列。\r
* @param i_number_of_data\r
+ * 計算対象の頂点群の数\r
* @return\r
+ * 計算に成功すると、trueを返します。\r
*/\r
public final boolean leastSquares(NyARDoublePoint2d[] i_points,int i_number_of_data)\r
{\r
return true;\r
}\r
/**\r
- * 正規化したベクトルを出力する{@link #leastSquares}です。\r
+ * この関数は、正規化したベクトルを出力する、{@link #leastSquares}です。\r
* @param i_points\r
+ * 頂点群を格納した配列。\r
* @param i_number_of_data\r
+ * 計算対象の頂点群の数\r
* @return\r
+ * 計算に成功すると、trueを返します。\r
*/\r
public final boolean leastSquaresWithNormalize(NyARDoublePoint2d[] i_points,int i_number_of_data)\r
{\r