PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ test_lw_dist2d_pt_arc()

static void test_lw_dist2d_pt_arc ( void  )
static

Definition at line 742 of file cu_measures.c.

743 {
744  /* int lw_dist2d_pt_arc(const POINT2D* P, const POINT2D* A1, const POINT2D* A2, const POINT2D* A3, DISTPTS* dl) */
745  DISTPTS dl;
746  POINT2D P, A1, A2, A3;
747  int rv;
748 
749 
750  /* Point within unit semicircle, 0.5 units from arc */
751  A1.x = -1; A1.y = 0;
752  A2.x = 0 ; A2.y = 1;
753  A3.x = 1 ; A3.y = 0;
754  P.x = 0 ; P.y = 0.5;
755 
757  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
758  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
759  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
760 
761  /* Point outside unit semicircle, 0.5 units from arc */
762  P.x = 0 ; P.y = 1.5;
764  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
765  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
766  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
767 
768  /* Point outside unit semicircle, sqrt(2) units from arc end point*/
769  P.x = 0 ; P.y = -1;
771  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
772  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
773  CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0), 0.000001);
774 
775  /* Point outside unit semicircle, sqrt(2)-1 units from arc end point*/
776  P.x = 1 ; P.y = 1;
778  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
779  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
780  CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0)-1, 0.000001);
781 
782  /* Point on unit semicircle midpoint */
783  P.x = 0 ; P.y = 1;
785  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
786  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
787  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001);
788 
789  /* Point on unit semicircle endpoint */
790  P.x = 1 ; P.y = 0;
792  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
793  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
794  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0, 0.000001);
795 
796  /* Point on semicircle center */
797  P.x = 0 ; P.y = 0;
799  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
800  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
801  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001);
802 
803  /* Point inside closed circle */
804  P.x = 0 ; P.y = 0.5;
805  A2.x = 1; A2.y = 0;
806  A3 = A1;
808  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
809  //printf("distance %g\n", dl.distance);
810  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
811  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
812 }
#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:1513
void lw_dist2d_distpts_init(DISTPTS *dl, int mode)
Definition: measures.c:64
#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: