PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ test_lw_dist2d_pt_arc()

static void test_lw_dist2d_pt_arc ( void  )
static

Definition at line 734 of file cu_measures.c.

735 {
736  /* int lw_dist2d_pt_arc(const POINT2D* P, const POINT2D* A1, const POINT2D* A2, const POINT2D* A3, DISTPTS* dl) */
737  DISTPTS dl;
738  POINT2D P, A1, A2, A3;
739  int rv;
740 
741 
742  /* Point within unit semicircle, 0.5 units from arc */
743  A1.x = -1; A1.y = 0;
744  A2.x = 0 ; A2.y = 1;
745  A3.x = 1 ; A3.y = 0;
746  P.x = 0 ; P.y = 0.5;
747 
749  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
750  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
751  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
752 
753  /* Point outside unit semicircle, 0.5 units from arc */
754  P.x = 0 ; P.y = 1.5;
756  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
757  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
758  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
759 
760  /* Point outside unit semicircle, sqrt(2) units from arc end point*/
761  P.x = 0 ; P.y = -1;
763  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
764  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
765  CU_ASSERT_DOUBLE_EQUAL(dl.distance, sqrt(2.0), 0.000001);
766 
767  /* Point outside unit semicircle, sqrt(2)-1 units from arc end point*/
768  P.x = 1 ; P.y = 1;
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, sqrt(2.0)-1, 0.000001);
773 
774  /* Point on unit semicircle midpoint */
775  P.x = 0 ; P.y = 1;
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, 0.000001);
780 
781  /* Point on unit semicircle endpoint */
782  P.x = 1 ; P.y = 0;
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, 0, 0.000001);
787 
788  /* Point on semicircle center */
789  P.x = 0 ; P.y = 0;
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, 1, 0.000001);
794 
795  /* Point inside closed circle */
796  P.x = 0 ; P.y = 0.5;
797  A2.x = 1; A2.y = 0;
798  A3 = A1;
800  rv = lw_dist2d_pt_arc(&P, &A1, &A2, &A3, &dl);
801  //printf("distance %g\n", dl.distance);
802  CU_ASSERT_EQUAL( rv, LW_SUCCESS );
803  CU_ASSERT_DOUBLE_EQUAL(dl.distance, 0.5, 0.000001);
804 }
#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:1512
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:376
double x
Definition: liblwgeom.h:376

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: