PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ test_ptarray_closest_point_on_segment()

static void test_ptarray_closest_point_on_segment ( void  )
static

Definition at line 735 of file cu_ptarray.c.

736 {
737  POINT4D s0, s1, qp, cp;
738 
739  s0.x = s0.y = 0; s0.z = 10; s0.m = 20;
740  s1.x = 0; s1.y = 10; s1.z = 0; s1.m = 10;
741 
742  /* Closest is bottom point */
743 
744  qp.x = -0.1; qp.y = 0;
745  closest_point_on_segment(&qp, &s0, &s1, &cp);
746  ASSERT_DOUBLE_EQUAL(cp.x, 0);
747  ASSERT_DOUBLE_EQUAL(cp.y, 0);
748  ASSERT_DOUBLE_EQUAL(cp.z, 10);
749  ASSERT_DOUBLE_EQUAL(cp.m, 20);
750 
751  qp.x = 0.1; qp.y = 0;
752  closest_point_on_segment(&qp, &s0, &s1, &cp);
753  ASSERT_DOUBLE_EQUAL(cp.x, 0);
754  ASSERT_DOUBLE_EQUAL(cp.y, 0);
755  ASSERT_DOUBLE_EQUAL(cp.z, 10);
756  ASSERT_DOUBLE_EQUAL(cp.m, 20);
757 
758  qp.x = 0; qp.y = -0.1;
759  closest_point_on_segment(&qp, &s0, &s1, &cp);
760  ASSERT_DOUBLE_EQUAL(cp.x, 0);
761  ASSERT_DOUBLE_EQUAL(cp.y, 0);
762  ASSERT_DOUBLE_EQUAL(cp.z, 10);
763  ASSERT_DOUBLE_EQUAL(cp.m, 20);
764 
765  /* Closest is top point */
766 
767  qp.x = 0; qp.y = 10.1;
768  closest_point_on_segment(&qp, &s0, &s1, &cp);
769  ASSERT_DOUBLE_EQUAL(cp.x, 0);
770  ASSERT_DOUBLE_EQUAL(cp.y, 10);
771  ASSERT_DOUBLE_EQUAL(cp.z, 0);
772  ASSERT_DOUBLE_EQUAL(cp.m, 10);
773 
774  qp.x = 0.1; qp.y = 10;
775  closest_point_on_segment(&qp, &s0, &s1, &cp);
776  ASSERT_DOUBLE_EQUAL(cp.x, 0);
777  ASSERT_DOUBLE_EQUAL(cp.y, 10);
778  ASSERT_DOUBLE_EQUAL(cp.z, 0);
779  ASSERT_DOUBLE_EQUAL(cp.m, 10);
780 
781  qp.x = -0.1; qp.y = 10;
782  closest_point_on_segment(&qp, &s0, &s1, &cp);
783  ASSERT_DOUBLE_EQUAL(cp.x, 0);
784  ASSERT_DOUBLE_EQUAL(cp.y, 10);
785  ASSERT_DOUBLE_EQUAL(cp.z, 0);
786  ASSERT_DOUBLE_EQUAL(cp.m, 10);
787 
788  /* Closest is mid point */
789 
790  qp.x = 0.1; qp.y = 5;
791  closest_point_on_segment(&qp, &s0, &s1, &cp);
792  ASSERT_DOUBLE_EQUAL(cp.x, 0);
793  ASSERT_DOUBLE_EQUAL(cp.y, 5);
794  ASSERT_DOUBLE_EQUAL(cp.z, 5);
795  ASSERT_DOUBLE_EQUAL(cp.m, 15);
796 
797  qp.x = -0.1; qp.y = 5;
798  closest_point_on_segment(&qp, &s0, &s1, &cp);
799  ASSERT_DOUBLE_EQUAL(cp.x, 0);
800  ASSERT_DOUBLE_EQUAL(cp.y, 5);
801  ASSERT_DOUBLE_EQUAL(cp.z, 5);
802  ASSERT_DOUBLE_EQUAL(cp.m, 15);
803 
804  qp.x = 0.1; qp.y = 2;
805  closest_point_on_segment(&qp, &s0, &s1, &cp);
806  ASSERT_DOUBLE_EQUAL(cp.x, 0);
807  ASSERT_DOUBLE_EQUAL(cp.y, 2);
808  ASSERT_DOUBLE_EQUAL(cp.z, 8);
809  ASSERT_DOUBLE_EQUAL(cp.m, 18);
810 
811  qp.x = -0.1; qp.y = 2;
812  closest_point_on_segment(&qp, &s0, &s1, &cp);
813  ASSERT_DOUBLE_EQUAL(cp.x, 0);
814  ASSERT_DOUBLE_EQUAL(cp.y, 2);
815  ASSERT_DOUBLE_EQUAL(cp.z, 8);
816  ASSERT_DOUBLE_EQUAL(cp.m, 18);
817 
818  qp.x = 0.1; qp.y = 8;
819  closest_point_on_segment(&qp, &s0, &s1, &cp);
820  ASSERT_DOUBLE_EQUAL(cp.x, 0);
821  ASSERT_DOUBLE_EQUAL(cp.y, 8);
822  ASSERT_DOUBLE_EQUAL_TOLERANCE(cp.z, 2, 1e-5);
823  ASSERT_DOUBLE_EQUAL(cp.m, 12);
824 
825  qp.x = -0.1; qp.y = 8;
826  closest_point_on_segment(&qp, &s0, &s1, &cp);
827  ASSERT_DOUBLE_EQUAL(cp.x, 0);
828  ASSERT_DOUBLE_EQUAL(cp.y, 8);
829  ASSERT_DOUBLE_EQUAL_TOLERANCE(cp.z, 2, 1e-5);
830  ASSERT_DOUBLE_EQUAL(cp.m, 12);
831 
832 
833 }
#define ASSERT_DOUBLE_EQUAL_TOLERANCE(o, e, t)
#define ASSERT_DOUBLE_EQUAL(o, e)
void closest_point_on_segment(const POINT4D *R, const POINT4D *A, const POINT4D *B, POINT4D *ret)
Definition: ptarray.c:1276
double m
Definition: liblwgeom.h:414
double x
Definition: liblwgeom.h:414
double z
Definition: liblwgeom.h:414
double y
Definition: liblwgeom.h:414

References ASSERT_DOUBLE_EQUAL, ASSERT_DOUBLE_EQUAL_TOLERANCE, closest_point_on_segment(), POINT4D::m, POINT4D::x, POINT4D::y, and POINT4D::z.

Referenced by ptarray_suite_setup().

Here is the call graph for this function:
Here is the caller graph for this function: