当前位置: 首页 > ai >正文

Games101作业四

作业0到作业3的代码

        这次是实现 de Casteljau 算法,以及绘制 Bezier 曲线,比上次简单

        核心思想就是递归,原理忘了就去看第十一节课,从15:00开始的        

GAMES101-现代计算机图形学入门-闫令琪

 代码

先实现贝塞尔曲线

cv::Point2f recursive_bezier(const std::vector<cv::Point2f> &control_points, float t) 
{// 基线条件:当只剩一个控制点时,返回该点if(control_points.size() == 1) return control_points[0];// 创建下一级递归的控制点集合std::vector<cv::Point2f> next_control_points = {};// 对每对相邻控制点进行线性插值for(int i = 0; i < control_points.size() - 1; ++i) {auto &a = control_points[i];       // 当前控制点auto &b = control_points[i + 1];   // 下一个控制点// 线性插值:a + t*(b - a) = (1-t)*a + t*bauto p = a + t * (b - a);// 将插值结果加入下一级控制点集合next_control_points.emplace_back(p);}// 递归调用,处理下一级控制点return recursive_bezier(next_control_points, t);
}

 绘制 Bezier 曲线

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.// 遍历 t 从 0.0 到 1.0,每次增加 0.001for (double t = 0.0; t <= 1.0; t += 0.001) {// 调用递归贝塞尔算法计算当前 t 对应的曲线点cv::Point2f point = recursive_bezier(control_points, t);// 在图像窗口的 (point.y, point.x) 位置设置绿色通道为255// OpenCV 中 Mat 的 at 方法是 (row, col) 即 (y, x)window.at<cv::Vec3b>(point.y, point.x)[1] = 255;}
}

效果

随便在窗口上点四个点生成相应贝塞尔曲线

http://www.xdnf.cn/news/5762.html

相关文章:

  • 在Ubuntu服务器上部署Label Studio
  • 从SAM看交互式分割与可提示分割的区别与联系:Interactive Segmentation Promptable Segmentation
  • Java基础(IO)
  • Android Native 之 自定义进程
  • 【氮化镓】电子辐照下温度对GaN位移阈能的影响
  • 开源网络地图可视化第五章学习指南
  • 【认知思维】光环效应:第一印象的持久力量
  • MySQL 8.0 OCP 1Z0-908 题目解析(2)
  • SpringBoot整合MQTT实战:基于EMQX实现双向设备通信(附源码)
  • QEMU模拟32位ARM实现自定义系统调用
  • 基于STM32、HAL库的PCM3060PWR 音频接口芯片驱动程序设计
  • 深度学习计算
  • GOOSE 协议中MAC配置
  • wpf DataGrid 行选择 命令绑定
  • polarctf-web-[简单rce]
  • Linux学习心得问题整理(一)
  • UDP--DDR--SFP,FPGA实现之指令监测模块实现
  • 鸿蒙北向应用开发: deveco5.0 创建开源鸿蒙项目
  • django扩展练习记录
  • 一文详解Spring Boot如何配置日志
  • 第一章 应急响应-webshell查杀
  • 【免杀】C2免杀技术(一)VS设置
  • 逆向破解:x64dbg
  • 操作系统实战——QEMU模拟器搭建【rCore 操作系统】
  • 多线程访问Servlet如何谨慎处理共享资源
  • 5.10-套接字通信 - C++
  • Spring急速入门
  • Linux系统管理与编程18:自动化部署dhcp服务
  • QML状态机制示例(State)
  • 数据知识产权质押融资风险控制