发布时间:2026/9/6 23:31:29
实验10 Bezier曲线生成-实验提高-控制点生成B样条曲线 本代码根据已知控制点( 10, 5, 0 ),( 5, 10, 0 ),( -5, 15, 0 ),( -10, -5, 0 ),( 4, -4, 0 ),( 10, 5, 0 ), ( 5, 10, 0 ), ( -5, 15, 0 ), ( -10, -5, 0 )( 10, 5, 0 )来生成三次B样条曲线。#includeGL/glut.h#includestdio.h#includestdlib.h#includevectorusingnamespacestd;structPoint{floatc[2];floatxc[0];floatyc[1];Point(){x0,y0;}Point(floatx0,floaty0){xx0,yy0;}Point(constPointpt){xpt.x,ypt.y;}floatoperator[](constinti){returnc[i];}};vectorPointGctrlPt,GbsCurvePt;intGnumSegment10;voidCalcBSPoints(){intnumCtrPtGctrlPt.size();floatF0[2],F1[2],F2[2],F3[2];floatt0;floatdt1/(float)GnumSegment;//第一段NumSubSegment 1个点第二段之后每段为NumSubSegment个点,因为第二段之后的起点为前一段的终点intnumCurvePoint(GnumSegment1)GnumSegment*(numCtrPt-4);GbsCurvePt.resize(numCurvePoint);//第一段起点编号为0第二段之后的为1原因见上for(inti0;i(numCtrPt-3);i){for(intj0;j2;j){F0[j](GctrlPt[i][j]4*GctrlPt[1i][j]GctrlPt[2i][j])/6.0f;F1[j](-3*GctrlPt[i][j]3*GctrlPt[2i][j])/6.0f;F2[j](3*GctrlPt[i][j]-6*GctrlPt[1i][j]3*GctrlPt[2i][j])/6.0f;F3[j](-GctrlPt[i][j]3*GctrlPt[1i][j]-3*GctrlPt[2i][j]GctrlPt[3i][j])/6.0f;}t(i0)?0:dt;//第一段起点参数为0第二段之后的为dt原因同上for(intj(i0)?0:1;jGnumSegment1;j){for(intk0;k2;k){GbsCurvePt[jGnumSegment*i][k]F0[k]F1[k]*tF2[k]*t*tF3[k]*t*t*t;}tdt;}}}voidControlPoint(constvectorPointvpt){glPointSize(3);glBegin(GL_POINTS);for(unsignedinti0;ivpt.size();i){glVertex2f(vpt[i].x,vpt[i].y);}glEnd();}voidPolylineGL(constvectorPointvpt){glBegin(GL_LINE_STRIP);for(unsignedinti0;ivpt.size();i){glVertex2f(vpt[i].x,vpt[i].y);}glEnd();}voidmyDisplay(){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);ControlPoint(GctrlPt);glColor3f(0.0f,1.0f,0.0f);PolylineGL(GctrlPt);if(GctrlPt.size()4){glColor3f(1.0f,1.0f,1.0f);CalcBSPoints();PolylineGL(GbsCurvePt);}glFlush();}voidInit(){glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_SMOOTH);floatpoints[9][3]{{10,5,0},{5,10,0},{-5,15,0},{-10,-5,0},{4,-4,0},{10,5,0},{5,10,0},{-5,15,0},{-10,-5,0}};Point pt;for(inti0;i9;i){Point ptPoint(points[i][0],points[i][1]);GctrlPt.push_back(pt);}}voidmyReshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-30.0,30.0,-30.0*(GLfloat)h/(GLfloat)w,30.0*(GLfloat)h/(GLfloat)w,0.0,100.0);}intmain(intargc,char*argv[]){glutInit(argc,argv);glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);glutInitWindowPosition(100,100);glutInitWindowSize(640,480);glutCreateWindow(B-Spline Curve);Init();glutDisplayFunc(myDisplay);glutReshapeFunc(myReshape);glutMainLoop();return0;}

相关新闻

2026/9/6 23:30:56

半导体/高端制造 设计EDA首席科学家 18维度权威简历范本

1. 底层理论与专业储备 深耕半导体先进工艺物理、计算微电子学、EDA底层数学建模、工业软件基础理论领域15年+,具备基础理论原创+前沿科学研究+工程产业化落地+产业战略顶层设计四维首席科学家理论体系。深耕3nm/2nm及以下GAA、CFET全新先进工艺物理机理、量子效应调控、工艺…

2026/9/6 0:01:22

html之flex伸缩盒子;grid布局

flex伸缩盒子 利用flex伸缩盒子可以把父级下的div的换行去掉,排列在一行中 demo来自微信小程序 先将父级div定义成伸缩盒子,然后子级每份占据1份父类空间flex简述 flex中三个属性&#xff1b;在后端看来这是flex构造方法的3个入参 flex: <flex-grow> <flex-shrink>…

2026/9/6 23:28:33

ADAS开发与测试全流程详解:从架构设计到HIL验证

简介&#xff1a;面向汽车电子与智能驾驶领域工程师的ADAS开发及测试专题文档&#xff0c;系统介绍先进驾驶辅助系统的组成模块、开发流程、实时性挑战&#xff0c;并重点剖析Elektrobit公司推出的模块化开发平台EB Assist ADTF。资料压缩包共含1个PDF文件&#xff0c;大小约89…

2026/9/6 23:28:33

ADAS开发与测试全流程解析:从传感器融合到量产落地

简介&#xff1a;《ADAS开发及测试方案》是一份面向ADAS软件开发与测试人员的专题PDF&#xff0c;系统梳理了ADAS典型功能&#xff08;ACC、FCW、LDW、BSD等&#xff09;、开发流程中的实时数据处理挑战&#xff0c;以及EB Assist ADTF工具平台在算法开发、HIL测试与实车验证中…

2026/9/6 23:28:33

GUM补充件2:多输出量不确定度评定的蒙特卡洛方法解析

简介&#xff1a;ISO IEC GUIDE 98-3 Suppl.2 2011 不确定度测量 第3部分 GUM 是针对测量不确定度评估与表达的权威国际指南&#xff0c;面向科研人员、工程测试、质量控制及计量检测从业者&#xff0c;用于规范测量结果不确定度的评定、合成与报告&#xff0c;解决测量数据可比…

2026/9/6 23:28:33

GUM补充文件2:多输出量测量不确定度评估与蒙特卡洛实操

简介&#xff1a;这是一份ISO/IEC GUIDE 98-3 Suppl.2:2011《测量不确定度表示指南&#xff08;GUM&#xff09;》英文原版PDF资料&#xff0c;面向科研人员、检测校准实验室技术人员及工程领域质量管理人员&#xff0c;用于系统掌握测量不确定度的评估原理与规范表达流程。资源…

2026/9/6 23:23:33

CSDN技术博客运营全攻略:从Markdown排版到SEO优化实战

之前在 GitHub、语雀、公众号上零零散散写了不少技术笔记&#xff0c;最近整理旧文档时才发现&#xff0c;CSDN 这个账号竟然一直处于“注册过、没更新”的状态。正好趁这次机会&#xff0c;把过去这一年多积累的实战经验和踩坑记录系统地搬过来。本文就从零开始梳理一套适用于…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/6 19:33:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…