public static IntersectionResult ArcArc(GArc arc, GLine line) { var result = new IntersectionResult(); var d = line.EndPoint.Sub(line.StartPoint); var al = Math.Atan(d.Y / d.X); var endAngle = arc.StartAngle - arc.SweepAngle; //no intersection if (al < arc.StartAngle || al > endAngle) { return(result); } else { } return(result); }
public static IntersectionResult ArcLine(GArc arc, GLine line) { var result = new IntersectionResult(); double dx = line.EndPoint.X - line.StartPoint.X; double dy = line.EndPoint.Y - line.StartPoint.Y; double theta = Math.Atan2(dy, dx); var d = line.StartPoint.Distance(line.EndPoint); double r = d - ((arc.MajorAxe * arc.MinorAxe) / Math.Sqrt(Math.Pow(arc.MinorAxe * Math.Cos(theta), 2) + Math.Pow(arc.MajorAxe * Math.Sin(theta), 2))); result.IntersectionPoints.Add( new PointF((float)(line.StartPoint.X + r * Math.Cos(theta)), (float)(line.StartPoint.Y + r * Math.Sin(theta))) ); return(result); }