KiCad PCB EDA Suite
ray.cpp File Reference
#include "ray.h"
#include "../../3d_fastmath.h"
#include <cstdio>
#include <wx/debug.h>
#include <wx/log.h>
#include <cmath>

Go to the source code of this file.

Functions

bool IntersectSegment (const SFVEC2F &aStartA, const SFVEC2F &aEnd_minus_startA, const SFVEC2F &aStartB, const SFVEC2F &aEnd_minus_startB)
 

Function Documentation

◆ IntersectSegment()

bool IntersectSegment ( const SFVEC2F aStartA,
const SFVEC2F aEnd_minus_startA,
const SFVEC2F aStartB,
const SFVEC2F aEnd_minus_startB 
)

Definition at line 187 of file ray.cpp.

189 {
190  float rxs = aEnd_minus_startA.x * aEnd_minus_startB.y - aEnd_minus_startA.y *
191  aEnd_minus_startB.x;
192 
193  if( std::abs( rxs ) > glm::epsilon<float>() )
194  {
195  float inv_rxs = 1.0f / rxs;
196 
197  SFVEC2F pq = aStartB - aStartA;
198 
199  float t = ( pq.x * aEnd_minus_startB.y - pq.y * aEnd_minus_startB.x ) * inv_rxs;
200 
201  if( ( t < 0.0f ) || ( t > 1.0f ) )
202  return false;
203 
204  float u = ( pq.x * aEnd_minus_startA.y - pq.y * aEnd_minus_startA.x ) * inv_rxs;
205 
206  if( ( u < 0.0f ) || ( u > 1.0f ) )
207  return false;
208 
209  return true;
210  }
211 
212  return false;
213 }
glm::vec2 SFVEC2F
Definition: xv3d_types.h:45

Referenced by ROUND_SEGMENT_2D::Intersects().