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

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