图形学笔记 - 5. 光线追踪 - RayTracing
Whitted-Style Ray tracing
为什么要光线追踪
-
光栅化不能很好地处理全局效果
- 软阴影
- 尤其是当光线反射不止一次的时候
-
栅格化速度很快,但质量相对较低
-
光线追踪是准确的,但速度很慢
- 光栅化:实时,光线追踪:离线
- ~10K CPU核心小时来渲染一帧
基本光线追踪算法
光线
关于光线的三个观点:
- 光沿直线传播(虽然这是错误的)
- 光线交叉时不会相互“碰撞” (尽管这仍然是错误的)
- 光线从光源传播到眼睛(但物理在路径反转-互易下是不变的)。
“And if you gaze long into an abyss, the abyss also gazes into you.” — Friedrich Wilhelm Nietzsche (translated)
视觉发射理论
光线追踪
Appel 1968 -光线追踪
- 通过每个像素投射一条光线来生成图像
- 通过向光源发送光线来检查阴影
产生眼睛射线
针孔相机模型
阴影像素(仅限局部)
从观察点往成像平面的每个像素位置投射光线,再从投射光线与场景物体的交点向光源位置投射光线判断交点是否在阴影里。
递归(Whitted-Style)光线追踪
“An improved Illumination model for shaded display” T. Whitted, CACM 1980
Time:
- VAX 11/780 (1979) 74m
- PC (2006) 6s
- GPU (2012) 1/30s
一个递归的Ray Casting 方法,在Ray Casting假设的基础上考虑光线进一步的反射与折射。在每一个交点出都考虑光源的阴影着色,最后将这些点的着色累加作为该像素位置的成像结果。
光线-表面交点
光线方程
光线由它的原点和方向向量定义
r ( t ) = o + t d , t ≥ 0 r(t)=o+td,t\ge0 r(t)=o+td,t≥0
射线与球面相交
光线: r ( t ) = o + t d , t ≥ 0 \mathbf{r}(t)=\mathbf{o}+t\mathbf{d},t\ge0 r(t)=o+td,t≥0
球: p : ( p − c ) 2 − R 2 = 0 \mathbf{p}:(\mathbf{p}-\mathbf{c})^2-R^2=0 p:(p−c)2−R2=0
什么是交点?
交点p必须同时满足射线方程和球方程
求交点:
( o + t d − c ) 2 − R 2 = 0 (\mathbf{o}+t\mathbf{d}-\mathbf{c})^2-R^2=0 (o+td−c)2−R2=0
a t 2 + b t + c = 0 at^2+bt+c=0 at2+bt+c=0
a = d ⋅ d a=\mathbf{d}\cdot\mathbf{d} a=d⋅d
b = 2 ( o − c ) ⋅ d b=2(\mathbf{o}-\mathbf{c})\cdot \mathbf{d} b=2(o−c)⋅d
c = ( o − c ) ⋅ ( o − c ) − R 2 c=(\mathbf{o}-\mathbf{c})\cdot(\mathbf{o}-\mathbf{c})-R^2 c=(o−c)⋅(o−c)−R2
t = − b ± b 2 − 4 a c 2 a t = \frac{-b\pm \sqrt{b^2-4ac}}{2a} t=2a−b±b2−4ac
与隐式曲面的射线相交
一般隐式表面: p : f ( p ) = 0 \mathbf{p}:f(\mathbf{p})=0 p:f(p)=0
求解: f ( o + t d ) = 0 f(\mathbf{o}+t\mathbf{d})=0 f(o+td)=0
求解正实数
与三角形网格的光线相交
为什么?
- 渲染:可见性,阴影,照明
- 几何:内/外测试
如何计算?
让我们来分析一下: - 简单的想法:让射线与每个三角形相交
- 简单,但慢(加速?)
- 注:可以有0、1个交集(忽略多个路口)
三角形在平面上 - 光线平面交点
- 测试命中点是否在三角形内
许多优化方法…
平面方程
平面由法向量和平面上的一个点定义
平面方程(若p满足,则p在平面上):
p : ( p − p ′ ) ⋅ N = 0 \mathbf{p}:(\mathbf{p}-\mathbf{p'})\cdot \mathbf{N}=0 p:(p−p′)⋅N=0
a x + b y + c z + d = 0 ax+by+cz+d=0 ax+by+cz+d=0
带入射线求解:
( o + t d − p ′ ) ⋅ N = 0 (\mathbf{o}+t\mathbf{d}-\mathbf{p'})\cdot\mathbf{N}=0 (o+td−p′)⋅N=0
t = ( p ′ − o ) ⋅ N d ⋅ N t=\frac{(\mathbf{p}'-\mathbf{o})\cdot\mathbf{N}}{\mathbf{d}\cdot\mathbf{N}} t=d⋅N(p′−o)⋅N
检测 t ≥ 0 t\ge0 t≥0
Möller Trumbore算法
能不能一步到位?计算交点并判断是否在三角形内
O + t D = ( 1 − b 1 − b 2 ) P 0 + b 1 P 1 + b 2 P 2 \mathbf{O}+t\mathbf{D}=(1-b_1-b_2)\mathbf{P}_0 + b_1\mathbf{P}_1+b_2\mathbf{P}_2 O+tD=(1−b1−b2)P0+b1P1+b2P2
等式左边式射线,右边是三角形
三个未知数。
[ t b 1 b 2 ] = 1 S 1 ⋅ E 1 [ S 2 ⋅ E 2 S 1 ⋅ S S 2 ⋅ D ] \begin{bmatrix} t\\ b_1\\ b_2 \end{bmatrix}=\frac{1}{\mathbf{S_1}\cdot{}\mathbf{E_1}}\begin{bmatrix} \mathbf{S_2}\cdot\mathbf{E_2}\\ \mathbf{S_1}\cdot\mathbf{S}\\ \mathbf{S_2}\cdot\mathbf{D} \end{bmatrix} tb1b2 =S1⋅E11 S2⋅E2S1⋅SS2⋅D
其中
E 1 = P 1 − P 0 \mathbf{E_1}=\mathbf{P}_1-\mathbf{P}_0 E1=P1−P0
E 2 = P 2 − P 0 \mathbf{E_2}=\mathbf{P}_2-\mathbf{P}_0 E2=P2−P0
S = O − P 0 \mathbf{S}=\mathbf{O}-\mathbf{P}_0 S=O−P0
S 1 = D × E 2 \mathbf{S_1}=\mathbf{D}\times\mathbf{E}_2 S1=D×E2
S 2 = S × E 1 \mathbf{S_2}=\mathbf{S}\times\mathbf{E}_1 S2=S×E1
代价:1次除法,27次乘法,17次加法
光线表面求交加速
简单的光线-场景交集
- 详尽地测试与每个三角形的射线相交
- 找到最接近的命中点(即最小t)
问题: - 朴素算法=#像素 * # 三角形 * # 弹射数
- 非常慢
为了通用性,我们在后面使用术语“对象”而不是“三角形”(但不一定是指整个对象)。
Bounding Volumes 包围体积
避免交叉的快速方法:用简单的体积绑定复杂的对象
- 对象被完全包含在卷中
- 如果没有碰到体积,就不会碰到物体
- 所以先测试BVol,然后测试对象是否命中
光线与盒子的交点
理解:盒子是3对平板的交点
具体地:
我们经常使用Axis-Aligned Bounding Box(AABB)轴对⻬包围盒
任意一条边都沿着x, y或z轴
射线与轴对齐框的交点
二维例子;3D也是一样!计算与平板的交点并取 t m i n / t m a x t_{min}/t_{max} tmin/tmax间隔的交点
我们怎么知道什么时候射线与盒子相交
Key ideas:
- 光线只有在进入所有对平板时才能进入盒子
- 射线离开盒子的时间和离开任何一对平板的时间一样长
对于每一对,计算tmin和tmax(负数也可以)
对于3D框, t e n t e r t_{enter} tenter = max t m i n \max{t_{min}} maxtmin, t e x i t t_{exit} texit = min t m a x \min{t_{max}} mintmax
如果 t e n t e r < t e x i t t_{enter} < t_{exit} tenter<texit,我们知道射线在盒子里停留了一段时间(所以它们一定是相交的!)
然而,射线不是一条直线 - 应该检查t是否为负以保证物理正确性!
如果 t e x i t < 0 t_{exit}<0 texit<0 - 盒子在光线的“后面”——没有交集!
如果 t e x i t ≥ 0 t_{exit}\ge0 texit≥0且 t e n t e r < 0 t_{enter}<0 tenter<0 - 射线的原点在框内,有交点
总之,射线与AABB相交当且仅当: - t e n t e r < t e x i t 且 t e x i t ≥ 0 t_{enter}<t_{exit}且 t_{exit}\ge0 tenter<texit且texit≥0
为什么要轴对称?
点与面的交点:
t = ( p ′ − o ) ⋅ N d ⋅ N t=\frac{(\mathbf{p}'-\mathbf{o})\cdot\mathbf{N}}{\mathbf{d}\cdot\mathbf{N}} t=d⋅N(p′−o)⋅N
3个减法,6个乘法,1个除法
垂直于x轴的平面:
t = p x ′ − o x d x t=\frac{p_x'-o_x}{d_x} t=dxpx′−ox
一个减法一个除法
相关文章:
图形学笔记 - 5. 光线追踪 - RayTracing
Whitted-Style Ray tracing 为什么要光线追踪 光栅化不能很好地处理全局效果 软阴影尤其是当光线反射不止一次的时候 栅格化速度很快,但质量相对较低 光线追踪是准确的,但速度很慢 光栅化:实时,光线追踪:离线~10K …...
WHY - 为什么选择 Rsbuild
目录 一、介绍二、工具对比三、性能 https://rsbuild.dev/zh/guide/start/index 一、介绍 Rsbuild 是由 Rspack 驱动的高性能构建工具,它默认包含了一套精心设计的构建配置,提供开箱即用的开发体验,并能够充分发挥出 Rspack 的性能优势。 二…...
前端(模块化)
未使用模块化 定义两个js文件simple1.js和simple2.js let a11; let a11; 两个js文件变量重名 在html测试 传统引入js文件 <script src"./simple1.js"></script> <script src"./simple2.js"></script> 浏览器报错 使用模块…...
Elasticsearch:Mapping-映射
一、创建索引 自动生成索引字段数据类型即自动映射 创建之前,先删除索引防止重复创建 删除索引: DELETE product_mapping创建索引 product_mapping并且赋值 PUT /product_mapping/_doc/1 {"name": "xiaomi phone","desc": "s…...
掘金电影市场的新机遇:开发特惠电影票小程序api文档
随着电影市场的不断扩大,特惠电影票小程序成为创业者和企业争相布局的新蓝海。本文将带你深入了解特惠电影票小程序的开发要点,以及如何通过这个项目实现盈利。 项目背景及市场分析 电影市场规模的不断扩大为特惠电影票小程序提供了广阔的市场空间。 根…...
EFAK kafka可视化管理工具部署使用
简介:EFAK是开源的可视化和管理软件。它允许您查询、可视化、提醒和探索您的指标,无论它们存储在何处。简单来说,它为您提供了将 Kafka 集群数据转换为漂亮的图形和可视化效果的工具。 环境:①操作系统:CentOS7.6&…...
---mysql server: Ubuntu Linux下最最基本的操作
作为开发人员你不需要做复杂的mysql server的各种维护操作, 只是想在本机或虚拟机做个server,然后整测试性数据库. 下面我给出最最简单的基本操作: Ubuntu安装完mysql server, 并且后,可以做如下基本操作,就表示可以了 你可以在这个基…...
Ariba Procurement: Administration_Master data
采购主数据集成Procurement Master Data Integration 注意:并非所有元素都是必需的,数据元素的名称可能根据ERP的不同,有所不同。 Types of Master Data Accounting 在SAP Ariba中的各种会计元素字段中,填充有效值选择列表。建…...
Not using native diff for overlay2, this may cause degraded performance……
问题现象 案例:Anolis 8.9(4.19.91-26.an8.x86_64) Overlay2存储驱动程序) 当我们安装好Docker之后,通过systemctl status docker -l 会发现有一个告警信息:levelwarning msg"Not using native dif…...
【自然语言处理与大模型】使用llama.cpp将HF格式大模型转换为GGUF格式
llama.cpp的主要目标是在本地和云端的各种硬件上以最小的设置和最先进的性能实现LLM推理。是一个专为大型语言模型(LLM)设计的高性能推理框架,完全使用C和C编写,没有外部依赖,这使得它可以很容易地被移植到不同的操作系…...
item2 for macos
安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh,所以不用安装,10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…...
docker命令
目录 docker buildwgetdocker rundocker compose为什么docker compose比docker build 和run快很多? docker build docker build -t mineru:latestdocker build 命令是 Docker 的核心命令之一,用于从 Dockerfile 构建新的 Docker 镜像。 docker build&am…...
OrangePi Zero2 驱动开发
目录 一. 芯片手册 1. 资料下载地址 2. 阅读芯片手册 2.1 GPIO 寄存器的基地址是 (0x0300B000) 2.2 PC_CFG0 寄存器的偏移量(0x0048) 2.3 PC_CFG1 的偏移量(0x004C) 2.4 PC_CFG2 的偏移量(0x0050) 2.5 PC_DAT寄存器的偏移量(0x0058) 二. 驱动代码调试 2.1 …...
C/C++字符数组与字符串操作
C/C字符数组与字符串操作 录入 字符 scanf("%c",&字符变量); 字符变量 getchar(); #include <stdio.h> int main() {char ch;while ((ch getchar()) ! EOF) {putchar(ch);}return 0; }上述程序会在文件结尾后结束循环,在命令行中运行&#…...
动手学深度学习---线性神经网络
一、线性回归 解析解:模型的解可以用一个公式简单的表示,这类解叫做解析解。 超参数:可以调整但不在训练过程中更新的参数称为超参数。调参是选择超参数的过程。超参数通常是我们根据训练迭代结果来调整的。 在无法得到解析解的情况下…...
24计算机考研,东南大学和电子科技大学如何选择?
针对题主的情况,更推荐成电。成电上岸更为简单,就业前景也非常不错,性价比相当高。如果基础很扎实、更注重学校牌子、或是未来想在江浙沪发展的同学,东南大学是个很好的选择。下面就从学校综合实力、招录情况、考试难度来详细对比…...
Redis应用-在用户数据里的应用
1.社区电商的业务闭环 接下来介绍的社区电商是以Redis作为主体技术、以MySQL和RocketMQ作为辅助技术实现的。 (1)社区电商运作模式 社区电商的关键点在于社区,而电商则是辅助性质(次要地位,流量变现)。社区可以分成很多种社区,比如美食社区、美妆社区、影评社区、妈妈社区…...
STL容器-map P3613【深基15.例2】寄包柜 普及-
题目来源:洛谷题库 文章目录 map例题map知识点map使用注意:map的常用用法 map例题 P3613【深基15.例2】寄包柜 普及- 题意 根据数据插入/查询 思路 map键值对可以根据柜子编号查找物品,但是柜子又有很多个,考虑数组或者map数组…...
excel使用笔记
1.工作表1计算工作表2某列的和 假设我们有两个工作表,分别命名为“Sheet1”和“Sheet2”,我们想要求和这两个工作表中A1到A**单元格的数据,可以在任意一个工作表的单元格中输入以下公式: SUM(Sheet1!A1:A10, Sheet2!A1:A10) SUM…...
EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用
随着信息技术的快速发展,安防视频监控系统在公共安全领域的应用变得越来越广泛。传统的视频监控系统多依赖于中心服务器进行视频流的集中处理和分发,这不仅增加了网络带宽的负担,还可能成为系统性能瓶颈。为了解决这些问题,P2P&am…...
【MySQL中多表查询和函数】
目录 1.多表查询 1.1 外键 1.2 链接查询 2.MySQL函数 内置函数简介 数值函数 字符串函数 时间日期函数 条件判断操作 开窗函数 1.多表查询 本质:把多个表通过主外键关联关系链接(join)合并成一个大表,在去单表查询操作…...
Polars数据聚合与旋转实战教程
在这篇博文中,我们的目标是解决数据爱好者提出的一个常见问题:如何有效地从Polars DataFrame中创建汇总视图,以便在不同时间段或类别之间轻松进行比较。我们将使用一个实际的数据集示例来探索实现这一目标的各种方法。 Polars简介 Polars 是…...
SpringBoot【十三(准备篇)】集成在线接口文档Swagger2
一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 二、swagger介绍 我就不卖关子啦,相信在座的各位很多都已经用过,但是没关系,只要全世界还有一个没用过,我都会给他讲。 那…...
CKA认证 | Day6 K8s网络
第六章 Kubernetes网络 1、Service 控制器 在 Kubernetes (K8S) 中,Service 控制器 是一个关键组件,负责管理 Kubernetes 服务的生命周期和实现其功能。Service 控制器确保服务能够正确地将流量路由到后端 Pod,并处理服务的负载均衡和 DNS …...
基于Llamaindex的网页内容爬取实战
目的 本文不关注如何解析网页 html 元素和各种 python 爬虫技术,仅作为一种网页数据的预处理手段进行研究。Llamaindex 也并不是爬虫技术的集大成者,使用它是为了后续的存查一体化。 安装依赖 pip install llama-index-readers-web # pip install llam…...
springboot429校运会管理系统(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装校运会管理系统软件来发挥其高效地信息处理的作用ÿ…...
tcpdump编译
https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz tar -zxvf flex-2.6.4.tar.gz ./configure CFLAGS-D_GNU_SOURCE make sudo make installwget http://ftp.gnu.org/gnu/bison/bison-3.2.1.tar.gz ./configure make sudo make install以上两个库是…...
Vite快速构建Vue教程
步骤 1: 初始化项目目录 创建一个名为 projects 的文件夹,作为存放所有 Vite 项目的根目录。这个文件夹将容纳多个独立的 Vite 项目。 步骤 2: 创建 Vite 项目 右键点击 projects 文件夹并选择“在此处打开终端”或使用您偏好的代码编辑器(如 VSCode&…...
四、个人项目系统搭建
文章目录 一、python写的后端代码二、html代码三、index.css四、js代码 效果图: 一、python写的后端代码 后端代码使用Flask编写,如下所示: # app.py from flask import Flask, render_template, request, jsonify, g import sqlite3 import…...
长沙理工大学《2024年825自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《长沙理工大学825自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题...
Linux上安装Anaconda
查看版本 lsb_release -a uname -m x86_64:表示系统是64位。i686、i386:表示系统是32位。 到连接安装对应版本 连接到ldhttps://repo.anaconda.com/archive/ 配置对应的conda环境,export PATH/对应目录/anaconda3/bin:$PATH *注意为bi…...
HTTP常见的请求头有哪些?都有什么作用?在 Web 应用中使用这些请求头?
HTTP 请求头(Request Headers)用于在 HTTP 请求中携带额外的信息,帮助服务器更好地处理请求。以下是一些常见的 HTTP 请求头及其作用: 常见请求头及其作用 1. Accept 作用:告知服务器客户端可以接受的内容类型。示例…...
扩展tinyplay使其自适应不同声道数量的媒体
android原来的tinyplay代码,如果遇到播放媒体的升到数量与打开pcm的声道数量不匹配的情况,会没法继续播放。 本例扩展了tinyplay的代码,将不同声道的音频数据展开/压缩到pcm设备支持的数据,再写入pcm设备。 bplay.c #include &l…...
[Unity] AppLovin Max接入Native 广告 IOS篇
NativeIOS构建流程 (接入之前备份之前打包得Xcode工程) 下载资源 1.将以下文件放入Unity Assets->Plugins->IOS文件夹下 2.Unity更新max版本至12.4.1 UnityPlugin 6.4.3以上(很重要) 3.NativeSDKManager.CS根据以下附…...
跨平台开发技术的探索:从 JavaScript 到 Flutter
随着多平台支持和用户体验一致性在应用程序开发中变得越来越重要,开发者面临的挑战是如何在不同平台上保持代码的可维护性和高效性。本文将探讨如何利用现代技术栈,包括 Flutter、JavaScript、HTML5、WebAssembly、TypeScript 和 Svelte,在统一的平台上进行高效的跨平台开发…...
计算机网络技术基础:2.计算机网络的组成
计算机网络从逻辑上可以分为两个子网:资源子网和通信子网。 一、资源子网 资源子网主要负责全网的数据处理业务,为全网用户提供各种网络资源与网络服务。资源子网由主机、终端、各种软件资源与信息资源等组成。 1)主机 主机是资源子网的主要…...
PKCS#7、Bit padding(位填充)、Byte padding(字节填充)、Zero padding(零填充)
PKCS#7、Bit padding(位填充)、Byte padding(字节填充)、Zero padding(零填充)是密码学常见的填充方式。 Bit padding(位填充): 位填充可以应用于任意长度的消息。在消息…...
在 Kibana 中为 Vega Sankey 可视化添加过滤功能
作者:来自 Elastic Tim Bosman 及 Miloš Mandić 有兴趣在 Kibana 中为 Vega 可视化添加交互式过滤器吗?了解如何利用 “kibanaAddFilter” 函数轻松创建动态且响应迅速的 Sankey 可视化。 在这篇博客中,我们将了解如何启用 Vega Sankey 可视…...
快速部署一套K8s集群-v1.28
快速部署一套K8s集群-v1.28 1.前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式: kubeadmKubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 二进制包从github下载发行版的二进…...
python3验证有效正则表达式
Python 中字符串类型本质上没有标记“是否原始”的特性,原始字符串只是为了书写方便。运行时,原始字符串与普通字符串的表现是相同的,唯一的区别是编写代码时是否进行了转义。 因此,如果需要确保某些输入是有效正则表达式&#x…...
Dify+Xinference本地部署Embedding和Rerank模型
文章目录 1、Xinference介绍2、Xinference安装2.1 Xinference Docker安装2.2 pip安装2.3 设置开启自启动(仅针对pip安装用户) 3、部署Embedding和Rerank模型4、Dify调用Xinference模型 1、Xinference介绍 Xinference是一个性能强大且功能全面的分布…...
是时候戒掉小游戏了
玩儿这东西没够!去年本来是要备考CPA,但是赶上写毕业论文,就以此为由,没有去备考,结果论文没完成,考试也没准备,都是游戏惹的祸!今年计划备考,看了两个月书,结…...
ECMAScrip 与 ES2015(ES6):JavaScript 现代化编程的里程碑
在 JavaScript 的发展历程中,ECMASCript 和 ES2015(也称为 ES6)无疑是最具革命性的版本之一。它们不仅引入了大量的新特性和语法糖,还极大地提升了代码的可读性、可维护性和性能。本文将深入探讨 ECMASCrip 和 ES2015 的新特性及其…...
iOS swift开发系列 -- tabbar问题总结
1.单视图如何改为tabbar,以便显示2个标签页 右上角➕,输入tabbar 找到控件,然后选中,把entrypoint移动到tabbar控件 2.改成tabbar,生成两个item,配置各自视图后,启动发现报错 Thread 1: “-[p…...
nginx 部署 ModSecurity3
一、查看本地nginx版本 nginx是yum安装的 # nginx -v nginx version: nginx/1.26.2 二、安装依赖工具 # yum install -y gcc-c flex bison yajl lmdb lua curl-devel curl GeoIP-devel zlib-devel pcre-devel pcre2-devel libxml2-devel ssdeep-devel libtool autoconf aut…...
websocket_asyncio
WebSocket 和 asyncio 指南 简介 本指南涵盖了使用 Python 中的 websockets 库进行 WebSocket 编程的基础知识,以及 asyncio 在异步非阻塞 I/O 中的作用。它提供了构建高效 WebSocket 服务端和客户端的知识,以及 asyncio 的特性和优势。 1. 什么是 WebS…...
一级考试真题(2019)
一级考试真题(2019)...
OpenCV相机标定与3D重建(20)将单应性矩阵分解为旋转矩阵、平移向量和法向量函数decomposeHomographyMat()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将单应性矩阵分解为旋转矩阵、平移向量和法向量。 cv::decomposeHomographyMat 是 OpenCV 库中的一个函数,用于将单应性矩阵…...
题解 - 取数排列
题目描述 取1到N共N个连续的数字(1≤N≤9),组成每位数不重复的所有可能的N位数,按从小到大的顺序进行编号。当输入一个编号M时,就能打印出与该编号对应的那个N位数。例如,当N=3时,可…...
LVGL9.2 鼠标悬停处理
文章目录 前言鼠标悬停处理功能简介使用场景1. **按钮悬停效果**2. **图标高亮**3. **动态工具提示** 实现原理使用方法1. 设置控件样式2. 监听悬停事件 功能亮点注意事项总结 前言 在 v9.2 版本中,新增了许多功能,其中鼠标悬停处理(Mouse H…...