一般計算
[幾何計算]


列挙型

enum  f_line_detection_mode {
  F_LINE_DIRECT_NORMAL = 0, F_LINE_DIRECT_NUM = 1,
  F_LINE_DIRECT_DIST_A = 2, F_LINE_DIRECT_DIST_B = 3,
  F_LINE_DETECTION_NORMAL = 0, F_LINE_DETECTION_NUM = 2,
  F_LINE_DETECTION_DIST_A = 1, F_LINE_DETECTION_DIST_B = 3
}
 直線検出モード [詳細]

関数

INT FVALGAPI fnFIE_cg_calc_angle_for_line (DLINE_T line, enum f_direction direction, DOUBLE *angle)
 直線の角度の算出
INT FVALGAPI fnFIE_cg_calc_distance_point_to_line (DPNT_T pnt, DLINE_T line, DOUBLE *dist)
 点から直線までの距離の算出
INT FVALGAPI fnFIE_cg_calc_vertical_line_point_and_line (DPNT_T pnt, DLINE_T line, DLINE_T *line_ans)
 任意の点を通り,直線2に垂直な直線1の算出
INT FVALGAPI fnFIE_cg_calc_line_2pointA (DPNT_T pnt1, DPNT_T pnt2, DLINE_T *line)
 2点から直線を算出
INT FVALGAPI fnFIE_cg_calc_line_2pointB (DPNT_T pnt1, DPNT_T pnt2, DLINE_T *line, DOUBLE *angle)
 2点から直線とその角度の算出
INT FVALGAPI fnFIE_cg_calc_line_npoint (const DPNT_T *pnts, INT num, enum f_line_detection_mode lsm_mode, INT lsm_param, DLINE_T *line, DOUBLE *angle)
 点群から直線を算出(直線近似)
INT FVALGAPI fnFIE_cg_calc_center_2pointA (DPNT_T pnt1, DPNT_T pnt2, DPNT_T *center)
 2点の中点座標の算出
INT FVALGAPI fnFIE_cg_calc_center_2pointB (DPNT_T pnt1, DPNT_T pnt2, DPNT_T *center, DOUBLE *dist)
 2点の中点座標と距離の算出
INT FVALGAPI fnFIE_cg_calc_center_point_and_lineA (DPNT_T pnt1, DPNT_T pnt2, DPNT_T pnt3, DPNT_T *center, DOUBLE *dist)
 2点を通る直線と点までの距離と中点座標の算出(3点指定)
INT FVALGAPI fnFIE_cg_calc_center_point_and_lineB (const DPNT_T *pnts, INT num, DPNT_T pnt, enum f_line_detection_mode lsm_mode, INT lsm_param, DPNT_T *center, DOUBLE *dist)
 点群を通る直線と点までの距離と中点座標の算出(点群と1点指定)
INT FVALGAPI fnFIE_cg_calc_center_point_and_lineC (DLINE_T line, DPNT_T pnt, DPNT_T *center, DOUBLE *dist)
 直線と点までの距離と中点座標の算出(直線と1点指定)
INT FVALGAPI fnFIE_cg_calc_crosspoint_2line (DLINE_T line1, DLINE_T line2, DPNT_T *cross)
 2直線の交点の算出
INT FVALGAPI fnFIE_cg_calc_cross_2lineA (DPNT_T pnt1, DPNT_T pnt2, DPNT_T pnt3, DPNT_T pnt4, DPNT_T *cross, DOUBLE *angle)
 2直線(2点指定×2)の交点座標と交角の角度の算出
INT FVALGAPI fnFIE_cg_calc_cross_2lineB (const DPNT_T *pnts1, INT num1, const DPNT_T *pnts2, INT num2, enum f_line_detection_mode lsm_mode, INT lsm_param, DPNT_T *cross, DOUBLE *angle)
 2直線(2点群指定)の交点座標と交角の角度の算出
INT FVALGAPI fnFIE_cg_calc_cross_2lineC (DLINE_T line1, DLINE_T line2, DPNT_T *cross, DOUBLE *angle)
 2直線の交点座標と交角の角度の算出
INT FVALGAPI fnFIE_cg_calc_circle_npoints (DPNT_T **pnts_set, const INT *num_set, INT set_num, DPNT_T *center, DOUBLE *radius)
 複数点群を通る円の中心座標と半径の算出
INT FVALGAPI fnFIE_cg_calc_cross_circle_and_lineA (const DPNT_T *pnts, INT num, DPNT_T pnt1, DPNT_T pnt2, INT *cross_num, DPNT_T *cross1, DPNT_T *cross2)
 点群を通る円と2点を通る直線の交点
INT FVALGAPI fnFIE_cg_calc_cross_circle_and_lineB (DPNT_T center, DOUBLE radius, DLINE_T line, INT *cross_num, DPNT_T *cross1, DPNT_T *cross2)
 円と直線の交点の算出
INT FVALGAPI fnFIE_cg_calc_cross_2circleA (const DPNT_T *pnts1, INT num1, const DPNT_T *pnts2, INT num2, INT *cross_num, DPNT_T *cross1, DPNT_T *cross2)
 点群1を通る円1と点群2を通る円2の交点の算出
INT FVALGAPI fnFIE_cg_calc_cross_2circleB (DPNT_T center1, DOUBLE radius1, DPNT_T center2, DOUBLE radius2, INT *cross_num, DPNT_T *cross1, DPNT_T *cross2)
 2つの円の交点の算出
INT FVALGAPI fnFIE_cg_calc_rectangle_5point (DPNT_T pnt1, DPNT_T pnt2, DPNT_T pnt3, DPNT_T pnt4, DPNT_T pnt5, DOUBLE *long_len, DOUBLE *short_len, DPNT_T *center)
 5点を通る辺を持つ四角形の中心座標
INT FVALGAPI fnFIE_cg_calc_distance_2point (DPNT_T pnt1, DPNT_T pnt2, DOUBLE *dist)
 2点間の距離の算出
INT FVALGAPI fnFIE_cg_calc_distance_npoint (const DPNT_T *pnts, INT num, DOUBLE *dist)
 N点間の距離の算出
INT FVALGAPI fnFIE_cg_calc_centerline_2npoint (const DPNT_T *pnts1, INT num1, const DPNT_T *pnts2, INT num2, enum f_line_detection_mode lsm_mode, INT lsm_param, DLINE_T *line)
 2直線の中心を通る直線の算出(2点群指定)
INT FVALGAPI fnFIE_cg_calc_centerline_4point (DPNT_T pnt1, DPNT_T pnt2, DPNT_T pnt3, DPNT_T pnt4, DLINE_T *line)
 2直線の中心を通る直線の算出(4点指定)
INT FVALGAPI fnFIE_cg_calc_centerline_2line (DLINE_T line1, DLINE_T line2, DLINE_T *center_line)
 2直線の中心を通る直線の算出
INT FVALGAPI fnFIE_cg_calc_cross_4line (DLINE_T line1, DLINE_T line2, DLINE_T line3, DLINE_T line4, DPNT_T *cross)
 2組の2直線の中心を通る直線の交点の検出(4直線指定)
INT FVALGAPI fnFIE_cg_calc_cross_4npoint (const DPNT_T *pnts1, INT num1, const DPNT_T *pnts2, INT num2, const DPNT_T *pnts3, INT num3, const DPNT_T *pnts4, INT num4, enum f_line_detection_mode lsm_mode, INT lsm_param, DPNT_T *cross)
 2組の2直線の中心を通る直線の交点の算出(4点群指定)
INT FVALGAPI fnFIE_cg_calc_cross_8point (DPNT_T pnt1, DPNT_T pnt2, DPNT_T pnt3, DPNT_T pnt4, DPNT_T pnt5, DPNT_T pnt6, DPNT_T pnt7, DPNT_T pnt8, DPNT_T *cross)
 2組の2直線の中心を通る直線の交点の算出(8点指定)
INT FVALGAPI fnFIE_cg_calc_rectangle_4line (DLINE_T lineAB, DLINE_T lineBC, DLINE_T lineCD, DLINE_T lineDA, DOUBLE *long1, DOUBLE *short1, DOUBLE *long2, DOUBLE *short2, DPNT_T *center)
 四角形の中心座標の算出(4直線指定)
INT FVALGAPI fnFIE_cg_calc_rectangle_4npoint (const DPNT_T *pntsAB, INT numAB, const DPNT_T *pntsBC, INT numBC, const DPNT_T *pntsCD, INT numCD, const DPNT_T *pntsDA, INT numDA, enum f_line_detection_mode lsm_mode, INT lsm_param, DOUBLE *long1, DOUBLE *short1, DOUBLE *long2, DOUBLE *short2, DPNT_T *center)
 四角形の中心座標の算出(4点群指定)
INT FVALGAPI fnFIE_cg_calc_cross_mark (DPNT_T pnt1, DPNT_T pnt2, DPNT_T pnt3, DPNT_T pnt4, DPNT_T pnt5, DPNT_T pnt6, DPNT_T pnt7, DPNT_T pnt8, DPNT_T *center)
 トンボマークの中心の算出
INT FVALGAPI fnFIE_cg_calc_long_hole_6point (DPNT_T pnt1, DPNT_T pnt2, DPNT_T pnt3, DPNT_T pnt4, DPNT_T pnt5, DPNT_T pnt6, DOUBLE *long1, DOUBLE *short1, DOUBLE *long2, DOUBLE *short2, DPNT_T *center)
 長穴の測定(6点指定)
INT FVALGAPI fnFIE_cg_calc_tangent_line (DPNT_T pnt, DPNT_T center, DOUBLE radius, DLINE_T *line)
 円の接線の方程式の算出
INT FVALGAPI fnFIE_cg_calc_cross_ellipse_and_line (DPNT_T center, DOUBLE major, DOUBLE minor, DOUBLE theta, DLINE_T line, INT *cross_num, DPNT_T *cross1, DPNT_T *cross2)
 楕円と直線の交点の算出
INT FVALGAPI fnFIE_cg_calc_distance_ellipse_to_point (DPNT_T center, DOUBLE major, DOUBLE minor, DOUBLE theta, DPNT_T point, DOUBLE *distance, DPNT_T *nearest_point, BOOL *outer)
 楕円と点の距離

列挙型

直線検出モード

幾何計算での直線検出モードを指定します。

  • F_LINE_DETECTION_NORMAL 通常直線検出モード
    1. 点群に対して直線検出を行います。
  • F_LINE_DETECTION_NUM 回数指定モード
    1. 点群に対して直線検出を行います。
    2. 直線の検出に使用した各点と直線との距離を求め、その直線から一番大きくはずれている1点をエラー点とします。
    3. 2でエラーとみなした1点を削除し、残った点で直線検出を行います。
    4. 2、3の処理を指定回数だけ繰り返します。
    回数指定モードにて指定回数を0にすると、通常直線モードとまったく同じになります。
  • F_LINE_DETECTION_DIST_A 距離指定モード1
    1. 点群に対して直線検出を行います。
    2. 直線の検出に使用した各点と直線との距離を求め,その距離が設定中のパラメータ以上はずれた点をエラー点とします。
    3. 2でエラーとみなした各点を削除し、残った点で直線検出を行います。
    4. 2、3の処理をエラー点がなくなるまで繰り返します。(距離による判定)
  • F_LINE_DETECTION_DIST_B 距離指定モード2
    1. 点群に対して直線検出を行います。
    2. 入力点群のすべての点と求めた直線との距離を求め、設定中のパラメータ以上はずれた点をエラー点とします。
    3. 2でエラーではない点を抜き出し、抜き出した点で直線検出を行います。
    4. 2、3の処理を直線係数が収束するまで繰り返します。
F_LINE_DETECTION_DIST_A と F_LINE_DETECTION_DIST_B の違いは、 F_LINE_DETECTION_DIST_A では一度エラーと みなした点は削除し、以降の直線検出には使用しないのに対し、 F_LINE_DETECTION_DIST_B で はエラーとみなした点を一時除外して直線を検出した後にも直線との距離の比較を常 にすべての点に対して行うことです。
列挙型の値:
F_LINE_DIRECT_NORMAL  旧・通常直線検出モード
F_LINE_DIRECT_NUM  旧・回数指定モード ( バグのため非推奨 互換性のために残されています )
F_LINE_DIRECT_DIST_A  旧・距離指定モード1 ( バグのため非推奨 互換性のために残されています )
F_LINE_DIRECT_DIST_B  旧・距離指定モード2
F_LINE_DETECTION_NORMAL  通常直線検出モード
F_LINE_DETECTION_NUM  回数指定モード
F_LINE_DETECTION_DIST_A  距離指定モード1
F_LINE_DETECTION_DIST_B  距離指定モード2


関数

INT FVALGAPI fnFIE_cg_calc_angle_for_line ( DLINE_T  line,
enum f_direction  direction,
DOUBLE *  angle 
)

直線の角度の算出

指定された直線の角度を計算します。

  • x座標から画像右端:角度範囲(単位:ラジアン): [ $-\pi/2$ , $\pi/2$ ]
  • x座標から画像左端:角度範囲(単位:ラジアン): [ $\pi/2$ , $\pi$ ] & [ $-\pi/2$ , $-\pi$ ]
  • x座標から画像下端:角度範囲(単位:ラジアン): [ 0, $\pi$ ]
