PostGIS  3.2.2dev-r@@SVN_REVISION@@

◆ test_lw_dist2d_pt_arc()

static void test_lw_dist2d_pt_arc ( void  )
static

Definition at line 749 of file cu_measures.c.

750 {
751  /* int lw_dist2d_pt_arc(const POINT2D* P, const POINT2D* A1, const POINT2D* A2, const POINT2D* A3, DISTPTS* dl) */
752  DISTPTS dl;
753  POINT2D P, A1, A2, A3;
754  int rv;
755 
756 
757  /* Point within unit semicircle, 0.5 units from arc */
758  A1.x = -1; A1.y = 0;
759  A2.x = 0 ; A2.y = 1;
760  A3.x = 1 ; A3.y = 0;
761  P.x = 0 ; P.y = 0.5;
762 
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, 0.5 units from arc */
769  P.x = 0 ; P.y = 1.5;
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, 0.5, 0.000001);
774 
775  /* Point outside unit semicircle, sqrt(2) units from arc end point*/
776  P.x = 0 ; 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), 0.000001);
781 
782  /* Point outside unit semicircle, sqrt(2)-1 units from arc end point*/
783  P.x = 1 ; 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, sqrt(2.0)-1, 0.000001);
788 
789  /* Point on unit semicircle midpoint */
790  P.x = 0 ; P.y = 1;
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 unit semicircle endpoint */
797  P.x = 1 ; 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, 0, 0.000001);
802 
803  /* Point on semicircle center */
804  P.x = 0 ; P.y = 0;
806  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
807  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
808  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 1, 0.000001);
809 
810  /* Point inside closed circle */
811  P.x = 0 ; P.y = 0.5;
812  A2.x = 1; A2.y = 0;
813  A3 = A1;
815  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
816  //printf("distance %g\n", dl.distance);
817  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
818  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
819 }
#define LW_SUCCESS
Definition: liblwgeom.h:111
int lw_dist2d_pt_arc(const POINT2D *P, const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, DISTPTS *dl)
Definition: measures.c:1484
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:404
double x
Definition: liblwgeom.h:404

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: