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 */ }
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-d cartesian to homog dot product */ float DOTPROD_2CH(Point p, HOMOG q) { return q.W + p.X * q.X + p.Y * q.Y; }
/* 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; }
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; }
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; }
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); }