1.圆弧倒角

DVector2d vS = vecStart;DVector2d vE = vecEnd;if (vS.IsParallelTo(vE)) return ;vS.NormalizeInPlace();vE.NormalizeInPlace();DVector2d vMid = vS + vE;vMid.NormalizeInPlace();Angle halfAngel = vS.AngleTo(vMid);double sDis = R / Math.Tan(halfAngel.Radians);double cDis = R / Math.Sin(halfAngel.Radians);DVector2d ptCenter = ptInter + cDis * vMid;DVector2d ptArcStart = ptInter + sDis * vS;DVector2d ptArcEnd = ptInter + sDis * vE;
2.不规则倒角计算


In:ptInter,vecStart,vecEnd,vecHaunch
Out:ptStart,ptEnd
只要保证三个矢量方向正确就可以了
vecHaunch一定是从VecStart指向VecEnd
在函数构建好VecHaunch,这样就可以适用于各种方向了,如上图
if (vecStart.IsParallelTo(vecEnd))
return ;
double angInter = vecStart.AngleTo(vecEnd).Radians;
double angStart = Angle.PI.Radians - vecStart.AngleTo(vecHaunch).Radians;
double angEnd = vecEnd.AngleTo(vecHaunch).Radians;
// 已知,角A,B,C, 边a,求:b,c
// 根据公式:
// a/sinA = b/sinB = c/sinC
// b = a(sinB/sinA)
// c = a(sinC/sinA)
vecStart.NormalizeInPlace();
vecEnd.NormalizeInPlace();
double leng = vecHaunch.MagnitudeXY;
double lStart = Math.Sin(angEnd) * leng / Math.Sin(angInter);
double lEnd = Math.Sin(angStart) * leng / Math.Sin(angInter);
DVector2d ptStart = ptInter + lStart * vecStart;
DVector2d ptEnd = ptInter + lEnd * vecEnd;
