public void Reverse( out Line2 outLine ) { outLine.P0 = P1; outLine.P1 = P0; }
public Vector2? Intersection( Line2 l ) { var p = P0; var r = P1 - P0; var q = l.P0; var s = l.P1 - l.P0; var qp_s = (float) Math.Round( Utils.Cross( q - p, s ), 3 ); var qp_r = (float) Math.Round( Utils.Cross( q - p, r ), 3 ); var r_s = (float) Math.Round( Utils.Cross( r, s ), 3 ); float t = qp_s / r_s; float u = qp_r / r_s; if ( r_s == 0 ) { if ( qp_r == 0 ) { var t0 = Vector2.Dot( q - p, r ) / Vector2.Dot( r, r ); var t1 = t0 + Vector2.Dot( s, r ) / Vector2.Dot( r, r ); if ( Vector2.Dot( s, r ) >= 0 ) { if ( t0 <= 1 && t1 >= 0 ) return q; } else if ( t1 <= 1 && t0 >= 0 ) { return q; } } else { return null; } } else if ( (0 <= t && t <= 1) && (0 <= u && u <= 1) ) { return p + t*r; } return null; }