博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bezier贝塞尔曲线的原理、二次贝塞尔曲线的实现
阅读量:4873 次
发布时间:2019-06-11

本文共 2196 字,大约阅读时间需要 7 分钟。

Bezier曲线的原理

Bezier曲线是应用于二维图形的曲线。曲线由顶点和控制点组成,通过改变控制点坐标可以改变曲线的形状。

 

一次Bezier曲线公式:

一次Bezier曲线是由P0至P1的连续点,描述的一条线段

 

二次Bezier曲线公式:

二次Bezier曲线是 P0至P1 的连续点Q0和P1至P2 的连续点Q1 组成的线段上的连续点B(t),描述一条抛物线。

 

三次Bezier曲线公式:

 

二次Bezier曲线的实现

#include 
class CBezierCurve{public: CBezierCurve(); ~CBezierCurve(); void SetCtrlPoint(POINT& stPt); bool CreateCurve(); void Draw(CDC* pDC); private: // 主要算法,计算曲线各个点坐标 void CalCurvePoint(float t, POINT& stPt);private: // 顶点和控制点数组 std::vector
m_vecCtrlPt; // 曲线上各点坐标数组 std::vector
m_vecCurvePt; };

 

#include 
#include "BezierCurve.h" CBezierCurve::CBezierCurve() { } CBezierCurve::~CBezierCurve() { } void CBezierCurve::SetCtrlPoint(POINT& stPt) { m_vecCtrlPt.push_back(stPt); } void CBezierCurve::CreateCurve() { // 确保是二次曲线,2个顶点一个控制点 assert(m_vecCtrlPt.size() == 3); // t的增量, 可以通过setp大小确定需要保存的曲线上点的个数 float step = 0.01; for (float t = 0.0; t <= 1.0; t += step) { POINT stPt; CalCurvePoint(t, stPt); m_vecCurvePt.push_back(stPt); } } void CBezierCurve::Draw(CDC* pDC) { // 画出曲线上个点,若不连续可以用直线连接各点 int nCount = m_vecCurvePt.size(); for (int i = 0; i < nCount; ++i) { pDC->SetPixel(m_vecCurvePt[i], 0x000000); } } void CBezierCurve::CalCurvePoint(float t, POINT& stPt) { // 确保是二次曲线,2个顶点一个控制点 assert(m_vecCtrlPt.size() == 3); // 计算曲线点坐标,此为2次算法,改变此处可以实现多次曲线 float x = (float)m_vecCtrlPt[0].x * pow(1 - t, 2) + (float)m_vecCtrlPt[1].x * t * (1 - t) * 2 + (float)m_vecCtrlPt[2].x * pow(t, 2); float y = (float)m_vecCtrlPt[0].y * pow(1 - t, 2) + (float)m_vecCtrlPt[1].y * t * (1 - t) * 2 + (float)m_vecCtrlPt[2].y * pow(t, 2); stPt.x =x; stPt.y= y; }

 

转载于:https://www.cnblogs.com/hyb1/p/3875468.html

你可能感兴趣的文章
P2024 [NOI2001]食物链(种类并查集)
查看>>
记忆化搜索
查看>>
Centos7配置SVN服务端
查看>>
耗电—Android
查看>>
Ubuntu/Linux网络配置常用命令
查看>>
css3实现钟表效果
查看>>
using SSIS script task to send email result
查看>>
python多线程批量下载远程图片
查看>>
OFS环境,删除Resource 时出现错误失败,应该如何继续
查看>>
window7下Word 2007报“Microsoft office word已停止工作“
查看>>
UML关系(泛化,实现,依赖,关联(聚合,组合))
查看>>
我收集的一些目标检测、跟踪、识别标准测试视频集和图像数据库
查看>>
asp.net后台导出excel的方法:使用System.Web.HttpContext.Current.Response导出excel
查看>>
java timer 使用:
查看>>
UITableView分隔线
查看>>
POJ_2479与POJ_2593 Maximum Sum
查看>>
cogs 2123. [HZOI 2015] Glass Beads
查看>>
HDU-1226 超级密码
查看>>
Java常用正则表达式
查看>>
Lazyr.js – 延迟加载图片(Lazy Loading)
查看>>