Revision: 76191
http://sourceforge.net/p/brlcad/code/76191
Author: starseeker
Date: 2020-06-24 13:47:45 +0000 (Wed, 24 Jun 2020)
Log Message:
-----------
API shouldn't insist on sqrt - it isn't always needed, and the caller may not
wish to pay the performance penalty.
Modified Paths:
--------------
brlcad/trunk/include/bg/lseg.h
brlcad/trunk/src/libbg/lseg_lseg.c
brlcad/trunk/src/libbg/tests/lseg_lseg.c
brlcad/trunk/src/libbrep/opennurbs_ext.cpp
Modified: brlcad/trunk/include/bg/lseg.h
===================================================================
--- brlcad/trunk/include/bg/lseg.h 2020-06-24 06:47:35 UTC (rev 76190)
+++ brlcad/trunk/include/bg/lseg.h 2020-06-24 13:47:45 UTC (rev 76191)
@@ -36,11 +36,28 @@
__BEGIN_DECLS
+#if 0
+/* Compute the closest 2D point on the 2D line segment P0->P1 to point Q.
+ * Returns the distance squared from Q to the closest point and the closest
+ * point in question if c is non-NULL.
+ */
+BG_EXPORT double
+bg_lseg2_pt2_dist_sq(point2d_t *c, const point2d_t P0, const point2d_t P1,
const point2d_t Q);
+
+/* Compute the closest point on the line segment P0->P1 to point Q. Returns
+ * the distance squared from Q to the closest point and the closest point in
+ * question if c is non-NULL.
+ */
+BG_EXPORT double
+bg_lseg_pt_dist_sq(point_t *c, const point_t P0, const point_t P1, const
point_t Q);
+#endif
+
/* Compute the closest points on the line segments P0->P1 and Q0->Q1. Returns
- * the distance between the closest points and (optionally) the closest points
- * in question (c1 is the point on P0->P1, c2 is the point on Q0->Q1). */
+ * the distance squared between the closest points and (optionally) the closest
+ * points in question (c1 is the point on P0->P1, c2 is the point on Q0->Q1).
+ */
BG_EXPORT double
-bg_lseg_lseg_dist(point_t *c1, point_t *c2,
+bg_lseg_lseg_dist_sq(point_t *c1, point_t *c2,
const point_t P0, const point_t P1, const point_t Q0, const point_t Q1);
__END_DECLS
Modified: brlcad/trunk/src/libbg/lseg_lseg.c
===================================================================
--- brlcad/trunk/src/libbg/lseg_lseg.c 2020-06-24 06:47:35 UTC (rev 76190)
+++ brlcad/trunk/src/libbg/lseg_lseg.c 2020-06-24 13:47:45 UTC (rev 76191)
@@ -207,11 +207,11 @@
double
-bg_lseg_lseg_dist(point_t *c1, point_t *c2,
+bg_lseg_lseg_dist_sq(point_t *c1, point_t *c2,
const point_t P0, const point_t P1, const point_t Q0, const
point_t Q1)
{
vect_t diff, r1a, r1b, r2a, r2b, r1, r2;
- double ldist;
+ double ldist_sq;
struct bg_lseg_result result;
struct bg_lseg_tmp_vals v;
@@ -324,8 +324,8 @@
VMOVE(*c2, r2);
}
VSUB2(diff, r1, r2);
- ldist = sqrt(VDOT(diff, diff));
- return ldist;
+ ldist_sq = VDOT(diff, diff);
+ return ldist_sq;
}
Modified: brlcad/trunk/src/libbg/tests/lseg_lseg.c
===================================================================
--- brlcad/trunk/src/libbg/tests/lseg_lseg.c 2020-06-24 06:47:35 UTC (rev
76190)
+++ brlcad/trunk/src/libbg/tests/lseg_lseg.c 2020-06-24 13:47:45 UTC (rev
76191)
@@ -48,7 +48,7 @@
VSET(Q0, 3.44524589136147830,7.67444957869714628,22.91984784277452647);
VSET(Q1, 3.56555225936148323,7.98564760063074353,23.37334866995422900);
- dist = bg_lseg_lseg_dist(&c0, &c1, P0, P1, Q0, Q1);
+ dist = sqrt(bg_lseg_lseg_dist_sq(&c0, &c1, P0, P1, Q0, Q1));
if (dist < 0) {
bu_exit(-1, "Fatal error - mesh validity test failed\n");
Modified: brlcad/trunk/src/libbrep/opennurbs_ext.cpp
===================================================================
--- brlcad/trunk/src/libbrep/opennurbs_ext.cpp 2020-06-24 06:47:35 UTC (rev
76190)
+++ brlcad/trunk/src/libbrep/opennurbs_ext.cpp 2020-06-24 13:47:45 UTC (rev
76191)
@@ -368,7 +368,7 @@
double ndist;
if (t) {
point_t c1i, l1i;
- ndist = bg_lseg_lseg_dist(&c1i, &l1i, C0, C1, L0, L1);
+ ndist = sqrt(bg_lseg_lseg_dist_sq(&c1i, &l1i, C0, C1, L0, L1));
double nt;
ON_3dPoint tp(c1i[0], c1i[1], c1i[2]);
if (!ON_NurbsCurve_GetClosestPoint(&nt, nc, tp, maximum_distance,
&domain)) {
@@ -380,7 +380,7 @@
}
(*t) = nt;
} else {
- ndist = bg_lseg_lseg_dist(NULL, NULL, C0, C1, L0, L1);
+ ndist = sqrt(bg_lseg_lseg_dist_sq(NULL, NULL, C0, C1, L0, L1));
}
if (dist) {
(*dist) = ndist;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits