GAMES101-Homework4

在这里插入图片描述
原理:就是上张图片

//该段代码表示四个点的情况,相当于举例子去计算上诉的公式
void naive_bezier(const std::vector<cv::Point2f> &points, cv::Mat &window) 
{auto &p_0 = points[0];auto &p_1 = points[1];auto &p_2 = points[2];auto &p_3 = points[3];for (double t = 0.0; t <= 1.0; t += 0.001) {auto point = std::pow(1 - t, 3) * p_0 + 3 * t * std::pow(1 - t, 2) * p_1 +3 * std::pow(t, 2) * (1 - t) * p_2 + std::pow(t, 3) * p_3;window.at<cv::Vec3b>(point.y, point.x)[2] = 255;}
}
int factorial(int n) //递归实现阶乘
{if (n == 0) return 1;return n * factorial(n - 1);
}
cv::Point2f recursive_bezier(const std::vector<cv::Point2f> &control_points, float t) 
{// TODO: Implement de Casteljau's algorithmint n = control_points.size() - 1; //n-1个控制点auto point = control_points[0]*std::pow(1-t,n); //初始化第一个点for (int i = 1; i <= n; ++i){point += control_points[i] * factorial(n) / (factorial(i) * factorial(n - i)) * std::pow(t, i) * std::pow(1 - t, n - i);        //   套上公式去计算}return point;
}
void bezier(const std::vector<cv::Point2f> &control_points, cv::Mat &window) 
{// TODO: Iterate through all t = 0 to t = 1 with small steps, and call de Casteljau's // recursive Bezier algorithm.for (double t = 0.0; t <= 1.0; t += 0.001){auto point = recursive_bezier(control_points, t);window.at<cv::Vec3b>(point.y, point.x)[1] = 255; //颜色改为绿色}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/284017.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 教程 - 03 函数篇

文章目录 函数定义函数案例作用域函数传参函数返回值函数返回数组 函数定义 函数是将一部分代码进行封装&#xff0c;便于重用、维护&#xff0c;使得代码更加的整洁。 定义函数格式 类型 函数名&#xff08;形参类型 形参名称&#xff0c;…&#xff09;{ 函数体&#xff1b;…

劲松中西医结合医院主任谭巍谈生殖感染对夫妻的四大影响

生殖感染对健康的影响很大&#xff0c;夫妻若有一方发生生殖感染问题&#xff0c;那么极有可能将这种健康问题感染给另一方。所以生殖感染对夫妻双方都可能产生不良影响。 提到生殖感染对夫妻关系的影响&#xff0c;劲松中西医结合医院主任谭巍认为生殖感染不仅会对患者的身体…

javaWebssh课堂点名管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh课堂点名管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

低代码工作流,在业务场景下启动流程节点绑定的具体步骤与注意事项

在业务管理的场景下&#xff0c;存在先做了对应的数据管理&#xff0c;后续增加管理的规范度&#xff0c;“在业务数据变化时发起流程”的需求&#xff0c;那么这种情况下就需要在业务管理&#xff08;列表页、表单&#xff09;中发起流程&#xff0c;让业务模型使用流程配置&a…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…

Windows如何安装使用TortoiseSVN客户端并实现公网访问本地SVN Server

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

备忘录可以设置闹钟提醒吗怎么设置

虽然很多人都有使用备忘录的习惯&#xff0c;将待办事项一一记录下来&#xff0c;但单纯的记录并不足以保证我们不会忘记。尤其是那些不经常查看备忘录的人&#xff0c;可能会错过一些重要的信息。这就是为什么备忘录需要带闹钟提醒功能的原因。 带闹钟提醒的备忘录就像是一个…

CRM如何帮助中小微企业优化销售、营销和客服

CRM系统的一大价值就是分析。CRM系统沉淀着大量数据。将这些数据呈现出来&#xff0c;并进行数据挖掘和辅助决策&#xff0c;是判断CRM系统是否具有商业智能的分水岭。下面我们就来聊聊&#xff0c;CRM如何帮助中小微企业进行统计分析。 CRM包括客户管理、线索管理、商机管理、…

python 实现 AIGC 大模型中的概率论:生日问题的公式推导

在前两节中&#xff0c;我们推导了生日问题的求解算法&#xff0c;但在数学上的最终目标就是希望能针对问题推导出一个简洁漂亮的公式&#xff0c;就像爱因斯坦著名的质能方程 E MC^2 那样&#xff0c;毕竟数学是以符号逻辑来看待世界本质的语言&#xff0c;所以絮絮叨叨不是数…

codeforces D. Cyclic MEX

思路 手模发现把第一个 x x x 移到最末尾时&#xff0c;进入队列吐出大于等于 x x x 的&#xff0c;保留小于 x x x 的。模拟此过程。如果队列里存 n n n 个数的话&#xff0c;那么时间复杂度达到 n 2 n^2 n2 不可取。所以队列存储 ( x , f x ) (x,\;f_x) (x,fx​) 大小及…

✺ch4——管理3D图形数据

目录 缓冲区和顶点属性统一变量顶点属性插值应用变换矩阵一个3D立方体示例渲染一个对象的多个副本——实例化在同一场景中渲染多个不同模型矩阵栈应对“Z冲突”伪影图元的其他选项性能优先的编程方法 使用 OpenGL 渲染 3D 图形通常需要将若干数据集发送给 OpenGL 着色器管线。举…