133 if( start_is_inside && end_is_inside )
138 float closerHitT = FLT_MAX;
139 float farHitT = FLT_MAX;
145 const bool leftSegmentHit =
151 closerHitT = leftSegT;
159 const bool rightSegmentHit =
162 if( rightSegmentHit )
164 if( !start_is_inside )
166 if( ( hitted ==
false ) || ( rightSegT < closerHitT ) )
168 closerHitT = rightSegT;
174 if( ( hitted ==
false ) || ( rightSegT > farHitT ) )
184 float circleStart_T0;
185 float circleStart_T1;
190 &circleStart_T0, &circleStart_T1,
191 &circleStart_N0, &circleStart_N1 );
195 if( circleStart_T0 > 0.0f )
197 if( !start_is_inside )
199 if( ( hitted ==
false ) || ( circleStart_T0 < closerHitT ) )
201 closerHitT = circleStart_T0;
202 closerHitNormal = circleStart_N0;
207 if( ( hitted ==
false ) || ( circleStart_T1 > farHitT ) )
209 farHitT = circleStart_T1;
210 farHitNormal = circleStart_N1;
217 if( ( hitted ==
false ) || ( circleStart_T1 > farHitT ) )
219 farHitT = circleStart_T1;
220 farHitNormal = circleStart_N1;
233 &circleEnd_T0, &circleEnd_T1,
234 &circleEnd_N0, &circleEnd_N1 );
237 if( circleEnd_T0 > 0.0f )
239 if( !start_is_inside )
241 if( ( hitted ==
false ) || ( circleEnd_T0 < closerHitT ) )
243 closerHitT = circleEnd_T0;
244 closerHitNormal = circleEnd_N0;
249 if( ( hitted ==
false ) || ( circleEnd_T1 > farHitT ) )
251 farHitT = circleEnd_T1;
252 farHitNormal = circleEnd_N1;
259 if( ( hitted ==
false ) || ( circleEnd_T1 > farHitT ) )
261 farHitT = circleEnd_T1;
262 farHitNormal = circleEnd_N1;
271 if( !start_is_inside )
278 *aNormalOut = closerHitNormal;
282 wxASSERT( (farHitT >= 0.0f) && (farHitT <= 1.0f) );
288 *aNormalOut = -farHitNormal;
bool IntersectCircle(const SFVEC2F &aCenter, float aRadius, float *aOutT0, float *aOutT1, SFVEC2F *aOutNormalT0, SFVEC2F *aOutNormalT1) const