问题描述
圆弧的起点、终点、圆心坐标已知(平面任意分布),现在想画出圆弧(可能是劣弧,可能是优弧),这里也涉及到顺时针、逆时针问题,stareanglesweepangle都是变动的,怎么分情况呢,谢谢。你们的点滴帮助,我都会万分感谢。
解决方案
解决方案二:
好像很简单啊,drawarc不就可以用吗?起始角度和扫描波束都可以设置,逆时针顺时针无非是角度转换的问题,如果要控制画线的速度,用定时器~
解决方案三:
我上周写过给三个点,用gdiplus绘制弧线的程序,c++代码,x1x2x3是三点坐标,算出圆心半径,xy是圆心坐标这是我自己写的算法,判断弧线划过部分,可能有更好办法dStartAngledSweepAnglestartAngle=atan2((y1-y),(x1-x))*180/pi;//点到圆心与X轴正方向夹角middleAngle=atan2((y2-y),(x2-x))*180/pi;//中间点endAngle=atan2((y3-y),(x3-x))*180/pi;//结束点stuArcData.dStartAngle=startAngle;//弧线开始角度/*弧线划过角度*/if(startAngle<middleAngle&&middleAngle<endAngle)//判断三点角度确定弧线划过角度{stuArcData.dSweepAngle=endAngle-startAngle;}elseif(startAngle<endAngle&&endAngle<middleAngle){stuArcData.dSweepAngle=(360+(startAngle-endAngle))*-1;}elseif(middleAngle<startAngle&&startAngle<endAngle){stuArcData.dSweepAngle=(360+(startAngle-endAngle))*-1;}elseif(middleAngle<endAngle&&endAngle<startAngle){stuArcData.dSweepAngle=360-(startAngle-endAngle);}elseif(endAngle<startAngle&&startAngle<middleAngle){stuArcData.dSweepAngle=360-(startAngle-endAngle);}elseif(endAngle<middleAngle&&middleAngle<startAngle){stuArcData.dSweepAngle=(startAngle-endAngle)*-1;}