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

计算机图形学:(二)MVP变换示例

前言

        当在阅读计算机图形学系列的书籍时,会发现大部分图书每章内容都如出一辙。从个人实际体会来讲,虽然能理解书中大部分的知识,但到了实际使用时却有点抓耳挠腮。因此,在写了计算机图形学:(一)基础后,觉得应该从一些实例入手去更好地理解那些知识点。

        在网上翻找资料时,找到博主charlee44写的一些文章,很受启发,该篇便在其WebGL或OpenGL关于模型视图投影变换的设置技巧-CSDN博客的基础上进行整理补充。

准备工作

        先绘制一个立方体,为了更快地理解一些概念,这里不把参数复杂化。

// WebGl的三维坐标系统(笛卡尔坐标系),水平方向是X轴,垂直方向是Y轴,垂直于屏幕的是Z轴
var minX = -2;
var maxX = 2;
var minY = -2;
var maxY = 2;
var minZ = -1;
var maxZ = 1;// 顶点坐标和颜色
var verticesColors = new Float32Array([maxX, maxY, maxZ, 1.0, 0.0, 0.0,  // v0 红minX, maxY, maxZ, 1.0, 0.0, 0.0,  // v1 红minX, minY, maxZ, 1.0, 0.0, 0.0,  // v2 红maxX, minY, maxZ, 1.0, 0.0, 0.0,  // v3 红maxX, minY, minZ, 0.0, 1.0, 0.0,  // v4 绿maxX, maxY, minZ, 0.0, 1.0, 0.0,  // v5 绿minX, maxY, minZ, 0.0, 1.0, 0.0,  // v6 绿minX, minY, minZ, 0.0, 1.0, 0.0   // v7 绿
]);

        当前该立方体的中心点正好在(0, 0, 0)处。

var cx = (minX + maxX) / 2.0;
var cy = (minY + maxY) / 2.0;
var cz = (minZ + maxZ) / 2.0;

示例一:初始化

        现在假设我们站在Z轴的一个点上(如(0, 0, 2000))去看向该立方体。那么我们看到的立方体是怎样的呢?

        通过一些视图变换矩阵我们可以计算一下结果:

// 模型矩阵
// 注:这里不对模型进行任何的旋转,它的位置即中心点的位置
var modelMatrix = new Matrix4();
modelMatrix.rotate(0.0, 1.0, 0.0, 0.0); // 绕x轴旋转 (angle, x, y, z)
modelMatrix.rotate(0.0, 0.0, 1.0, 0.0); // 绕y轴旋转 (angle, x, y, z)
modelMatrix.translate(cx, cy, cz);// 视图矩阵
var viewMatrix = new Matrix4();
// 注:这里我们从(0, 0, 2000)点看向(cx, cy, cz)点(也是立方体的中心点)
viewMatrix.lookAt(0, 0, 2000, cx, cy, cz, 0, 1, 0); // (eye, center, up)// 投影矩阵
var projMatrix = new Matrix4();
var fovy = 60 * Math.PI / 180.0; // 注:这里随便设置一个常见的垂直视场角
var aspect = canvas.width / canvas.height; // 获取成像平面的比例
projMatrix.setPerspective(fovy, aspect, 10, 3000); // (fovv, aspect, near, far)// 模型视图投影矩阵
var mvpMatrix = new Matrix4();
mvpMatrix.set(projMatrix).multiply(viewMatrix).multiply(modelMatrix);

        在这种状态下我们看到的结果是:

        同理我们可以从不同的相机位置去观察结果:

左:(0, 0, -2000)中:(0, 2000, 2000)右:(200, 2000, 2000)

        视场角决定了摄像机所能看到的范围,角度越大,可视范围就越广,看到的东西就越多,但是屏幕上远处的物体也会越小。不同的垂直视场角大小:

左:30°;中:60°;右:90°

示例二:绕点旋转

        观察以下两幅动图:

左:旋转摄像机,让摄像机绕着原点顺时针旋转;
右:旋转场景中的物体,让所有物体绕着原点逆时针。

        事实上,无论是摄像机绕原点顺时针旋转还是场景中的物体绕原点逆时针旋转,我们以摄像机的视角来看的话,你会发现这两种方式看到的图像是一样的。但是,移动摄像机比起整体移动场景来说更加的高效且更加的符号人类的生活常识。毕竟我们在生活中想要观察不同的物体时我们会去改变我们观察的位置和角度,而不会去移动物体本身,况且有的东西也根本无法移动 [链接]。

        在博文《WebGL或OpenGL关于模型视图投影变换的设置技巧》中使用的是第二种方式(即旋转物体,修改了立方体的模型矩阵),所以这里我们考虑一下第一种方式的实现(即修改相机的视图矩阵)。

① 以固定角度旋转相机

        先从简单的入手,我们先考虑让相机以一个固定的旋转度数(如45°)绕立方体中心旋转:

var eyeHight = 2000.0;
var cameraPos = new Vector3([0, 0, eyeHight]); // 相机初始位置const angle = Math.PI / 4; // 例如,旋转45度
var rotateMatrix = new Matrix4();
rotateMatrix.rotate(angle, 0.0, 1.0, 0.0); // 绕Y轴旋转
cameraPos = rotateMatrix.multiplyVector3(cameraPos); // 得到相机旋转后的新坐标

        修改视图矩阵,传入相机的新位置(即eye):

var viewMatrix = new Matrix4();
viewMatrix.lookAt(cameraPos.elements[0], cameraPos.elements[1], cameraPos.elements[2], cx, cy, cz, 0, 1, 0); // eye, center, up

        运行结果:

绕Y轴旋转(左);绕X轴旋转(右)

② 鼠标拖拽旋转相机

        当在屏幕上按下左键拖拽鼠标时,会形成一个xy偏移量,我们可以根据这个偏移量来计算相机的旋转矩阵。(注:偏移量的大小根据设计的不同会使得鼠标拖动操作的“丝滑度”不同,太小显得拖拽困难,太大立方体轻轻一拖拽就飞速转动

        注:关于鼠标句柄handle的逻辑事件处理这里就不进行说明了,不是本文的重点,可以自己看代码理解 [链接]。

var factor = 100 / canvas.height; // The rotation ratio
var dx = factor * (x - lastX);
var dy = factor * (y - lastY);
// 这里把旋转量限制在[-90°, 90°]
currentAngle[0] = Math.max(Math.min(currentAngle[0] + dy, 90.0), -90.0);
currentAngle[1] = Math.max(Math.min(currentAngle[1] + dx, 90.0), -90.0);

        根据计算出的角度去更新相机旋转后的坐标:

var rotateMatrix = new Matrix4();
rotateMatrix.rotate(-currentAngle[0], 1.0, 0.0, 0.0); // (angle, x, y, z)
rotateMatrix.rotate(-currentAngle[1], 0.0, 1.0, 0.0); 
cameraPos = rotateMatrix.multiplyVector3(cameraPos);
// 旋转完成后重置currentAngle,否则立方体会一直旋转下去
currentAngle[0] = 0.0;
currentAngle[1] = 0.0;

相关文章:

计算机图形学:(二)MVP变换示例

前言 当在阅读计算机图形学系列的书籍时,会发现大部分图书每章内容都如出一辙。从个人实际体会来讲,虽然能理解书中大部分的知识,但到了实际使用时却有点抓耳挠腮。因此,在写了计算机图形学:(一&#xff09…...

PostgreSQL中的SSL(2)

PGSQL数据库的默认隔离级别是读提交,并且同时支持可重复读和序列化模式。但是在9.1之前的版本中,序列化模式是采用快照隔离来实现,并非是真正的序列化模式。 这样的话就会存在一个问题,那就是写偏序(Write Skew&#…...

Linux 部署以paddle Serving 的方式部署 PaddleOCR CPU版本

强烈建议您在Docker内构建Paddle Serving,更多镜像请查看Docker镜像列表。 提示-1:Paddle Serving项目仅支持Python3.6/3.7/3.8/3.9,接下来所有的与Python/Pip相关的操作都需要选择正确的Python版本。 提示-2:以下示例中GPU环境均…...

苏德战争前期苏联损失惨重(马井堂)

苏德战争前期(1941年6月22日德国发动“巴巴罗萨行动”至1941年底至1942年初)是苏联在二战中损失最惨重的阶段之一。以下是主要方面的损失概述: ‌一、军事损失‌ ‌人员伤亡与俘虏‌ 至1941年底,苏军伤亡约‌300万人‌&#xff…...

SI5338-EVB Usage Guide(LVPECL、LVDS、HCSL、CMOS、SSTL、HSTL)

目录 1. 简介 1.1 EVB 介绍 1.2 Si5338 Block Diagram 2. EVB 详解 2.1 实物图 2.2 基本配置 2.2.1 Universal Pin 2.2.2 IIC I/F 2.2.3 Input Clocks 2.2.4 Output Frequencies 2.2.5 Output Driver 2.2.6 Freq and Phase Offset 2.2.7 Spread Spectrum 2.2.8 快…...

LeetCode LCP40 心算挑战题解

看似一道简单的题目,实则不然,没有看评论的话,实在想不出来怎么写。 现在则由我来转述思想供大家参考理解,还是先给出示例,供大家更好的理解这个题目。 输入:cards [1,2,8,9], cnt 3输出:18解…...

Smart Link+Monitor Link组网

1.技术背景及原理 一般情况下,Smart Link只能感知与其接口直连的链路故障。将Monitor Link配置在Smart Link的上游设备上,可使Smart Link迅速感知上游链路故障,进行链路切换。Smart Link与Monitor Link配合使用,扩大了Smart Link…...

【计算机网络】​TCP(传输控制协议)套接字,多线程远程执行命令编程​

📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:UDP套接字编程(英汉字典以及多线程聊天室编写&#xff09…...

PostgreSQL 中 VACUUM FULL 对索引的影响

PostgreSQL 中 VACUUM FULL 对索引的影响 是的,VACUUM FULL 会重建表上的所有索引。这是它与普通 VACUUM 命令的一个重要区别。 一、VACUUM FULL 的工作原理 表重建过程: 创建表的全新副本只将有效数据写入新存储删除原始表文件将新文件重命名为原表名…...

DeepSeek本地部署及WebUI可视化完全指南

以下是为您整理的DeepSeek本地部署及WebUI可视化完全指南,整合了官方文档及社区实践的最佳方案: 一、环境准备 1. 硬件需求 CPU:推荐支持AVX2指令集的Intel i7或AMD Ryzen 7及以上处理器 。 GPU(可选但推荐)&#xf…...

大模型时代的新燃料:大规模拟真多风格语音合成数据集

以大模型技术为核心驱动力的人工智能变革浪潮中,语音交互领域正迎来广阔的成长空间,应用场景持续拓宽与延伸。 其中,数据作为驱动语音大模型进化的关键要素,重要性愈发凸显。丰富多样的高质量数据能够让语音大模型充分学习到语音…...

单体项目到微服务的架构演变与K8s发展是否会代替微服务

单体项目到微服务的架构演变与K8s发展是否会代替微服务 在互联网大厂Java求职者的面试中,经常会被问到关于单体项目到微服务的架构演变以及Kubernetes(k8s)的发展是否会代替微服务的相关问题。本文通过一个故事场景来展示这些问题的实际解决…...

AI驱动的决策智能系统(AIDP)和自然语言交互式分析

在当今快速变化的商业环境中,以下几个企业级系统领域最有可能成为新的热点,其驱动力来自数字化转型加速、AI技术爆发、全球化协同需求以及ESG(环境、社会、治理)合规压力的叠加 1. AI驱动的决策智能系统(AIDP&#xf…...

kubernetes》》k8s》》Service 、Ingress 区别

K8S>>Service 资料 K8S >>Ingress 资料 Ingress VS Service 物理层数据链路层网络层传输层会话层表示层应用层 Ingress是一种用于暴露HTTP和HTTPS路由的资源,它提供了七层(应用层)的负载均衡功能。Ingress可以根据主机名、…...

全面接入!Qwen3现已上线千帆

百度智能云千帆正式上线通义千问团队开源的最新一代Qwen3系列模型,包括旗舰级MoE模型Qwen3-235B-A22B、轻量级MoE模型Qwen3-30B-A3B。千帆大模型平台开源模型进一步扩充,以多维开放的模型服务、全栈模型开发、应用开发工具链、多模态数据治理及安全的能力…...

Python-日志检测异常行为的详细技术方案

以下是根据行为日志检测异常行为的详细技术方案,涵盖数据收集、特征工程、模型选择、部署与优化的全流程: 1. 数据收集与预处理 1.1 数据来源 行为日志通常包括以下类型: 用户行为日志:点击、登录、交易、页面停留时间等。系统…...

DeepSeek-Prover-V2-671B最新体验地址:Prover版仅适合解决专业数学证明问题

DeepSeek-Prover-V2-671B最新体验地址:Prover版仅适合解决专业数学证明问题 DeepSeek 团队于 2025 年 4 月 30 日正式在Hugging Face开源了其重量级新作 —— DeepSeek-Prover-V2-671B,这是一款专为解决数学定理证明和形式化推理任务而设计的超大规模语…...

Java写数据结构:队列

1.概念: 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列&#xf…...

LeetCode 2905 找出满足差值条件的下标II 题解

示例 nums [8, 3, 12, 5, 1, 10, 7, 13] indexDifference 3 valueDifference 6答案 [maxIdx, j] [0, 4]我的思路是直接枚举写,但这题是中等题,一定不会让你好过的,所以也是喜提了超时,先说一下我的做题思路吧。 其实很简单就…...

【思考】欧洲大停电分析

当地时间4月28日中午,西班牙和葡萄牙发生了大规模停电事故,两国多个地区的电力供应中断,波及超过5000万伊比利亚半岛民众,交通、通信、医疗等关键领域受到影响,马德里网球公开赛因停电被迫暂停,周边法国、意…...

[论文精读]Agent综述—— A survey on large language model based autonomous agents

A survey on large language model based autonomous agents ⏲️年份: 2024 👀期刊: Frontiers of Computer Science 🌱影响因子:3.4 📚数字对象唯一标识符DOl: 10.1007/s11704-024-40231-1 🤵作者: Wang Lei,Ma Chen,Feng X…...

金融风控的“天眼”:遥感技术的创新应用

在金融市场的复杂博弈中,风险管控一直是金融机构的核心竞争力。然而,传统的风控手段在应对现代金融市场的快速变化时,往往显得捉襟见肘。 如今,遥感技术的创新应用为金融风控带来了全新的视角和手段。星图云开放平台的遥感金融立体…...

SpringMVC知识点总结(速查速记)

文章目录 前言1、MVC是什么2、SpringMVC是什么3、SpringMVC请求流程 && 环境搭建3.1 SpringMVC请求流程3.2 搭建环境3.2.1开发环境3.2.2 环境配置步骤 4. url地址映射 && 参数绑定4.1 url地址映射之RequestMapping①、映射单个url②、映射多个url③、映射url到…...

配置 Odoo 的 PostgreSQL 数据库以允许远程访问的步骤

1. 修改 PostgreSQL 配置文件 a. 修改 postgresql.conf 找到 PostgreSQL 的主配置文件 postgresql.conf&#xff0c;通常位于 /etc/postgresql/<版本号>/main/ 目录下。修改 listen_addresses 项的值为 *&#xff0c;表示允许来自任何 IP 地址的连接&#xff1a; sudo…...

涨薪技术|0到1学会性能测试第42课-apache监控与调优

前面的推文我们学习了操作系统性能监控与调优知识,如CPU、内存、磁盘、网络监控等,今天开始分享中间件apache监控与调优知识,后续文章都会系统分享干货,带大家从0到1学会性能测试! Apache是世界上使用最多的web服务器软件一种,它可以运行在几乎所有广泛使用的计算机平台上…...

【学习笔记】Shell编程--Bash变量

变量类型说明环境变量 与Shell的执行环境相关的一些变量。如PATH&#xff0c;HOME等&#xff0c;用户可重新定义。 一、环境变量的创建&#xff1a;export&#xff0c; export ABCD2 二、环境变量的查看 使用echo命令查看单个环境变量。如&#xff1a; echo $PATH 使用printenv…...

SpringBoot+Redis全局唯一ID生成器

&#x1f4e6; 优雅版 Redis ID 生成器工具类 支持&#xff1a; 项目启动时自动初始化起始值获取自增 ID 方法yml 配置化起始值可灵活扩展多业务线 ID &#x1f4cc; application.yml 配置 id-generator:member-start-value: 1000000000&#x1f4cc; 配置类&#xff1a;IdG…...

micro-app前端微服务原理解析

一、核心设计思想 基于 WebComponents 的组件化渲染 micro-app 借鉴 WebComponents 的 CustomElement 和 ShadowDom 特性&#xff0c;将子应用封装为类似 WebComponent 的自定义标签&#xff08;如 <micro-app>&#xff09;。通过 ShadowDom 的天然隔离机制&#xff0c;实…...

大连理工大学选修课——机器学习笔记(7):集成学习及随机森林

集成学习及随机森林 集成学习概述 泛化能力的局限 每种学习模型的能力都有其上限 限制于特定结构受限于训练样本的质量和规模 如何再提高泛化能力&#xff1f; 研究新结构扩大训练规模 提升模型的泛化能力 创造性思路 组合多个学习模型 集成学习 集成学习不是特定的…...

[特殊字符] Spring Cloud 微服务配置统一管理:基于 Nacos 的最佳实践详解

在微服务架构中&#xff0c;配置文件众多、管理复杂是常见问题。本文将手把手演示如何将配置集中托管到 Nacos&#xff0c;并在 Spring Cloud Alibaba 项目中实现统一配置管理 自动刷新机制。 一、为什么要使用 Nacos 统一配置&#xff1f; 传统方式下&#xff0c;每个服务都…...

【mysql】执行过程,背诵版

sql执行再mysql的执行过程 1. 建立连接 sql通过tcp/ip发送到服务器服务器检查用户名&#xff0c;密码&#xff0c;权限创建线程处理连接 如果是sql8.0之前&#xff0c;select会先从缓存中查找&#xff0c;命中则返回&#xff0c;由于表结构变更会导致缓存失效&#xff0c;已废…...

[Survey] Image Segmentation in Foundation Model Era: A Survey

BaseInfo TitleImage Segmentation in Foundation Model Era: A SurveyAdresshttps://arxiv.org/pdf/2408.12957Journal/Time-Author北理工、上交、浙大 CCAI 、瑞士苏黎世联邦理工学院、德国慕尼黑工业大学Codehttps://github.com/stanley-313/ImageSegFM-Survey 1. Introdu…...

关于杰理ac791切换版本, git clone下来仍然是最新版本问题

在git clone 之后&#xff0c;在本地切换分支 常规流程&#xff1a;git clone →git branch →git branch -a → git checkout 分支名...

生成项目.gitignore文件的多种高效方式

在使用 Git 进行版本控制时&#xff0c;.gitignore 文件是不可或缺的配置文件。它可以帮助我们指定哪些文件或目录不需要被 Git 跟踪&#xff0c;从而避免将不必要的文件&#xff08;如临时文件、编译生成的文件等&#xff09;提交到仓库中。这篇文章将介绍几种生成 .gitignore…...

2025年“深圳杯”数学建模挑战赛D题-法医物证多人身份鉴定问题

法医物证多人身份鉴定问题 小驴数模 犯罪现场法医物证鉴定是关系到国家安全、公共安全、人民生命财产安全和社会稳定的重大问题。目前法医物证鉴定依赖DNA分析技术不断提升。DNA检验的核心是STR&#xff08;Short Tandem Repeat&#xff0c;短串联重复序列&#xff09;分析技术…...

嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战

一、数组操作&#xff1a;3x3 数组的对角和、偶数和、奇数和 题目 求 3x3 数组的对角元素和、偶数元素和、奇数元素和。 知识点 数组遍历&#xff1a;通过双重循环访问数组的每个元素&#xff0c;外层循环控制行&#xff0c;内层循环控制列。对角元素判断&#xff1a; 主对…...

JAVA SE 反射,枚举与lambda表达式

文章目录 &#x1f4d5;1. 反射✏️1.1 反射相关的类✏️1.2 Class类中的相关方法✏️1.3 Field类中的相关方法✏️1.4 Method类中的相关方法✏️1.5 Constructor类中的相关方法✏️1.6 获取Class对象的三种方式✏️1.7 反射的使用 &#x1f4d5;2. 枚举2.1 枚举的定义✏️2.2 …...

每日算法-250430

每日算法 - 2025年4月30日 记录下今天解决的两道题目。 870. 优势洗牌 (Advantage Shuffle) 题目描述 解题思路与方法 核心思想&#xff1a;贪心策略 (田忌赛马) 这道题的目标是对于 nums1 中的每个元素&#xff0c;找到 nums2 中一个比它小的元素进行配对&#xff08;如果…...

MacOS 安装 cocoapods

MacOS 安装 cocoapods 下面使用 HomeBrew 安装 cocoapods 一、检测 HomeBrew 是否安装 打开终端执行命令 brew -v #如果安装&#xff0c;输出如 Homebrew 4.5.0如果未安装 Mac HomeBrew安装 二、检测 ruby 是否安装 系统一般自带了 ruby 但是这个升级有些麻烦&#xff0c;我…...

MATLAB绘制饼图(二维/三维)

在数据分析与展示领域&#xff0c;饼图是一种直观且高效的可视化工具&#xff0c;能够在瞬间传递各部分与整体的比例关系。今天&#xff0c;我将分享一段 MATLAB 绘制二维及三维饼图的代码&#xff0c;助你轻松将数据以饼图形式呈现于众人眼前。 无论是二维饼图的简洁明了&…...

python将字符串转成二进制数组

python将字符串转成二进制数组 功能概述&#xff1a; save_binary_to_json() 函数&#xff1a;将字符串转换为二进制数据&#xff08;字节的整数表示&#xff09;&#xff0c;并保存到JSON文件中。 load_binary_from_json() 函数&#xff1a;从JSON文件中读取二进制数据并还原…...

防止HTTPS页面通过<iframe>标签嵌入HTTP内容

防止HTTPS页面通过<iframe>标签嵌入HTTP内容 出于安全考虑&#xff0c;现代浏览器实施了严格的规则来防止HTTPS页面通过<iframe>标签嵌入HTTP内容。这种行为主要是为了防止所谓的“混合内容”问题&#xff0c;即在一个安全&#xff08;加密&#xff09;的页面中…...

windows 使用websocket++ (C++环境)

一、简介 websocket官方网址&#xff1a;http://websocket.org/ websocketpp官方网址&#xff1a;https://www.zaphoyd.com/websocketpp websocketpp使用手册&#xff1a;https://www.zaphoyd.com/websocketpp/manual/ websocketpp 是 C 的 WebSocket 客户端/服务器库. 它是…...

无水印短视频素材下载网站有哪些?十个高清无水印视频素材网站分享

你知道怎么下载无水印视频素材吗&#xff1f;今天小编就给大家推荐十个高清无水印视频素材下载的网站&#xff0c;如果你也是苦于下载高清无水印的短视频素材&#xff0c;赶紧来看看吧&#xff5e; 1. 稻虎网 首推的是稻虎网。这个网站简直就是短视频创作者的宝库。无论你需要…...

【dify—5】Dify关联Ollama

目录 一、修改.env文件 二、启动dify 三、访问dify 四、设置关联 五、添加模型插件 5.1 添加模型 5.2 配置信息​编辑 第一部分 安装difydocker教程&#xff1a;【difydocker安装教程】-CSDN博客 第二部分 dock重装教程&#xff1a; 【dify—2】docker重装-CSDN博客 第三…...

PostgreSQL可串行化快照隔离和冻结处理

1.可串行化快照隔离 可串行化快照隔离SSI已经嵌入到快照隔离SI中&#xff0c;以实现真正的可串行化隔离等级。 SSI实现基本策略 使用SIREDA锁记录事务访问的所有对象&#xff08;元组&#xff0c;页面&#xff0c;关系&#xff09;。 当写入任何堆元组/索引元组时&#xff…...

Java 多线程进阶:什么是线程安全?

在多线程编程中&#xff0c;“线程安全”是一个非常重要但又常被误解的概念。尤其对于刚接触多线程的人来说&#xff0c;不理解线程安全的本质&#xff0c;容易写出“偶尔出错”的代码——这类 bug 往往隐蔽且难以复现。 本文将用尽可能通俗的语言&#xff0c;从三个角度解释线…...

Java导出带图片的Excel

使用easypoi导出带图片的Excel&#xff0c; 引入依赖 依赖中着重要剔除可能会造成冲突的依赖&#xff0c;不剔除的话可能会报错 Exception in thread “main” java.lang.NoSuchFieldError: Class org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook does not …...

Keysight万用表使用指南及基于Python采集数据生成Excel文件

文章目录 说明使用的库openpyxlpyvisa 代码说明效果展示参考代码 说明 本文介绍了 Keysight 34465A 的基本使用和 SCPI 指令设置&#xff0c;演示了使用 Python 的 PyVISA 库控制两台 34465A 同时采集数据的完整流程&#xff0c;包括设置采样参数、触发测量、读取数据、使用 O…...

HarmonyOS Next-DevEco Studio(5.0.2)无网络环境配置(详细教程)

开发者如果电脑处于完全无网环境&#xff0c;可以参考下面文档进行相关配置 DevEco Studio(5.0.2)开发环境一览&#xff1a; 工具版本DevEco Studio5.0.2openHarmonySDK14ohpm5.0.11node.js18.20.1hypium1.0.21 一、下载DevEco Studio&#xff08;5.0.2 Release&#xff09;…...