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

◆ test_lwline_crossing_long_lines()

static void test_lwline_crossing_long_lines ( void  )
static

Definition at line 325 of file cu_algorithm.c.

326{
327 LWLINE *l51;
328 LWLINE *l52;
329 /*
330 ** More complex test, longer lines and multiple crossings
331 */
332 /* Vertical line with vertices at y integers */
333 l51 = (LWLINE*)lwgeom_from_wkt("LINESTRING(0 0, 0 1, 0 2, 0 3, 0 4)", LW_PARSER_CHECK_NONE);
334
335 /* Two crossings at segment midpoints */
336 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, -1 1.5, 1 3, 1 4, 1 5)", LW_PARSER_CHECK_NONE);
338 lwline_free(l52);
339
340 /* One crossing at interior vertex */
341 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 0 1, -1 1, -1 2, -1 3)", LW_PARSER_CHECK_NONE);
342 CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_CROSS_LEFT );
343 lwline_free(l52);
344
345 /* Two crossings at interior vertices */
346 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 0 1, -1 1, 0 3, 1 3)", LW_PARSER_CHECK_NONE);
348 lwline_free(l52);
349
350 /* Two crossings, one at the first vertex on at interior vertex */
351 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 0, 0 0, -1 1, 0 3, 1 3)", LW_PARSER_CHECK_NONE);
353 lwline_free(l52);
354
355 /* Two crossings, one at the first vertex on the next interior vertex */
356 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 0, 0 0, -1 1, 0 1, 1 2)", LW_PARSER_CHECK_NONE);
358 lwline_free(l52);
359
360 /* Three crossings, two at midpoints, one at vertex */
361 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(0.5 1, -1 0.5, 1 2, -1 2, -1 3)", LW_PARSER_CHECK_NONE);
362 CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_MULTICROSS_END_LEFT );
363 lwline_free(l52);
364
365 /* One mid-point co-linear crossing */
366 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 0 1.5, 0 2.5, -1 3, -1 4)", LW_PARSER_CHECK_NONE);
367 CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_CROSS_LEFT );
368 lwline_free(l52);
369
370 /* One on-vertices co-linear crossing */
371 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 0 1, 0 2, -1 4, -1 4)", LW_PARSER_CHECK_NONE);
372 CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_CROSS_LEFT );
373 lwline_free(l52);
374
375 /* No crossing, but end on a co-linearity. */
376 l52 = (LWLINE*)lwgeom_from_wkt("LINESTRING(1 1, 1 2, 1 3, 0 3, 0 4)", LW_PARSER_CHECK_NONE);
377 CU_ASSERT( lwline_crossing_direction(l51, l52) == LINE_NO_CROSS );
378 lwline_free(l52);
379
380 lwline_free(l51);
381
382}
#define LW_PARSER_CHECK_NONE
Definition liblwgeom.h:2149
int lwline_crossing_direction(const LWLINE *l1, const LWLINE *l2)
Given two lines, characterize how (and if) they cross each other.
@ LINE_MULTICROSS_END_SAME_FIRST_LEFT
Definition liblwgeom.h:1693
@ LINE_MULTICROSS_END_LEFT
Definition liblwgeom.h:1691
@ LINE_CROSS_LEFT
Definition liblwgeom.h:1689
@ LINE_NO_CROSS
Definition liblwgeom.h:1688
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:940
void lwline_free(LWLINE *line)
Definition lwline.c:67

References LINE_CROSS_LEFT, LINE_MULTICROSS_END_LEFT, LINE_MULTICROSS_END_SAME_FIRST_LEFT, LINE_NO_CROSS, LW_PARSER_CHECK_NONE, lwgeom_from_wkt(), lwline_crossing_direction(), and lwline_free().

Referenced by algorithms_suite_setup().

Here is the call graph for this function:
Here is the caller graph for this function: