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

◆ test_lw_segment_intersects()

static void test_lw_segment_intersects ( void  )
static

Definition at line 120 of file cu_algorithm.c.

121{
122
123#define setpoint(p, x1, y1) {(p).x = (x1); (p).y = (y1);}
124
125 POINT2D p1, p2, q1, q2;
126
127 /* P: Vertical line at x=0 */
128 setpoint(p1, 0.0, 0.0);
129 p1.x = 0.0;
130 p1.y = 0.0;
131 p2.x = 0.0;
132 p2.y = 1.0;
133
134 /* Q: Horizontal line crossing left to right */
135 q1.x = -0.5;
136 q1.y = 0.5;
137 q2.x = 0.5;
138 q2.y = 0.5;
139 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_RIGHT );
140
141 /* Q: Horizontal line crossing right to left */
142 q1.x = 0.5;
143 q1.y = 0.5;
144 q2.x = -0.5;
145 q2.y = 0.5;
146 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_LEFT );
147
148 /* Q: Horizontal line not crossing right to left */
149 q1.x = 0.5;
150 q1.y = 1.5;
151 q2.x = -0.5;
152 q2.y = 1.5;
153 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION );
154
155 /* Q: Horizontal line crossing at second vertex right to left */
156 q1.x = 0.5;
157 q1.y = 1.0;
158 q2.x = -0.5;
159 q2.y = 1.0;
160 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION );
161
162 /* Q: Horizontal line crossing at first vertex right to left */
163 q1.x = 0.5;
164 q1.y = 0.0;
165 q2.x = -0.5;
166 q2.y = 0.0;
167 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_LEFT );
168
169 /* Q: Diagonal line with large range crossing at first vertex right to left */
170 q1.x = 0.5;
171 q1.y = 10.0;
172 q2.x = -0.5;
173 q2.y = -10.0;
174 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_LEFT );
175
176 /* Q: Diagonal line with large range crossing at second vertex right to left */
177 q1.x = 0.5;
178 q1.y = 11.0;
179 q2.x = -0.5;
180 q2.y = -9.0;
181 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION );
182
183 /* Q: Horizontal touching from left at second vertex*/
184 q1.x = -0.5;
185 q1.y = 0.5;
186 q2.x = 0.0;
187 q2.y = 0.5;
188 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION );
189
190 /* Q: Horizontal touching from right at first vertex */
191 q1.x = 0.0;
192 q1.y = 0.5;
193 q2.x = 0.5;
194 q2.y = 0.5;
195 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_RIGHT );
196
197 /* Q: Horizontal touching from left and far below on second vertex */
198 q1.x = -0.5;
199 q1.y = -10.5;
200 q2.x = 0.0;
201 q2.y = 0.5;
202 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION );
203
204 /* Q: Horizontal touching from right and far above on second vertex */
205 q1.x = 0.5;
206 q1.y = 10.5;
207 q2.x = 0.0;
208 q2.y = 0.5;
209 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION );
210
211 /* Q: Co-linear from top */
212 q1.x = 0.0;
213 q1.y = 10.0;
214 q2.x = 0.0;
215 q2.y = 0.5;
216 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_COLINEAR );
217
218 /* Q: Co-linear from bottom */
219 q1.x = 0.0;
220 q1.y = -10.0;
221 q2.x = 0.0;
222 q2.y = 0.5;
223 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_COLINEAR );
224
225 /* Q: Co-linear contained */
226 q1.x = 0.0;
227 q1.y = 0.4;
228 q2.x = 0.0;
229 q2.y = 0.5;
230 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_COLINEAR );
231
232 /* Q: Horizontal touching at end point from left */
233 q1.x = -0.5;
234 q1.y = 1.0;
235 q2.x = 0.0;
236 q2.y = 1.0;
237 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_NO_INTERSECTION );
238
239 /* Q: Horizontal touching at end point from right */
240 q1.x = 0.0;
241 q1.y = 1.0;
242 q2.x = 0.0;
243 q2.y = 0.5;
244 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_COLINEAR );
245
246 /* Q: Horizontal touching at start point from left */
247 q1.x = 0.0;
248 q1.y = 0.0;
249 q2.x = -0.5;
250 q2.y = 0.0;
251 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_LEFT );
252
253 /* Q: Horizontal touching at start point from right */
254 q1.x = 0.0;
255 q1.y = 0.0;
256 q2.x = 0.5;
257 q2.y = 0.0;
258 CU_ASSERT( lw_segment_intersects(&p1, &p2, &q1, &q2) == SEG_CROSS_RIGHT );
259
260}
#define setpoint(p, x1, y1)
@ SEG_NO_INTERSECTION
@ SEG_COLINEAR
@ SEG_CROSS_RIGHT
@ SEG_CROSS_LEFT
int lw_segment_intersects(const POINT2D *p1, const POINT2D *p2, const POINT2D *q1, const POINT2D *q2)
returns the kind of CG_SEGMENT_INTERSECTION_TYPE behavior of lineseg 1 (constructed from p1 and p2) a...
double y
Definition liblwgeom.h:390
double x
Definition liblwgeom.h:390

References lw_segment_intersects(), SEG_COLINEAR, SEG_CROSS_LEFT, SEG_CROSS_RIGHT, SEG_NO_INTERSECTION, setpoint, POINT2D::x, and POINT2D::y.

Referenced by algorithms_suite_setup().

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