/// <summary> /// 与线的关系 /// </summary> /// <param name="line"></param> /// <returns></returns> public LineRelation CheckLineRelation(Line2D line) { // 共线判断 if (Double2.CheckInLine(this.normalizedDir, line.normalizedDir) == true) { Double2 diff = line.startPoint - this.startPoint; // 贡献判断 if (Double2.CheckInLine(this.normalizedDir, diff) == true) { return(LineRelation.Coincide); } else { return(LineRelation.Parallel); } } else { Double2 aixsVector1 = line.AixsVector(this.startPoint); Double2 aixsVector2 = line.AixsVector(this.endPoint); if (Double2.Dot(aixsVector1, aixsVector2) < 0) { return(LineRelation.Intersect); } else { return(LineRelation.Detach); } } }
/// <summary> /// 射线与射线间的关系 /// </summary> /// <param name="line"></param> /// <returns></returns> public LineRelation CheckLineRelation(Rays2D line) { // 共线判断 if (Double2.CheckInLine(this.normalizedDir, line.normalizedDir) == true) { Double2 diff = line.startPoint - this.startPoint; // 共线判断 if (Double2.CheckInLine(this.normalizedDir, diff) == true) { return(LineRelation.Coincide); } else { return(LineRelation.Parallel); } } else { // 先判断this 是否与line 所在直线相交 Double2 aixsVector = line.AixsVector(this.startPoint); if (Double2.Dot(aixsVector, this.normalizedDir) > 0) { return(LineRelation.Detach); } // 先判断line 是否与this 所在直线相交 aixsVector = this.AixsVector(line.startPoint); if (Double2.Dot(aixsVector, line.normalizedDir) > 0) { return(LineRelation.Detach); } return(LineRelation.Intersect); } }
/// <summary> /// 判断点是否在直线上 /// </summary> /// <param name="pt"></param> /// <returns></returns> public bool CheckIn(Double2 pt) { Double2 diff = pt - this.startPoint; if (Double2.CheckInLine(diff, this.normalizedDir) == true && Double2.Dot(diff, this.normalizedDir) > 0) { return(true); } return(false); }
/// <summary> /// 判断点是否在线段上 /// </summary> /// <param name="pt"></param> /// <returns></returns> public bool CheckIn(Double2 pt) { Double2 diff1 = pt - this.startPoint; Double2 diff2 = pt - this.endPoint; if (Double2.CheckInLine(diff1, diff2) == true && Double2.Dot(diff1, diff2) <= 0) { return(true); } return(false); }
/// <summary> /// 与直线的关系 /// </summary> /// <param name="line"></param> /// <returns></returns> public LineRelation CheckLineRelation(Line2D line) { // 共线判断 if (Double2.CheckInLine(this.normalizedDir, line.normalizedDir) == true) { Double2 diff = line.startPoint - this.startPoint; // 贡献判断 if (Double2.CheckInLine(this.normalizedDir, diff) == true) { return(LineRelation.Coincide); } else { return(LineRelation.Parallel); } } else { return(LineRelation.Intersect); } }
/// <summary> /// 判断点是否在直线上 /// </summary> /// <param name="pt"></param> /// <returns></returns> public bool CheckIn(Double2 pt) { return(Double2.CheckInLine(pt - this.startPoint, this.normalizedDir)); }