/// <summary> /// Function to join the 2 lines at the point where they do / would intersect. If they do then /// the lines are clipped to remove the smallest part of the line. Returns false if they /// cannot be joined. /// </summary> /// <param name="Other">The other line</param> public bool Join(C2DLine Other) { var p1 = point; var p2 = GetPointTo(); var p3 = Other.point; var p4 = Other.GetPointTo(); var Ua = (p4.x - p3.x) * (p1.y - p3.y) - (p4.y - p3.y) * (p1.x - p3.x); var Ub = (p2.x - p1.x) * (p1.y - p3.y) - (p2.y - p1.y) * (p1.x - p3.x); var dDenominator = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y); if (dDenominator == 0) { return(false); } Ua = Ua / dDenominator; Ub = Ub / dDenominator; var IntPt = new C2DPoint(p1.x + Ua * (p2.x - p1.x), p1.y + Ua * (p2.y - p1.y)); if (Ua >= 0.5) { this.SetPointTo(IntPt); } else { this.SetPointFrom(IntPt); } if (Ub >= 0.5) { Other.SetPointTo(IntPt); } else { Other.SetPointFrom(IntPt); } return(true); }
/// <summary> /// Function to join the 2 lines at the point where they do / would intersect. If they do then /// the lines are clipped to remove the smallest part of the line. Returns false if they /// cannot be joined. /// </summary> /// <param name="Other">The other line</param> public bool Join(C2DLine Other) { C2DPoint p1 = point; C2DPoint p2 = GetPointTo(); C2DPoint p3 = Other.point; C2DPoint p4 = Other.GetPointTo(); double Ua = (p4.x - p3.x) * (p1.y - p3.y) - (p4.y - p3.y) * (p1.x - p3.x); double Ub = (p2.x - p1.x) * (p1.y - p3.y) - (p2.y - p1.y) * (p1.x - p3.x); double dDenominator = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y); if (dDenominator == 0) return false; Ua = Ua / dDenominator; Ub = Ub / dDenominator; C2DPoint IntPt = new C2DPoint(p1.x + Ua * (p2.x - p1.x), p1.y + Ua * (p2.y - p1.y)); if ( Ua >=0.5) this.SetPointTo( IntPt ); else this.SetPointFrom( IntPt ); if ( Ub >=0.5) Other.SetPointTo( IntPt ); else Other.SetPointFrom( IntPt ); return true; }