在求直线和圆弧的交点时,我们先分析一下,主要分为两步。
第一步:先求出直线和圆的交点。
第二步: 判断交点是否在圆弧上。
下面开始展示代码,伸手党有福了,可能有些地方写的不好,望谅解,创作不易,喜欢给个好评吧。
主干
/// <summary>
/// 计算直线和圆弧交点方法
/// </summary>
/// <param name="line">线段对象</param>
/// <param name="arc">圆对象</param>
/// <param name="ht">存储交点和error信息</param>
/// <returns>返回ht集合</returns>
internal static Hashtable LineIntersectArc(Line line, Arc arc, Hashtable ht)
{
//得到线段起始点
Vector2 LineStartPoint = line.startPoint;
//得到线段的终点
Vector2 LineEndPoint = line.endPoint;
//得到弧心坐标
Vector2 vector = arc.center;
//起始角度
double startAngle = arc.startAngle;
//终止角度
double endAngle = arc.endAngle;
//得到半径
double rad = arc.radius;
//圆弧的顺逆
bool _direction = arc.direction;
//假设默认交点坐标
Vector2 ptInter1 = new Vector2(0, 0);
Vector2 ptInter2 = new Vector2(0, 0);
//计算得到交点坐标方法
LineInterCircle(LineStartPoint, LineEndPoint, vector, rad * rad, ref ptInter1, ref ptInter2);
//用于存储交点
List<Vector2> node = new List<Vector2>();
//用于判断是否有交点
bool judgeNode = false;
if (Zero(ptInter1))
{
JudgeDotQualified(vector, ptInter1, startAngle, endAngle, node,_direction);
judgeNode = true;
}
if (Zero(ptInter2))
{
JudgeDotQualified(vector, ptInter2, startAngle, endAngle, node, _direction);
judgeNode = true