贝赛尔曲线的拆分算法

本文介绍了贝赛尔曲线的拆分算法,用于将其转换为多边形,适用于贝赛尔曲线的选中判断和旋转效果展示。文中详细阐述了算法的主要函数PolyBezierToPolys的工作原理,并提供了拆分过程中的关键函数如BezierToPoly和InciseBezier的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贝赛尔曲线的拆分是指将贝赛尔曲线分解成逼近的多边形。可以用来判断贝赛尔曲线的选中,以及显示贝赛尔曲线的旋转效果等。

贝赛尔曲线简单介绍:

贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度。所以本函数的顶点数组的记录方式是:控制点+顶点+控制点+控制点+顶点+控制点+……。所以两个顶点之间的曲线是由两个顶点以及两个顶点之间的控制点来决定的。

===主函数PolyBezierToPolys===

【主要类型申明】

 typedef CArray<CPoint,CPoint> CPtArray;//点动态数组类型

【参数说明】

       bezierPts[in]---贝赛尔曲线顶点和控制点数组

       bClose[in]------是否封闭的贝赛尔曲线

polyPt[out]-----拆分后的多边形点数组

precision[in]---拆分精度

bool PolyBezierToPolys(CPtArray &bezierPts,

                     bool bClose,CPtArray &polyPt,int precision)

{

       polyPt.RemoveAll();

       CPtArray apt;

       int i,count = bezierPts.GetSize();

//1开始,是因为第一个是控制点,如果曲线不封闭,那么第一个控制点是没有用的。

//每一段贝赛尔曲线由相邻的两个顶点和之间的两个控制点决定,所以频率为3(后一个顶点在下一组中还要使用)

       for(i=1;i<count-2;i+=3){     

       BezierToPoly(&bezierPts[i],apt,precision); //拆分每一段

polyPt.Append(apt);//拆分完成,加入数组

       }

       //如果是封闭曲线,那么需要将最后一个顶点和第一个顶点以及最后一个控制点以及第一个控制点组成一组进行拆分

       if(bClose){

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐鹦鹉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值