PostGIS  3.6.1dev-r@@SVN_REVISION@@

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