实验10 Bezier曲线生成-实验提高-控制点生成B样条曲线

发布时间:2026/10/23 5:30:45

实验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/10/22 15:47:48

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

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

2026/10/23 0:01:26

html之flex伸缩盒子;grid布局

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

2026/10/23 5:29:00

Linux进程间关系与守护进程:从会话隔离到systemd部署实践

【Linux网络】进程间关系与守护进程提到 Linux 网络运维和后台服务开发&#xff0c;进程间关系与守护进程是一道绕不过去的坎。很多朋友在写网络服务时&#xff0c;明明程序跑得好好的&#xff0c;一关终端服务就断&#xff0c;或者启动了一堆“僵尸”进程挂在后台无人认养&…

2026/10/23 5:29:00

Kali Linux 单引导安装与 LVM 全盘加密实战避坑指南

简介&#xff1a;这份PDF面向准备入门网络安全与渗透测试的学习者&#xff0c;以及需要在虚拟机或裸机上部署Kali Linux的运维与安全从业者&#xff0c;帮助解决从镜像准备到系统安装完成的完整流程问题。资源包共1个PDF文件&#xff0c;大小约2.07MB&#xff0c;内容以图文步骤…

2026/10/23 5:29:00

SpringBoot+Vue+MySQL选课系统:从零到部署的完整实战拆解

选课系统这名字&#xff0c;在高校里几乎是每个学生都绕不开的东西&#xff0c;同时也是无数计算机专业同学的大作业和毕业设计首选。我自己也帮别人调试过不少这类项目&#xff0c;说实话&#xff0c;市面上的选课系统源码鱼龙混杂&#xff0c;能“拿到手就直接跑起来”的还真…

2026/10/23 5:29:00

Windows下Redis后台启动:注册服务与配置文件实战指南

1. 为什么必须解决“后台启动”这件事几个月前我在本地调一个微服务 demo 时&#xff0c;养成一个特别别扭的习惯&#xff1a;先把 Redis 窗口打开&#xff0c;再去启动后端&#xff0c;调试完还要记得把窗口关掉。有一次 Windows 自动更新重启机器&#xff0c;我顺手把所有黑色…

2026/10/23 5:23:59

制造业AI落地实战:三大场景、代码与案例全解析

刚过去的这一年&#xff0c;制造业里的AI声音比往年大了不少。但说实话&#xff0c;很多工厂试了AI之后又悄悄退回老路&#xff0c;原因不外乎三个&#xff1a;场景选得太虚、数据根本喂不动模型、算法做出来但车间不认账。我手里也做过几个制造方向的AI落地项目&#xff0c;从…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介&#xff1a;这份PDF报告聚焦2025年金融服务业中国AI现状与趋势&#xff0c;面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者&#xff0c;帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件&#xff0c;大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话&#xff0c;这几年接触了不少想入门FPGA的朋友&#xff0c;如果你问哪个项目能一口气把Verilog的核心基本功串起来&#xff0c;我通常会推荐电子密码锁。这个项目看着不起眼&#xff0c;却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点&#xff0c;手机震了。第一反应是“数据服务挂了”。打开电脑看了下&#xff0c;果然&#xff0c;某张核心报表的数据产出时间已经超过SLA两小时&#xff0c;下游三个业务方连着发来问询。这种场景&#xff0c;做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后&#xff0c;任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组&#xff0c;这次把FreeRTOS任务通知&#xff08;Task Notification&#xff09;单独拎出来讲透。原因很简单&#xff1a;任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