式:QQ 13712486
1 凸度的概念
凸度有两个作用控制顶点弧度的大小和弧度的方向。如果通过两个坐标点画弧,会有无数种可能性,所以必须引入第三个参数,来确定经过这两点的唯一弧线,这个参数就是凸度。
凸度反应了两点之间对应弧度的大小,它的具体值为这段弧所包含角度的1/4角度的正切值。两点对应的弧度最大值为无限接近360度,凸度对应的值为接近90度的正切值,所以凸度最大值为无穷大。


仔细观察上图,图B的弧度大于图A的弧度,但是图B的半径小于图A。
为什么引入凸度值就能唯一确定弧线了?当凸度确定了,其实弧度对应的半径就确定了。考察一下图C,红线标识的部分为一个等腰三角形,等腰三角形底边长度和顶点角度确定了,就能唯一确定一个三角形大小(属于初中几何知识)。等腰三角形的两个腰长度就是圆的半径。
2 根据凸度计算及画图

不同的画图函数需要的参数也不同,我这里根据具体的画图函数来讲解,如何画图。
WPF绘图上下文类为DrawingContext,这个类有一个绘图函数
这个函数很简单,但是这个函数可以画任意图形;因为Geometry 类功能太强大了,这个类可以描述任意几何形状。看一下如下代码:
void AddArc(PathGeometry pathGeometry, System.Windows.Point point1, System.Windows.Point point2, double bulge, double radius) { PathFigure pathFigure = new PathFigure(); pathFigure.StartPoint = point1;//起点 ArcSegment arcSegment = new ArcSegment(); arcSegment.Point = point2; //终点 //半径 arcSegment.Size = new System.Windows.Size(radius, radius); //对应的角度 double radian = Math.Atan(bulge) * 4; double angle = radian * 180 / Math.PI; arcSegment.RotationAngle =Math.Abs(angle); //弧度的方向 顺时针还是逆时针 arcSegment.SweepDirection = bulge>0? SweepDirection.Clockwise:SweepDirection.Counterclockwise; //是否大于180度 arcSegment.IsLargeArc = Math.Abs(bulge) > 1; pathFigure.Segments.Add(arcSegment); pathGeometry.Figures.Add(pathFigure); }
上述代码根据两点、凸度、圆半径来实现画图。(半径是根据前三个计算出来的,后面会讲该算法)
一个PathGeometry由一个或多个图形暨PathFigure组成。PathFigure 就是一系列封闭或不封闭的线段或弧线组成。ArcSegment 代表一个弧线,将其加入到PathFigure,再将PathFigure加入到Geometry ,这样就可以根据DrawGeometry画出弧线了。函数有注释,非常容易理解。
ArcSegment 还有一个参数就是圆的半径。其实根据两点、’凸度就可推导出半径,不知道为什么ArcSegment 不替我们计算出来。下面讲一下如何计算半径。
3 根据凸度计算半径
青岛软件培训
可能你正在寻找一家靠谱的IT培训机构,
渴望突破职业瓶颈,
找一份得体的工作。
恰巧万码学堂正在寻找像你这样不甘平凡的追光者!
我们拒绝纸上谈兵,直接参与真实开发流程!
现在行动,未来可期
立即拨打0532-85025005,预约免费职业规划咨询
前20名咨询者赠送《2025高薪技术岗位白皮书》!
你不是在报名课程,而是在投资五年后的自己!

