games101 作业4提高部分
games101 作业4提高部分
作业四中,我们按照实验步骤完成bazier曲线之后,得到的结果有一定的锯齿感:

然后pdf中给出的思路是:
对于一个曲线上的点,不只把它对应于一个像素,你需要根据到像素中心的距离来考虑与它相邻的像素的颜色。
思路是用一个点的9邻域到point的距离来对邻域像素的颜色进行一定的设置,当然就是越远越淡。

这个距离最大是 \(3\sqrt2 \over 2\),最小是\(0\),(最大是落在中心像素某一个顶点上,最小是落在中心像素中点。)因此我们可以考虑使用归一化:
\]
代码为:
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
for (float t = 0.0f; t <= 1.0f; t += 0.001f) {
auto point = recursive_bezier(control_points, t);
auto centerPoint = cv::Point2f(int(point.x) + 0.5f, int(point.y) + 0.5f);
auto x = point.x, y = point.y, centerX = centerPoint.x, centerY = centerPoint.y;
for (int i = -1; i <= 1; i++)
for (int j = -1; j <= 1; j++) {
float distance = std::sqrt(std::pow(x - (centerX - i), 2) + std::pow(y - (centerY - j), 2));
float normal_distance = distance * std::sqrt(2) / 3;
float color = 255.0f * (1 - normal_distance);
if (window.at<cv::Vec3b>(centerY - j, centerX - i)[1] < color)
window.at<cv::Vec3b>(centerY - j, centerX - i)[1] = color;
}
}
}

games101 作业4提高部分的更多相关文章
- GAMES101作业2
作业任务: 填写并调用函数 rasterize_triangle(const Triangle& t). 即实现光栅化 该函数的内部工作流程如下: 创建三角形的 2 维 bounding bo ...
- 网络1711班 C语言第四次作业批改总结
网络1711班 C语言第四次作业批改总结 助教有话说(写在前面) 近来,有同学跟老师和助教们反映:博客作业太多太麻烦,而且对编程能力提高似乎没什么帮助?在这里我要谈一谈我的感想. 博客作业的意义? 首 ...
- C语言--第六周作业评分和总结(5班)
作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1250 一.评分要求 要求1 完成PTA第六周所有题,若存在抄袭现象,倒扣此题 ...
- 安卓智能POS开单神器-成为零售批发商亲睐的生意帮手-pda销售扫描开单 现场结算打印凭据
pda销售开单主要有盘点.出库.入库.销售等操作. 主要功能: 出库作业(销售开单.销售退货.销售赠品).入库作业(进货开单.进货退货.进货赠品).盘点作业(能盘盈盘亏)等操作,带蓝牙打印功能 3.仓 ...
- 安卓微POS-PDA手持终端,支持离线在线联网销售开单;移动开单 盘点 功能
采购单.采购退货单 销售单.销售退货单.收款.优惠.赠品等操作实现盘点作业(多台设备同时作业,相同商品,数量累计) 现场打印票据 实现采购订单.采购单.采购退货单.销售订单.销售单.销售退货单验货没 ...
- 【译】Yarn上常驻Spark-Streaming程序调优
作者从容错.性能等方面优化了长时间运行在yarn上的spark-Streaming作业 对于长时间运行的Spark Streaming作业,一旦提交到YARN群集便需要永久运行,直到有意停止.任何中断 ...
- 四则运算C语言程序
#include<stdio.h> #include<Windows.h> #include<time.h> void main() { int a, b, c, ...
- Yarn上常驻Spark-Streaming程序调优
对于长时间运行的Spark Streaming作业,一旦提交到YARN群集便需要永久运行,直到有意停止.任何中断都会引起严重的处理延迟,并可能导致数据丢失或重复.YARN和Apache Spark都不 ...
- MES助力日立电梯提升精细化管理水平
项目背景介绍 日立电梯在2008年到2012年期间分别在五地工厂(上海.广州.天津.成都.扶梯)上线了ERP系统,在后续的使用时间里,逐渐发现现有ERP系统对于生产现场管理,产品质量追溯,产能控制等方 ...
- Uber基于Apache Hudi构建PB级数据湖实践
1. 引言 从确保准确预计到达时间到预测最佳交通路线,在Uber平台上提供安全.无缝的运输和交付体验需要可靠.高性能的大规模数据存储和分析.2016年,Uber开发了增量处理框架Apache Hudi ...
随机推荐
- Exadata X6支持的最新image和19c数据库版本?
如题,有客户咨询这个问题:Exadata X6支持的最新image和19c数据库版本? 直观感觉,看到X6这个型号就觉得是很老的机器了,毕竟现在最新都X10M了. 首先,去查MOS文档: Exadat ...
- preparation
课程知识准备 HTML5基础教程 CSS3基础教程 JavaScript基础教程 HTML DOM基础教程 VUE3基础教程 Element Plus OpenLayers vue3-openlaye ...
- 探索Python @dataclass的内部原理
之前写过一篇介绍Python中dataclass的文章:<掌握python的dataclass,让你的代码更简洁优雅>. 那篇侧重于介绍dataclass的使用,今天想探索一下这个有趣的特 ...
- Java 中toString方法在枚举中的应用:展示枚举字段信息
在Java编程中,枚举(enum)是一种特殊的数据类型,它允许程序员定义一组固定的常量.枚举类型在Java中非常有用,尤其是在需要表示一组固定选项(如星期.月份.方向等)时.尽管枚举类型在定义时看起来 ...
- Appium Android自动化测试配置
1. 首先需要在Android 手机上安装3个apk文件 https://github.com/appium/appium-uiautomator2-server/releases (2个apk文件) ...
- Centos8 BAD错误
signature hdr data: BAD, no. of bytes(127884) out of range error: /var/cache/dnf/os-86dc4ac5eda5a39e ...
- WPF刮刮乐
WPF刮刮乐 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/wi ...
- Docker npm install:npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY 。。reason: unable to get local issuer certificate 解决办法
这个是需要证书导致无法连接,临时解决办法是设置 npm set strict-ssl=false 在 Dockerfile文件里的 RUN npm install 之前添加 RUN npm set ...
- mina保持android端\服务端的长连接-copy
一.mina简介 Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架.与Netty出自同一人之手,都是一个介于应用程序与网络之间的NIO框架,通过Java nio技术基于T ...
- 接口(interface):实例化时要覆盖所有抽象方法,否则仍为抽象类
概述 /* * 接口的使用 * 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能定义全局 ...