Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
            }
        }