PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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:1408
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: