예제 #1
0
        void Find_Split(int i, int j, out int split, out float dist) /* linear search for farthest point */
        {
            int   k;
            HOMOG q = new HOMOG();
            float tmp;

            split = i;      // just to force a value
            dist  = -1;
            if (i + 1 < j)
            {
                CROSSPROD_2CCH(V[i], V[j], q); /* out of loop portion */
                /* of distance computation */
                for (k = i + 1; k < j; k++)
                {
                    tmp = DOTPROD_2CH(V[k], q); /* distance computation */
                    if (tmp < 0)
                    {
                        tmp = -tmp;          /* calling fabs() slows us down */
                    }
                    if (tmp > dist)
                    {
                        dist  = tmp;    /* record the maximum */
                        split = k;
                    }
                }
                dist *= dist / (q.X * q.X + q.Y * q.Y); /* correction for segment */
            }                                           /* length---should be redone if can == 0 */
        }
예제 #2
0
 void Find_Split(int i, int j, out int split, out float dist) /* linear search for farthest point */
 {
     int k;
     HOMOG q= new HOMOG();
     float tmp;
     split = i;      // just to force a value
     dist = -1;
     if (i + 1 < j)
     {
         CROSSPROD_2CCH(V[i], V[j], q); /* out of loop portion */
         /* of distance computation */
         for (k = i + 1; k < j; k++)
         {
             tmp = DOTPROD_2CH(V[k], q); /* distance computation */
             if (tmp < 0) tmp = -tmp; /* calling fabs() slows us down */
             if (tmp > dist)
             {
                 dist = tmp;	/* record the maximum */
                 split = k;
             }
         }
         dist *= dist / (q.X * q.X + q.Y * q.Y); /* correction for segment */
     }				   /* length---should be redone if can == 0 */
 }
예제 #3
0
 /* 2-d cartesian to homog dot product */
 float DOTPROD_2CH(Point p, HOMOG q)
 {
     return q.W + p.X * q.X + p.Y * q.Y;
 }
예제 #4
0
 /* 2-d cartesian to homog cross product */
 void CROSSPROD_2CCH(Point p, Point q,  HOMOG r)
 {
     r.W = p.X * q.Y - p.Y * q.X;
     r.X = -q.Y + p.Y;
     r.Y = q.X - p.X;
 }
예제 #5
0
 float DOTPROD_2CH(Point p, HOMOG q)	/* 2-d cartesian to homog dot product */
 {
     return q.W + p.X * q.X + p.Y * q.Y;
 }
예제 #6
0
 void CROSSPROD_2CCH(Point p, Point q,  HOMOG r) /* 2-d cartesian to homog cross product */
 {
     r.W = p.X * q.Y - p.Y * q.X;
     r.X = -q.Y + p.Y;
     r.Y = q.X - p.X;
 }
예제 #7
0
 float DOTPROD_2CH(Point p, HOMOG q)     /* 2-d cartesian to homog dot product */
 {
     return(q.W + p.X * q.X + p.Y * q.Y);
 }
예제 #8
0
 void CROSSPROD_2CCH(Point p, Point q, HOMOG r)  /* 2-d cartesian to homog cross product */
 {
     r.W = p.X * q.Y - p.Y * q.X;
     r.X = -q.Y + p.Y;
     r.Y = q.X - p.X;
 }