fie_cg_calc_angle_for_line.png

左より、F_DIRECT_RIGHT 、 F_DIRECT_LEFT 、 F_DIRECT_DOWN を指定した場合の角度範囲を示しています。

引数:
[in] line 直線
[in] direction 直線の方向
  • F_DIRECT_RIGHT 角度範囲(単位:ラジアン): [ $-\pi/2$ , $\pi/2$ ]
  • F_DIRECT_LEFT 角度範囲(単位:ラジアン): [ $\pi/2$ , $\pi$ ] & [ $-\pi/2$ , $-\pi$ ]
  • F_DIRECT_DOWN 角度範囲(単位:ラジアン): [ 0, $\pi$ ]
[out] angle 直線の角度(単位:ラジアン)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_distance_point_to_line ( DPNT_T  pnt,
DLINE_T  line,
DOUBLE *  dist 
)

点から直線までの距離の算出

点P1 $(x1,y1)$ と直線L1 $ax+by+c=0$ の距離dを公式

\[ d=\frac{|ax+by+c|}{\sqrt{a^2+b^2}} \]

によって求めます。

fie_cg_calc_distance_point_to_line.png

引数:
[in] pnt 座標点P1
[in] line 直線L1
[out] dist 距離d
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_vertical_line_point_and_line ( DPNT_T  pnt,
DLINE_T  line,
DLINE_T line_ans 
)

任意の点を通り,直線2に垂直な直線1の算出

点P1を通る、直線L2に垂直な直線L1の方程式の係数 a, b, c を求めます。

fie_cg_calc_vertical_line_point_and_line.png

引数:
[in] pnt 直線L1が通る点P1
[in] line 求める直線L1に垂直な直線L2
[out] line_ans 求められた垂直な直線L1
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_line_2pointA ( DPNT_T  pnt1,
DPNT_T  pnt2,
DLINE_T line 
)

2点から直線を算出

任意の2点P1とP2からなる、直線L12の方程式の係数 a, b, c を求めます。

fie_cg_calc_line_2pointA.png

P1とP2が同一座標の場合は、直線が定まらないため、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt1 直線を生成する座標点P1
[in] pnt2 直線を生成する座標点P2
[out] line 直線L12
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_line_2pointB ( DPNT_T  pnt1,
DPNT_T  pnt2,
DLINE_T line,
DOUBLE *  angle 
)

2点から直線とその角度の算出

任意の2点P1とP2からなる、直線L12の方程式の係数 a, b, c と角度 $ \theta $ を求めます。

fie_cg_calc_line_2pointB.png

P1とP2が同一座標の場合は、直線が定まらないため、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt1 直線を生成する座標点P1
[in] pnt2 直線を生成する座標点P2
[out] line 生成された直線L12
[out] angle 生成された直線の傾き(単位:ラジアン [$-\pi/2$$\pi/2$] )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_line_npoint ( const DPNT_T pnts,
INT  num,
enum f_line_detection_mode  lsm_mode,
INT  lsm_param,
DLINE_T line,
DOUBLE *  angle 
)

点群から直線を算出(直線近似)

最小2乗法により、点群G1から直線L1の方程式の係数 a, b, c を求めます。

fie_cg_calc_line_npoint.png

G1は2〜1000点の範囲内で設定出来ます。

直線生成パラメータ( lsm_param )は、直線生成モードにより意味が異なります。 パラメータの意味は以下の通りです。

  • F_LINE_DETECTION_NORMAL 無視されます
  • F_LINE_DETECTION_NUM 繰り返し回数を指定します
  • F_LINE_DETECTION_DIST_A 求められた直線と点との閾値(距離)を指定します
  • F_LINE_DETECTION_DIST_B 求められた直線と点との閾値(距離)を指定します
なお、距離指定モード1、2のいずれかを指定した場合、繰り返し求められる直線と各点との閾値(距離) 以内の点の数が2以下になった場合、 F_ERR_CALC_IMPOSSIBLE となります。 例えば、点群の各点のばらつきが大きい場合などに発生します。

引数:
[in] pnts 直線を生成する座標点群G1。 num 個の点が必要
[in] num 点群に入っている点の数(2〜1000)
[in] lsm_mode 直線生成のモード
  • F_LINE_DETECTION_NORMAL 通常直線検出モード
  • F_LINE_DETECTION_NUM 回数指定モード
  • F_LINE_DETECTION_DIST_A 距離指定モード1
  • F_LINE_DETECTION_DIST_B 距離指定モード2
[in] lsm_param 直線生成のパラメータ
[out] line 求められた直線L1
[out] angle 求められた直線の傾き(単位:ラジアン [$-\pi/2$$\pi/2$] )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_center_2pointA ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T center 
)

2点の中点座標の算出

点P1とP2の中点座標Pcを求めます。

fie_cg_calc_center_2pointA.png

引数:
[in] pnt1 座標点P1
[in] pnt2 座標点P2
[out] center 中点座標Pc
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_center_2pointB ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T center,
DOUBLE *  dist 
)

2点の中点座標と距離の算出

点P1とP2の中点座標Pcと距離dを求めます。 fnFIE_cg_calc_center_2pointA() との違いは距離が求められることです。

fie_cg_calc_center_2pointB.png

引数:
[in] pnt1 座標点P1
[in] pnt2 座標点P2
[out] center 2点の中点座標Pc
[out] dist 2点間の距離d
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_center_point_and_lineA ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T  pnt3,
DPNT_T center,
DOUBLE *  dist 
)

2点を通る直線と点までの距離と中点座標の算出(3点指定)

点P1とP2からなる直線L1と点P3との距離dと中点座標Pcを求めます。

fie_cg_calc_center_point_and_lineA.png

P1とP2が同一座標の場合は、直線が定まらないため、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt1 直線を決定する座標点P1
[in] pnt2 直線を決定する座標点P2
[in] pnt3 直線との距離を求める座標点P3
[out] center 直線と点3との中点座標Pc
[out] dist 直線と点3との距離d
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_center_point_and_lineB ( const DPNT_T pnts,
INT  num,
DPNT_T  pnt,
enum f_line_detection_mode  lsm_mode,
INT  lsm_param,
DPNT_T center,
DOUBLE *  dist 
)

点群を通る直線と点までの距離と中点座標の算出(点群と1点指定)

点群G1の作る直線L1と点P1との距離dと中点座標Pcを求めます。

fie_cg_calc_center_point_and_lineB.png

G1に指定できる点の数は2個から1000個です。 点の数がこの範囲にない場合は、F_ERR_INVALID_PARAM を返します。

直線生成パラメータ( lsm_param )は、直線生成モードにより意味が異なります。 パラメータの意味は以下の通りです。

  • F_LINE_DETECTION_NORMAL 無視されます
  • F_LINE_DETECTION_NUM 繰り返し回数を指定します
  • F_LINE_DETECTION_DIST_A 求められた直線と点との閾値(距離)を指定します
  • F_LINE_DETECTION_DIST_B 求められた直線と点との閾値(距離)を指定します
なお、距離指定モード1、2のいずれかを指定した場合、繰り返し求められる直線と各点との閾値(距離) 以内の点の数が2以下になった場合、 F_ERR_CALC_IMPOSSIBLE となります。 例えば、点群の各点のばらつきが大きい場合などに発生します。

引数:
[in] pnts 直線を生成する座標点群G1。 num 個の点が必要
[in] num 点群に入っている点の数(2〜1000)
[in] pnt 距離と中点を求めるための座標点
[in] lsm_mode 直線生成のモード
  • F_LINE_DETECTION_NORMAL 通常直線検出モード
  • F_LINE_DETECTION_NUM 回数指定モード
  • F_LINE_DETECTION_DIST_A 距離指定モード1
  • F_LINE_DETECTION_DIST_B 距離指定モード2
[in] lsm_param 直線生成のパラメータ
[out] center 直線L1と点P1との中点座標Pc
[out] dist 直線L1と点P1との距離d
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_center_point_and_lineC ( DLINE_T  line,
DPNT_T  pnt,
DPNT_T center,
DOUBLE *  dist 
)

直線と点までの距離と中点座標の算出(直線と1点指定)

直線L1と点P1との距離dと中点座標Pcを求めます。

fie_cg_calc_center_point_and_lineC.png

不正な直線を与えた場合は F_ERR_CALC_IMPOSSIBLE を返します。 例えば直線の方程式の係数a, bが共に0のような直線が不正な直線となります。

引数:
[in] line 直線L1
[in] pnt 座標点P1
[out] center 直線L1と点P1の中点座標Pc
[out] dist 直線L1と点P1の距離d
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_crosspoint_2line ( DLINE_T  line1,
DLINE_T  line2,
DPNT_T cross 
)

2直線の交点の算出

2直線L1とL2が交わる点Pcの座標を計算します。

fie_cg_calc_crosspoint_2line.png

2直線が平行で交わらない場合は、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] line1 交点を求めるための対象となる直線L1
[in] line2 交点を求めるための対象となる直線L2
[out] cross 交点座標Pc
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー(2直線が平行で、交点が求まらない)
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_2lineA ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T  pnt3,
DPNT_T  pnt4,
DPNT_T cross,
DOUBLE *  angle 
)

2直線(2点指定×2)の交点座標と交角の角度の算出

点P1とP2の作る直線L12と、 点P3とP4作る直線L34の交点座標Pcと交角の角度を求めます。

fie_cg_calc_cross_2lineA.png

P1とP2 、またはP3とP4が同一座標の場合は F_ERR_CALC_IMPOSSIBLE を返します。 また、それぞれ求められた直線L12とL34が平行だった場合にも F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt1 直線L12も求めるための座標点P1
[in] pnt2 直線L12も求めるための座標点P2
[in] pnt3 直線L34も求めるための座標点P3
[in] pnt4 直線L34も求めるための座標点P4
[out] cross 2直線が作る交点座標Pc
[out] angle 2直線のなす角のうち、小さい方の角度(単位:ラジアン [0,$\pi/2$] )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_2lineB ( const DPNT_T pnts1,
INT  num1,
const DPNT_T pnts2,
INT  num2,
enum f_line_detection_mode  lsm_mode,
INT  lsm_param,
DPNT_T cross,
DOUBLE *  angle 
)

2直線(2点群指定)の交点座標と交角の角度の算出

点群G1の作る直線とL1、点群G2の作る直線L2の交点座標P1と交角の角度を求めます。

fie_cg_calc_cross_2lineB.png

直線生成パラメータ( lsm_param )は、直線生成モードにより意味が異なります。 パラメータの意味は以下の通りです。

  • F_LINE_DETECTION_NORMAL 無視されます
  • F_LINE_DETECTION_NUM 繰り返し回数を指定します
  • F_LINE_DETECTION_DIST_A 求められた直線と点との閾値(距離)を指定します
  • F_LINE_DETECTION_DIST_B 求められた直線と点との閾値(距離)を指定します
なお、距離指定モード1、2のいずれかを指定した場合、繰り返し求められる直線と各点との閾値(距離) 以内の点の数が2以下になった場合、 F_ERR_CALC_IMPOSSIBLE となります。 例えば、点群の各点のばらつきが大きい場合などに発生します。

引数:
[in] pnts1 座標点群G1(2〜1000)。 num1 個の点が必要。
[in] num1 点群G1に入っている点の数
[in] pnts2 座標点群G2(2〜1000)。 num2 個の点が必要。
[in] num2 点群G2に入っている点の数
[in] lsm_mode 直線生成のモード
  • F_LINE_DETECTION_NORMAL 通常直線検出モード
  • F_LINE_DETECTION_NUM 回数指定モード
  • F_LINE_DETECTION_DIST_A 距離指定モード1
  • F_LINE_DETECTION_DIST_B 距離指定モード2
[in] lsm_param 直線生成のパラメータ
[out] cross 2直線が作る交点座標P1
[out] angle 2直線のなす角のうち、小さい方の角度(単位:ラジアン [0,$\pi/2$] )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_2lineC ( DLINE_T  line1,
DLINE_T  line2,
DPNT_T cross,
DOUBLE *  angle 
)

2直線の交点座標と交角の角度の算出

直線L1とL2の交点座標Pcと交角の角度を求めます。

fie_cg_calc_cross_2lineC.png

2直線が平行で、交わらない場合は、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] line1 直線L1
[in] line2 直線L2
[out] cross 2直線の交点座標Pc
[out] angle 2直線のなす角のうち、小さい方の角度(単位:ラジアン [0, $\pi/2$] )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー(2直線が平行で、交点が求まらない)
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_circle_npoints ( DPNT_T **  pnts_set,
const INT *  num_set,
INT  set_num,
DPNT_T center,
DOUBLE *  radius 
)

複数点群を通る円の中心座標と半径の算出

N個の点群Gn{n = 1,2,…N}を通る円の中心座標Pcと半径rを求めます。 各点群の点数を合計した個数が16個以上の時は、各点群の配列の最初から順番に点を取りだして行き、16個を選びます。

fie_cg_calc_circle_npoints.png

各点群には1個以上の点がなければいけません。 点が0個の点群が含まれていた場合は、 F_ERR_INVALID_PARAM を返します。 また、すべての点が同一座標であったなど不正な点群を与えた場合、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnts_set 複数の座標点群Gnの配列。 3個以上の要素が必要
[in] num_set 各点群に入っている点の個数の配列。 set_num 個分の要素が必要
[in] set_num 点群数
[out] center 円の中心座標Pc
[out] radius 円の半径r
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_circle_and_lineA ( const DPNT_T pnts,
INT  num,
DPNT_T  pnt1,
DPNT_T  pnt2,
INT *  cross_num,
DPNT_T cross1,
DPNT_T cross2 
)

点群を通る円と2点を通る直線の交点

点群G1を通る円と2点P1とP2を通る直線L1の交点Pi1とPi2を求めます。 交点が1個のときはPi2の値は意味を持ちません。 交点が見つからない(交点が0個)ときはPi1とPi2の値は両方とも意味を持ちません。

fie_cg_calc_cross_circle_and_lineA.png

円を生成するG1は、点の数が3〜16個の範囲でなければいけません。 違った場合は、 F_ERR_INVALID_PARAM を返します。
また、例えば直線の方程式の係数a, bが共に0のような直線が不正な直線を与えた場合は F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnts 円を生成する座標点群G1。 num 個の点が必要
[in] num 点群の点数(3〜16個)
[in] pnt1 直線を構成する座標点P1
[in] pnt2 直線を構成する座標点P2
[out] cross_num 交点数
[out] cross1 交点座標Pi1
[out] cross2 交点座標Pi2
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_circle_and_lineB ( DPNT_T  center,
DOUBLE  radius,
DLINE_T  line,
INT *  cross_num,
DPNT_T cross1,
DPNT_T cross2 
)

円と直線の交点の算出

円C1と直線L1の交点Pi1とPi2を求めます。 交点が1個のときはPi2の値は意味を持ちません。 交点が見つからないとき(交点が0個)はPi1とPi2の値は両方とも意味を持ちません。

fie_cg_calc_cross_circle_and_lineB.png

例えば直線の方程式の係数a, bが共に0のような直線が不正な直線を与えた場合は F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] center 円の中心座標
[in] radius 円の半径
[in] line 直線L1
[out] cross_num 交点数
[out] cross1 交点座標Pi1
[out] cross2 交点座標Pi2
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_2circleA ( const DPNT_T pnts1,
INT  num1,
const DPNT_T pnts2,
INT  num2,
INT *  cross_num,
DPNT_T cross1,
DPNT_T cross2 
)

点群1を通る円1と点群2を通る円2の交点の算出

点群G1を通る円C1と点群G2を通る円C2の交点Pi1とPi2を求めます。 交点が1個のときはPi2の値は意味を持ちません。 交点が見つからない(交点が0個)ときはPi1とPi2の値は両方とも意味を持ちません。

fie_cg_calc_cross_2circleA.png

G1およびG2に指定される点群は、それぞれ点の数が3〜16個の範囲 でなければいけません。違っている場合は、 F_ERR_INVALID_PARAM を返します。 また、円1と円2が重なった場合や、すべての点が同一座標であったなど不正な点群を与えた場合、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnts1 円1を生成する座標点群G1。 num1 個の点が必要。
[in] num1 点群pnts1 に入っている点の数(3〜16)
[in] pnts2 円2を生成する座標点群G2。 num2 個の点が必要。
[in] num2 点群 pnts2 に入っている点の数(3〜16)
[out] cross_num 交点数
[out] cross1 交点座標Pi1
[out] cross2 交点座標Pi2
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_2circleB ( DPNT_T  center1,
DOUBLE  radius1,
DPNT_T  center2,
DOUBLE  radius2,
INT *  cross_num,
DPNT_T cross1,
DPNT_T cross2 
)

2つの円の交点の算出

円C1と円C2の交点Pi1とPi2を求めます。 交点が1個のときはPi2の値は意味を持ちません。 交点が見つからない(交点が0個)ときはPi1とPi2の値は意味を持ちません。

fie_cg_calc_cross_2circleB.png

円1と円2が重なっているときには、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] center1 円1の中心座標
[in] radius1 円1の半径
[in] center2 円2の中心座標
[in] radius2 円2の半径
[out] cross_num 交点の個数
[out] cross1 交点座標Pi1
[out] cross2 交点座標Pi2
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_rectangle_5point ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T  pnt3,
DPNT_T  pnt4,
DPNT_T  pnt5,
DOUBLE *  long_len,
DOUBLE *  short_len,
DPNT_T center 
)

5点を通る辺を持つ四角形の中心座標

5点Pn{n=1,2,3,4,5}で決定される四角形の中心座標Pcを求めます。

fie_cg_calc_rectangle_5point.png

求められた直線が平行で交点が求められない場合、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt1 四角形の基準となる辺を作る直線Lのための点P1
[in] pnt2 四角形の基準となる辺を作る直線Lのための点P2
[in] pnt3 直線Lと隣り合う辺を作る点P3
[in] pnt4 直線Lと向かい合う辺を作る点P4
[in] pnt5 直線Lと隣り合う辺を作る点P5
[out] long_len 長方形の長辺の長さ
[out] short_len 長方形の短辺の長さ
[out] center 長方形の中心座標点
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_distance_2point ( DPNT_T  pnt1,
DPNT_T  pnt2,
DOUBLE *  dist 
)

2点間の距離の算出

下記式により、点P1 $(x1,y1)$ とP2 $(x2,y2)$ の距離dを求めます。

\[ d=\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2} \]

fie_cg_calc_distance_2point.png

引数:
[in] pnt1 座標点P1
[in] pnt2 座標点P2
[out] dist 2点間の距離d
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_distance_npoint ( const DPNT_T pnts,
INT  num,
DOUBLE *  dist 
)

N点間の距離の算出

点群G1のN個の点Pn{n=1,2,3,4,5}に関して格納している順番に前後の点の距離の積算を求めます。

fie_cg_calc_distance_npoint.png

引数:
[in] pnts 座標点群G1。 num 個の点が必要です。
[in] num 点群 pnts に入っている点の数N
[out] dist 積算距離
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_centerline_2npoint ( const DPNT_T pnts1,
INT  num1,
const DPNT_T pnts2,
INT  num2,
enum f_line_detection_mode  lsm_mode,
INT  lsm_param,
DLINE_T line 
)

2直線の中心を通る直線の算出(2点群指定)

点群G1とG2が作る2直線L1とL2から等距離にある点群が生成する直線の検出します。

fie_cg_calc_centerline_2npoint.png

G1およびG2に指定する点群の点の数は、それぞれ2〜1000個の範囲でなければいけません。 違っている場合は F_ERR_INVALID_PARAM を返します。 また、すべての点が同一座標であったなど不正な点群を与えた場合、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnts1 直線L1を生成する座標点群G1。 num1 個の点が必要。
[in] num1 点群 pnts1 に入っている点の数(2〜1000)
[in] pnts2 直線L2を生成する座標点群G2。 num2 個の点が必要。
[in] num2 点群 pnts2 に入っている点の数(2〜1000)
[in] lsm_mode 直線生成のモード
  • F_LINE_DETECTION_NORMAL 通常直線検出モード
  • F_LINE_DETECTION_NUM 回数指定モード
  • F_LINE_DETECTION_DIST_A 距離指定モード1
  • F_LINE_DETECTION_DIST_B 距離指定モード2
[in] lsm_param 直線生成のパラメータ
[out] line 2直線の中心を通る直線
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_centerline_4point ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T  pnt3,
DPNT_T  pnt4,
DLINE_T line 
)

2直線の中心を通る直線の算出(4点指定)

点P1とP2、 P3と4が作る2本の直線L1とL2から、等距離にある点群が生成する直線L1の検出します。

fie_cg_calc_centerline_4point.png

P1とP2、またはP3とP4が同一座標であったなど不正な点群を与えた場合、 F_ERR_CALC_IMPOSSIBLE を返します。 また、求められた2直線が直交する場合には、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt1 直線L1を作る座標点P1
[in] pnt2 直線L1を作る座標点P2
[in] pnt3 直線L2を作る座標点P3
[in] pnt4 直線L2を作る座標点P4
[out] line 2直線の中心を通る直線
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_centerline_2line ( DLINE_T  line1,
DLINE_T  line2,
DLINE_T center_line 
)

2直線の中心を通る直線の算出

2つの直線L1とL2の中心を通る直線Lcを求めます。 2直線の交角の狭い方の中心線を検出します。

fie_cg_calc_centerline_2line.png

2直線が直交する場合には、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] line1 直線L1
[in] line2 直線L2
[out] center_line 2直線の中心を通る直線L3
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_4line ( DLINE_T  line1,
DLINE_T  line2,
DLINE_T  line3,
DLINE_T  line4,
DPNT_T cross 
)

2組の2直線の中心を通る直線の交点の検出(4直線指定)

4直線から2本の中心線を作り、その2本の中心線の交点を求めます。

直線L1とL2の中心を通る直線Lc1を求めます。 次に、直線L3とL4の中心を通る直線Lc2を求めます。 求められた中心線Lc1とLc2の交点Pc1を求め、これを結果として返します。

fie_cg_calc_cross_4line.png

L1とL2が直交している場合、またはL3とL4が直交している場合は、 Lc1またはLc2が求まらないためエラーとなり、 F_ERR_CALC_IMPOSSIBLE を返します。 また、Lc1とLc2が平行となる場合は、交点が求まらないためエラーとなり、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] line1 直線L1
[in] line2 直線L2
[in] line3 直線L3
[in] line4 直線L4
[out] cross 中心線Lc1と中心線Lc2の交点座標Pc1
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_4npoint ( const DPNT_T pnts1,
INT  num1,
const DPNT_T pnts2,
INT  num2,
const DPNT_T pnts3,
INT  num3,
const DPNT_T pnts4,
INT  num4,
enum f_line_detection_mode  lsm_mode,
INT  lsm_param,
DPNT_T cross 
)

2組の2直線の中心を通る直線の交点の算出(4点群指定)

点群G1とG2が作る2直線L1とL2から等距離にある点群が生成する中心線Lc1の検出します。 点群G3とG4が作る2直線L3とL4から等距離にある点群が生成する中心線Lc2の検出します。 中心線Lc1と中心線Lc2の交点Pc1を求めます。

fie_cg_calc_cross_4npoint.png

各点群の点の数は2〜1000個の範囲でなければいけません。 違っている場合は、 F_ERR_INVALID_PARAM を返します。 L1とL2が直交している場合、またはL3とL4が直交している場合は、 Lc1またはLc2が求まらないためエラーとなり、 F_ERR_CALC_IMPOSSIBLE を返します。 また、Lc1とLc2が平行となる場合は、交点が求まらないためエラーとなり、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnts1 直線L1を生成する座標点群G1
[in] num1 点群 pnts1 に入っている点の数(2〜1000)
[in] pnts2 直線L2を生成する座標点群G2
[in] num2 点群 pnts2 に入っている点の数(2〜1000)
[in] pnts3 直線L3を生成する座標点群G3
[in] num3 点群 pnts3 に入っている点の数(2〜1000)
[in] pnts4 直線L4を生成する座標点群G4
[in] num4 点群 pnts4 に入っている点の数(2〜1000)
[in] lsm_mode 直線生成のモード
  • F_LINE_DETECTION_NORMAL 通常直線検出モード
  • F_LINE_DETECTION_NUM 回数指定モード
  • F_LINE_DETECTION_DIST_A 距離指定モード1
  • F_LINE_DETECTION_DIST_B 距離指定モード2
[in] lsm_param 直線生成のパラメータ
[out] cross 中心線Lc1と中心線Lc2の交点座標Pc1
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_8point ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T  pnt3,
DPNT_T  pnt4,
DPNT_T  pnt5,
DPNT_T  pnt6,
DPNT_T  pnt7,
DPNT_T  pnt8,
DPNT_T cross 
)

2組の2直線の中心を通る直線の交点の算出(8点指定)

8点Pn{n=1,2,3,4,5,6,7,8}が作る4直線Ln{n = 1,2,3,4}の2本の中心線Lc1とLc2の交点座標Pc1の検出をします。

  • P1、2P2、P3、P4、P5、P5、P7、P8の各直線を4つ検出
  • L1とL2、L3とL4の2本の中心を検出
  • 2で求めた2本の直線Lc1とLc2の交点Pc1の検出
    fie_cg_calc_cross_8point.png
以下の場合は、エラーとなり、 F_ERR_CALC_IMPOSSIBLE を返します。
  • 各直線を設定する2点が同一点の場合(直線が求まらない)
  • L1とL2が直交している場合、、またはL3とL4が直交している場合 (中心線Lc1、またはLc2が求まらないため)
  • 中心線Lc1とLc2が平行となる場合(交点が求まらないため)
引数:
[in] pnt1 直線L1を設定する座標点P1
[in] pnt2 直線L1を設定する座標点P2
[in] pnt3 直線L2を設定する座標点P3
[in] pnt4 直線L2を設定する座標点P4
[in] pnt5 直線L3を設定する座標点P5
[in] pnt6 直線L3を設定する座標点P6
[in] pnt7 直線L4を設定する座標点P7
[in] pnt8 直線L4を設定する座標点P8
[out] cross 中心線Lc1とLc2の交点座標Pc1
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_rectangle_4line ( DLINE_T  lineAB,
DLINE_T  lineBC,
DLINE_T  lineCD,
DLINE_T  lineDA,
DOUBLE *  long1,
DOUBLE *  short1,
DOUBLE *  long2,
DOUBLE *  short2,
DPNT_T center 
)

四角形の中心座標の算出(4直線指定)

4つの直線AB、BC、CD、DAが作る四角形の中心座標(対角線の交点)Pcと長辺、短辺の長さを求めます。

長辺と短辺を格納する long1short1 は、四角形の辺ABと辺BCの長さを比較して長い方が long1 に格納され、短い方は short1 に格納されます。 また、long2short2 については long1 に辺ABが入った場合には long2 は辺CD、 short2 には辺DAのように辺ABと辺CD、辺BCと辺DAの向かい合う辺同士が対応して longshort に格納されます。

fie_cg_calc_rectangle_4line.png

引数:
[in] lineAB 辺AB
[in] lineBC 辺BC
[in] lineCD 辺CD
[in] lineDA 辺DA
[out] long1 長辺1の長さ
[out] short1 短辺1の長さ
[out] long2 長辺2の長さ
[out] short2 短辺2の長さ
[out] center 中心点座標
直線が平行で交点が求められない場合や向かい合う直線が同一の場合、 F_ERR_CALC_IMPOSSIBLE を返します。

戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_rectangle_4npoint ( const DPNT_T pntsAB,
INT  numAB,
const DPNT_T pntsBC,
INT  numBC,
const DPNT_T pntsCD,
INT  numCD,
const DPNT_T pntsDA,
INT  numDA,
enum f_line_detection_mode  lsm_mode,
INT  lsm_param,
DOUBLE *  long1,
DOUBLE *  short1,
DOUBLE *  long2,
DOUBLE *  short2,
DPNT_T center 
)

四角形の中心座標の算出(4点群指定)

4つの点群から得られる4つの直線AB、BC、CD、DAが作る四角形の中心座標(対角線の交点)Pcと長辺、 短辺の長さを求めます。

長辺と短辺を格納する long1short1 は、四角形の辺ABと辺BCの長さを比較して 長い方が long1 に格納され、短い方は short1 に格納されます。 また、 long2short2 については long1 に辺ABが入った場合には long2 は 辺CD、 short2 には辺DAのように辺ABと辺CD、 辺BCと辺DAの向かい合う辺同士が対応して longshort に格納されます。

fie_cg_calc_rectangle_4npoint.png

直線生成パラメータ( lsm_param )は、直線生成モードにより意味が異なります。 パラメータの意味は以下の通りです。

  • F_LINE_DETECTION_NORMAL 無視されます
  • F_LINE_DETECTION_NUM 繰り返し回数を指定します
  • F_LINE_DETECTION_DIST_A 求められた直線と点との閾値(距離)を指定します
  • F_LINE_DETECTION_DIST_B 求められた直線と点との閾値(距離)を指定します
なお、距離指定モード1、2のいずれかを指定した場合、繰り返し求められる直線と各点との閾値(距離) 以内の点の数が2以下になった場合、 F_ERR_CALC_IMPOSSIBLE となります。 例えば、点群の各点のばらつきが大きい場合などに発生します。 また、各座標群においてすべての点が同一座標であったなど不正な点群を与えた場合、 直線が平行で交点が求められない場合や向かい合う直線が同一の場合、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pntsAB 辺ABを作る座標点群。 numAB 個の点が必要
[in] numAB 点群 pntsAB に入っている点の数(2〜1000)
[in] pntsBC 辺BCを作る座標点群。 numBC 個の点が必要
[in] numBC 点群 pntsBC に入っている点の数(2〜1000)
[in] pntsCD 辺CDを作る座標点群。 numCD 個の点が必要
[in] numCD 点群 pntsCD に入っている点の数(2〜1000)
[in] pntsDA 辺DAを作る座標点群。 numDA 個の点が必要
[in] numDA 点群 pntsDA に入っている点の数(2〜1000)
[in] lsm_mode 直線生成のモード
  • F_LINE_DETECTION_NORMAL 通常直線検出モード
  • F_LINE_DETECTION_NUM 回数指定モード
  • F_LINE_DETECTION_DIST_A 距離指定モード1
  • F_LINE_DETECTION_DIST_B 距離指定モード2
[in] lsm_param 直線生成のパラメータ
[out] long1 長辺1の長さ
[out] short1 短辺1の長さ
[out] long2 長辺2の長さ
[out] short2 短辺2の長さ
[out] center 中心点座標
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_mark ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T  pnt3,
DPNT_T  pnt4,
DPNT_T  pnt5,
DPNT_T  pnt6,
DPNT_T  pnt7,
DPNT_T  pnt8,
DPNT_T center 
)

トンボマークの中心の算出

トンボマークの中心座標の検出をします。

  • 点P1とP2、P3とP4、P5とP6、P7とP8の4つの中点Pcn{n = 12, 34, 56, 78}検出
  • Pc12とPc56、Pc34とPc78を通る2本の直線L1とL2の検出
  • L1とL2の交点Pcの検出
    fie_cg_calc_cross_mark.png
上記した各点の組み合わせで、同一座標であったなど不正な点群を与えた場合、 F_ERR_CALC_IMPOSSIBLE を返します。 また、求められた2直線が平行な場合には、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt1 座標点P1
[in] pnt2 座標点P2
[in] pnt3 座標点P3
[in] pnt4 座標点P4
[in] pnt5 座標点P5
[in] pnt6 座標点P6
[in] pnt7 座標点P7
[in] pnt8 座標点P8
[out] center 中心座標Pc1
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_long_hole_6point ( DPNT_T  pnt1,
DPNT_T  pnt2,
DPNT_T  pnt3,
DPNT_T  pnt4,
DPNT_T  pnt5,
DPNT_T  pnt6,
DOUBLE *  long1,
DOUBLE *  short1,
DOUBLE *  long2,
DOUBLE *  short2,
DPNT_T center 
)

長穴の測定(6点指定)

入力6点によって作られる長穴の測定を行います。

長穴の作る四角形の検出について
以下に処理内容を順に示します。
  • (1)P1〜P6が与えられます。
    fie_cg_calc_long_hole_6point1.png
  • (2)P1とP2、P4とP5の作る各直線(L12,L45)を求め、2直線の中心線Lcの検出します。
    fie_cg_calc_long_hole_6point2.png
  • (3)P2とP3とP4の作る円C1、 P5とP6とP1の作る円C2の検出します。
    fie_cg_calc_long_hole_6point3.png
  • (4)円C1と中心線Lcの外側の交点 Pi1 、円C2と中心線の外側の交点 Pi2 を求めます。
    fie_cg_calc_long_hole_6point4.png
  • (5)Pi1上での接線TL1、Pi2上での接線TL2を求めます。
    fie_cg_calc_long_hole_6point5.png
  • (6)以上のL12、TL1、L45、TL2の4つの直線が作る四角形から長穴の測定します。
    fie_cg_calc_long_hole_6point.png
長辺と短辺について
長辺と短辺を格納する long1short1 は、四角形のL12とTL1の長さを比較して長い方が long1 に格納され、短い方は short1 に格納されます。 long2short2 については long1 にL12が入った場合には long2 はL45、 short2 にはTL2のようにL12とL45、TL1とTL2の向かい合う辺同士が対応して longshort に格納されます。
上記した各点の直線や円を求めるための組み合わせで、同一座標であったなど不正な点群を与えた場合、 F_ERR_CALC_IMPOSSIBLE を返します。 また、求められた4直線から四角形を求められない場合は、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt1 座標点P1
[in] pnt2 座標点P2
[in] pnt3 座標点P3
[in] pnt4 座標点P4
[in] pnt5 座標点P5
[in] pnt6 座標点P6
[out] long1 長穴の作る四角形の長辺1
[out] short1 長穴の作る四角形の短辺2
[out] long2 長穴の作る四角形の長辺2
[out] short2 長穴の作る四角形の短辺2
[out] center 長穴の作る四角形の中心座標Pc
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_tangent_line ( DPNT_T  pnt,
DPNT_T  center,
DOUBLE  radius,
DLINE_T line 
)

円の接線の方程式の算出

中心Pc1、半径rの円上の点P1における接線Lを求めます。 円上の点の指定は、厳密にいえば整数型の指定では誤差が出てしまいます。 よって本関数では、誤差を四捨五入して1画素未満であれば円の方程式により正しい円上の点を導きだし、その点上での接線の方程式を求めます。

fie_cg_calc_tangent_line.png

P1が円上の点でない場合、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] pnt 円上にある点P1
[in] center 円の中心座標C1
[in] radius 円の半径r
[out] line 接線L
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_cross_ellipse_and_line ( DPNT_T  center,
DOUBLE  major,
DOUBLE  minor,
DOUBLE  theta,
DLINE_T  line,
INT *  cross_num,
DPNT_T cross1,
DPNT_T cross2 
)

楕円と直線の交点の算出

楕円Eと直線Lの交点Pi1とPi2を求めます。

fie_cg_calc_cross_ellipse_and_line.png

交点が1個のときはPi2の値は意味を持ちません。 交点が見つからないとき(交点が0個)はPi1とPi2の値は両方とも意味を持ちません。 交点が2個の場合は、次のような条件で結果を出力します。

2つの交点のx座標が異なる場合
x座標の値が小さい方をPi1、大きい方をPi2として出力します。
2つの交点のx座標が等しい場合
y座標の値が小さい方をPi1、大きい方をPi2として出力します。
直線の方程式の係数a, bが共に0のような、パラメータが不正な直線を与えた場合は F_ERR_CALC_IMPOSSIBLE を返します。 また、係数a, bの絶対値が共に極端に小さい値である場合、交点の算出ができない可能性があります。その場合はF_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] center 楕円の中心座標
[in] major 楕円の主軸長
[in] minor 楕円の副軸長
[in] theta 楕円の主軸傾き ( 単位:ラジアン )
[in] line 直線L
[out] cross_num 交点数
[out] cross1 交点座標Pi1
[out] cross2 交点座標Pi2
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_cg_calc_distance_ellipse_to_point ( DPNT_T  center,
DOUBLE  major,
DOUBLE  minor,
DOUBLE  theta,
DPNT_T  point,
DOUBLE *  distance,
DPNT_T nearest_point,
BOOL *  outer 
)

楕円と点の距離

点P1 $(x1,y1)$ と、点P1に最も近い楕円E上の点P2を算出し、その最短距離dを求めます。 また、点P1と楕円Eの内外判定も併せて求めます

fie_cg_calc_distance_ellipse_to_point.png

最短距離について
点P1と楕円Eの最短距離dは、P1とEの位置関係(点P1が楕円の内部か、外部か)に関係なく、 単純に楕円までの最短距離のみを求めます。
点P1の内外判定について
点P1が楕円の外部か否かの判定は、outer に設定されます。判定結果は以下のようになります。
  • P1が楕円の外部 : outer にTRUEが設定されます
  • P1が楕円の内部か楕円上 : outer にFALSEが設定されます

楕円上の点P2について
点P1との最短距離を与える楕円上の点P2は、一般的には唯一に定まります。 しかし、点P1と楕円Eの位置関係や、楕円Eの形状が特殊な場合は、そのような点が 複数存在するケースがあります。その場合は、以下の条件に合わせて1点を選び、 その値を出力します。
  • 各点の座標を比較し、x座標が最大となるものを選びます。この時点で点がひとつに定まった場合は、この点を出力します
  • x座標が最大となる点が複数ある場合は、その中でさらにy座標の比較を行い、y座標が最大となる点を出力します

出力側の引数( distance , nearest_point , outer )は、必要無いものについてはNULL指定が可能です。 例えば、距離のみを算出したい場合は、distance のみ有効なポインタを設定し、他の2つはNULLを指定すれば 良いです。全ての引数にNULLを指定した場合は、何もせずそのまま正常終了します。

楕円の長軸や短軸が0以下のような、パラメータが不正な楕円を与えた場合は、 F_ERR_CALC_IMPOSSIBLE を返します。

引数:
[in] center 楕円Eの中心座標
[in] major 楕円Eの主軸長
[in] minor 楕円Eの副軸長
[in] theta 楕円Eの主軸傾き ( 単位:ラジアン )
[in] point 座標点P1
[out] distance 楕円EとP1との最短距離d
[out] nearest_point 楕円EとP1との最短距離dを与える、楕円E上の点P2
[out] outer P1が楕円Eの外部か内部かの判定結果( TRUE:楕円外部 / FALSE:楕円上か楕円内)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_CALC_IMPOSSIBLE 計算不能エラー
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2