/// <summary> /// 定義したグリッドマークの値をすべて削除します. /// </summary> public void CleaerGridMark() { for (int i = 0; i < gridMarks.Length; ++i) { gridMarks[i] = new GridMark(); } }
/// <summary> /// これまで設定したグリッドマークの座標を初期化(消去)します. /// </summary> public void InitializeGridMarks() { gridMarks = new GridMark[AllGridMarksNum]; for (int i = 0; i < gridMarks.Length; ++i) { gridMarks[i] = new GridMark(); } }
/// <summary> /// 指定座標をグリッドマークとして設定します. /// <para>座標値は必ずエマルションでの座標を指定してください。</para> /// <para>ただし,50倍向けに補正された座標が設定されます.</para> /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="gridMarkPoint">設定するグリッドマーク</param> /// <param name="exsited">グリッドマークを発見したと設定するかどうか</param> public void SetGridMark(double x, double y, GridMarkPoint gridMarkPoint, Boolean exsited = true) { Vector2 correctedPoint = getCorrectedGapCoordinate(new Vector2(x, y)); gridMarks[(int)gridMarkPoint] = new GridMark(); gridMarks[(int)gridMarkPoint].x = correctedPoint.X; gridMarks[(int)gridMarkPoint].y = correctedPoint.Y; gridMarks[(int)gridMarkPoint].Existed = exsited; }
/// <summary> /// 与えられたエンコーダ座標系の地点から最も近いグリッドマーク情報を取得します。 /// </summary> /// <param name="point">エンコーダ座標系の座標</param> /// <returns>最も近いグッドマークをエンコーダ座標系で</returns> public GridMark GetTheNearestGridMark(Vector3 encoderPoint) { GridParameter gridParam = parameterManager.GridParameter; if (gridParam.LoadedGridOriginalFine == false) { throw new Exception("null"); } GridMark retval = new GridMark(); Vector2 pmover = new Vector2(); //Vector2 gmover = new Vector2(); Vector2 gstage = new Vector2(); try { double[,] gridOriginalFineX = gridParam.GridOriginalFineX; double[,] gridOriginalFineY = gridParam.GridOriginalFineY; double minDistance = 99999999.9; for (int ix = 0; ix < gridOriginalFineX.GetLength(0); ++ix) { for (int iy = 0; iy < gridOriginalFineX.GetLength(1); ++iy) { double distanceX = gridOriginalFineX[ix, iy] - encoderPoint.X; double distanceY = gridOriginalFineY[ix, iy] - encoderPoint.Y; double distance = Math.Sqrt(distanceX * distanceX + distanceY * distanceY); if (distance < minDistance) { minDistance = distance; retval.x = gridOriginalFineX[ix, iy]; retval.y = gridOriginalFineY[ix, iy]; } } } } catch { throw new Exception("null"); } //Ipt.MtoG(0, gmover.X, gmover.Y, ref gstage.X, ref gstage.Y); Ipt.GToM("p", retval.x, retval.y, ref gstage.X, ref gstage.Y); retval.x = gstage.X; retval.y = gstage.Y; return(retval); }
/// <summary> /// 引数で与えられたグリッドマークの座標を取得します. /// <para>未定義のグリッドマークは予測値を取得します.</para> /// </summary> /// <param name="gridMark">座標を取得したいグリッドマーク</param> /// <returns>グリッドマークの座標</returns> public Vector2 GetGridMarkCoord(GridMarkPoint gridMark) { Vector2 coord = new Vector2(); if (coordManager.GetGridMark(gridMark).Existed) { coord = new Vector2( coordManager.GetGridMark(gridMark).x, coordManager.GetGridMark(gridMark).y); } else { GridMark central = coordManager.GetGridMark(GridMarkPoint.CenterMiddle); coord = new Vector2( innerCoord.GetGridMark(gridMark).x + OffsetX + central.x, innerCoord.GetGridMark(gridMark).y + OffsetY + central.y ); } return(coord); }