示例#1
0
 public void Reverse( out Line2 outLine )
 {
     outLine.P0 = P1;
     outLine.P1 = P0;
 }
示例#2
0
        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;
        }