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

◆ test_lw_dist2d_pt_arc()

static void test_lw_dist2d_pt_arc ( void  )
static

Definition at line 755 of file cu_measures.c.

756{
757 /* int lw_dist2d_pt_arc(const POINT2D* P, const POINT2D* A1, const POINT2D* A2, const POINT2D* A3, DISTPTS* dl) */
758 DISTPTS dl;
759 POINT2D P, A1, A2, A3;
760 int rv;
761
762
763 /* Point within unit semicircle, 0.5 units from arc */
764 A1.x = -1; A1.y = 0;
765 A2.x = 0 ; A2.y = 1;
766 A3.x = 1 ; A3.y = 0;
767 P.x = 0 ; P.y = 0.5;
768
770 rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
771 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
772 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
773
774 /* Point outside unit semicircle, 0.5 units from arc */
775 P.x = 0 ; P.y = 1.5;
777 rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
778 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
779 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
780
781 /* Point outside unit semicircle, sqrt(2) units from arc end point*/
782 P.x = 0 ; P.y = -1;
784 rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
785 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
786 CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0), 0.000001);
787
788 /* Point outside unit semicircle, sqrt(2)-1 units from arc end point*/
789 P.x = 1 ; P.y = 1;
791 rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
792 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
793 CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0)-1, 0.000001);
794
795 /* Point on unit semicircle midpoint */
796 P.x = 0 ; P.y = 1;
798 rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
799 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
800 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001);
801
802 /* Point on unit semicircle endpoint */
803 P.x = 1 ; P.y = 0;
805 rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
806 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
807 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001);
808
809 /* Point on semicircle center */
810 P.x = 0 ; P.y = 0;
812 rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
813 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
814 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001);
815
816 /* Point inside closed circle */
817 P.x = 0 ; P.y = 0.5;
818 A2.x = 1; A2.y = 0;
819 A3 = A1;
821 rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
822 //printf("distance %g\n", dl.distance);
823 CU_ASSERT_EQUAL( rv, LW_SUCCESS );
824 CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
825}
#define LW_SUCCESS
Definition liblwgeom.h:97
int lw_dist2d_pt_arc(const POINT2D *P, const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, DISTPTS *dl)
Definition measures.c:1495
void lw_dist2d_distpts_init(DISTPTS *dl, int mode)
Definition measures.c:67
#define DIST_MIN
Definition measures.h:44
double distance
Definition measures.h:51
Structure used in distance-calculations.
Definition measures.h:50
double y
Definition liblwgeom.h:390
double x
Definition liblwgeom.h:390

References DIST_MIN, DISTPTS::distance, lw_dist2d_distpts_init(), lw_dist2d_pt_arc(), LW_SUCCESS, POINT2D::x, and POINT2D::y.

Referenced by measures_suite_setup().

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