/* ================ CM_DistanceFromLineSquared ================ */ float CM_DistanceFromLineSquared(vec3_t p, vec3_t lp1, vec3_t lp2, vec3_t dir) { vec3_t proj, t; int j; CM_ProjectPointOntoVector(p, lp1, dir, proj); for (j = 0; j < 3; j++) if ((proj[j] > lp1[j] && proj[j] > lp2[j]) || (proj[j] < lp1[j] && proj[j] < lp2[j])) { break; } if (j < 3) { if (Q_fabs(proj[j] - lp1[j]) < Q_fabs(proj[j] - lp2[j])) { VectorSubtract(p, lp1, t); } else { VectorSubtract(p, lp2, t); } return VectorLengthSquared(t); } VectorSubtract(p, proj, t); return VectorLengthSquared(t); }
float CM_DistanceFromLineSquared(vector3 *p, vector3 *lp1, vector3 *lp2, vector3 *dir) { vector3 proj, t; int j; CM_ProjectPointOntoVector(p, lp1, dir, &proj); for (j = 0; j < 3; j++) if ((proj.data[j] > lp1->data[j] && proj.data[j] > lp2->data[j]) || (proj.data[j] < lp1->data[j] && proj.data[j] < lp2->data[j])) break; if (j < 3) { if (fabs(proj.data[j] - lp1->data[j]) < fabsf(proj.data[j] - lp2->data[j])) VectorSubtract(p, lp1, &t); else VectorSubtract(p, lp2, &t); return VectorLengthSquared(&t); } VectorSubtract(p, &proj, &t); return VectorLengthSquared(&t); }