129 if( start_is_inside && end_is_inside )
134 float closerHitT = FLT_MAX;
135 float farHitT = FLT_MAX;
141 const bool leftSegmentHit =
147 closerHitT = leftSegT;
155 const bool rightSegmentHit =
158 if( rightSegmentHit )
160 if( !start_is_inside )
162 if( ( hitted ==
false ) || ( rightSegT < closerHitT ) )
164 closerHitT = rightSegT;
170 if( ( hitted ==
false ) || ( rightSegT > farHitT ) )
180 float circleStart_T0;
181 float circleStart_T1;
186 &circleStart_T0, &circleStart_T1,
187 &circleStart_N0, &circleStart_N1 );
191 if( circleStart_T0 > 0.0f )
193 if( !start_is_inside )
195 if( ( hitted ==
false ) || ( circleStart_T0 < closerHitT ) )
197 closerHitT = circleStart_T0;
198 closerHitNormal = circleStart_N0;
203 if( ( hitted ==
false ) || ( circleStart_T1 > farHitT ) )
205 farHitT = circleStart_T1;
206 farHitNormal = circleStart_N1;
213 if( ( hitted ==
false ) || ( circleStart_T1 > farHitT ) )
215 farHitT = circleStart_T1;
216 farHitNormal = circleStart_N1;
229 &circleEnd_T0, &circleEnd_T1,
230 &circleEnd_N0, &circleEnd_N1 );
233 if( circleEnd_T0 > 0.0f )
235 if( !start_is_inside )
237 if( ( hitted ==
false ) || ( circleEnd_T0 < closerHitT ) )
239 closerHitT = circleEnd_T0;
240 closerHitNormal = circleEnd_N0;
245 if( ( hitted ==
false ) || ( circleEnd_T1 > farHitT ) )
247 farHitT = circleEnd_T1;
248 farHitNormal = circleEnd_N1;
255 if( ( hitted ==
false ) || ( circleEnd_T1 > farHitT ) )
257 farHitT = circleEnd_T1;
258 farHitNormal = circleEnd_N1;
267 if( !start_is_inside )
274 *aNormalOut = closerHitNormal;
278 wxASSERT( (farHitT >= 0.0f) && (farHitT <= 1.0f) );
284 *aNormalOut = -farHitNormal;
bool IntersectCircle(const SFVEC2F &aCenter, float aRadius, float *aOutT0, float *aOutT1, SFVEC2F *aOutNormalT0, SFVEC2F *aOutNormalT1) const