public IEnumerable <Point> _3_GetViaPoint(Point ptA, Point ptB) { fnLine fn = new fnLine(ptA, ptB); double dx = Math.Abs(ptA.X - ptB.X), dy = Math.Abs(ptA.Y - ptB.Y); Point Pt = new Point(); if (dx > dy) { int sgn = (ptA.X > ptB.X)? -1: 1; for (int sft = 0; ; sft += sgn) { int X = ptA.X + sft; if (X == ptB.X) { yield break; } Pt.X = X; Pt.Y = fn.linePXa(X); yield return(Pt);; } } else { int sgn = (ptA.Y > ptB.Y)? -1: 1; for (int sft = 0; ; sft += sgn) { int Y = ptA.Y + sft; if (Y == ptB.Y) { yield break; } Pt.Y = Y; Pt.X = fn.linePYa(Y); yield return(Pt); } } }
private double AdjustGrid81(Mat stdImg, Point2d[] Q100, int rc1, int rc1A, int rc1B, int rc2, int rc2A, int rc2B) { int sfX = 10, sfX2 = 5; double ev, evMax = 0.0; int sf1Max = 0, sf2Max = 0; Point2d P1 = Q100[rc1], P1A = Q100[rc1A], P1B = Q100[rc1B]; Point2d P2 = Q100[rc2], P2A = Q100[rc2A], P2B = Q100[rc2B]; fnLine fn1 = null, fn2 = null; for (int sf1 = sfX; sf1 != 0; sf1 = ((sf1 < 0)? -(sf1 + 1):-sf1)) { Point P1X = (Point)_2_MovePoint(P1, P1A, P1B, sf1, fn1); for (int sf2 = sfX2; sf2 != 0; sf2 = ((sf2 < 0)? -(sf2 + 1):-sf2)) { Point P2X = (Point)_2_MovePoint(P2, P2A, P2B, sf1 + sf2, fn2); ev = _2_Eval_LineMatching9(stdImg, P1X, P2X, 128); if (ev > evMax) { evMax = ev; sf1Max = sf1; sf2Max = sf1 + sf2; } } } if (evMax > 0) { Q100[rc1] = _2_MovePoint(P1, P1A, P1B, sf1Max, fn1); Q100[rc2] = _2_MovePoint(P2, P2A, P2B, sf2Max, fn2); } return(evMax); }
public Point2d _2_MovePoint(Point2d pt0, Point2d ptA, Point2d ptB, int sft, fnLine fn) { //Move ptA by sft to ptB direction if (fn == null) { fn = new fnLine(ptA, ptB); } double dx = Math.Abs(ptA.X - ptB.X), dy = Math.Abs(ptA.Y - ptB.Y); if (dx > dy) { double X = pt0.X + sft; return(fn.linePX(X)); } else { double Y = pt0.Y + sft; return(fn.linePY(Y)); } }