- 博客(255)
- 资源 (1)
- 收藏
- 关注

原创 985硕机器人算法方向毕业五年,对读研和求职规划选择的一点感想总结
这7年,从双非到考上985研的开心,读研写论文的焦灼,毕业时候的未来可期,到刚参加工作时的996,以及果断换行寻找所谓热爱的方向,但对未来仍还是有焦虑和迷茫。
2025-01-04 09:15:59
1287
原创 SLAM中传统滤波器方法和图优化到底有什么区别?
摘要 滤波器方法(如EKF-SLAM)存在线性化误差高、计算复杂度大(O(n²))、数据关联脆弱、信息丢弃等缺陷,导致其在非线性、大规模场景中表现不佳。相比之下,图优化方法(如位姿图)通过保留历史信息、利用稀疏性和非线性优化,显著提升了精度和鲁棒性。其核心优势包括全局优化、高效回环校正及抗数据关联干扰能力,成为现代SLAM的主流选择。滤波器仅适合小规模线性场景,而图优化更适应复杂、高精度需求的应用。
2025-08-21 11:41:10
195
原创 激光SLAM从经典到2025最新框架汇总
嵌入式设备选择轻量级框架(LeGO-LOAM, plain_slam_ros2);计算资源充足(如高性能工控机)则可以运行更复杂的系统(LIO-SAM, HDL Graph SLAM, LPVIMO-SAM)。确认你拥有的传感器(LiDAR类型、IMU、相机等)与框架的兼容性。LPVIMO-SAM则需要偏振相机等特殊传感器。你用自己的硬件和典型场景数据测试几个候选框架,这是最可靠的判断方法。的一些框架,包括它们的特点、适用场景以及源码等信息。没有“唯一”或“最好”的框架,
2025-08-21 10:58:59
305
原创 自动驾驶航向角为什么取值范围要在[-π, π)?
自动驾驶系统中将偏航角映射到([-π, π))范围,主要基于四方面原因:1)符合人类对方向偏差的直觉认知,便于直接判断最短转向路径;2)简化控制算法计算,避免角度跳变问题;3)兼容传感器输出和数学工具特性;4)防止角度跳变导致控制抖动。这一范围设计既保留了方向的相对性,又优化了计算效率和控制稳定性,成为行业标准做法。
2025-08-19 10:42:12
9
原创 C++ vector 容器assign()用安抚
C++ vector的assign()方法用于替换容器内容并调整大小,提供三种主要用法:1)指定数量的相同值填充;2)通过迭代器范围赋值;3)使用初始化列表(C++11+)。该方法会销毁原有元素,自动调整容器大小,可能触发内存重分配,比先clear()再insert()更高效。示例代码展示了三种用法,分别输出重复值、复制元素和初始化列表的结果。
2025-08-11 14:52:44
171
原创 机器人及自动驾驶SLAM面试题解答汇总
SLAM算法岗位面试常见问题解析 本文系统总结了SLAM算法岗位面试的核心知识点,涵盖三大模块: 数学基础:深入解析流形、李群/李代数及其在SLAM中的应用,重点阐述指数映射、扰动模型和BCH近似公式的工程价值 多传感器融合:对比KF/EKF/ESKF原理及实现差异,详解IMU噪声模型(白噪声+随机游走)、LiDAR工作原理(机械式vs固态式)及GNSS误差补偿方法 工程实践:提供传感器标定技巧、时间同步方案(硬件/软件)及滤波器参数(Q/R)调优策略,特别说明ESKF中bias重置的硬/软方法选择 内容兼
2025-08-06 10:37:21
518
原创 Ceres Solver 非线性优化入门:从理论到实践
本文介绍了使用Ceres Solver进行非线性优化的基础知识和实践方法。主要内容包括:1) 非线性最小二乘问题的数学定义,采用Levenberg-Marquardt算法结合梯度下降和高斯-牛顿法的优势;2) Ceres的核心概念如参数块、残差块和自动求导机制;3) 详细编程步骤和位姿图优化实例代码。实例程序展示了如何定义SE3位姿误差项、设置局部参数化处理流形约束,以及构建和求解优化问题。通过固定第一个位姿作为参考系,避免了gauge freedom问题,实现了多帧位姿的联合优化。
2025-07-31 17:56:18
843
原创 Ceres为什么要用为什么需要 AddParameterBlock?
在Ceres Solver中,虽然AddResidualBlock能隐式注册参数块,但**必须显式使用AddParameterBlock**处理流形空间参数(如SE3/SO3位姿)。显式注册可正确设置参数维度、局部参数化(确保四元数约束)、固定参数和边界限制,避免优化错误。对于普通向量可隐式注册但不推荐。最佳实践是始终显式声明参数块,特别是SLAM中的位姿优化,以保证代码清晰和优化正确性。
2025-07-31 17:46:53
351
原创 智能指针初始化方式深度解析:make_shared VS reset VS直接初始化
智能指针在资源管理中,local_map_ = Ptr(new PointCloud())和local_map_.reset(new PointCloud())功能等效但实现不同。推荐使用std::make_shared一次性分配内存,既安全又高效;reset()适合需显式重置的场景。性能差异可忽略,应优先考虑代码清晰性。避免手动构造智能指针的冗长写法。现代C++推荐make_shared,而传统场景可用reset明确表达意图。
2025-07-08 15:23:44
401
原创 第12.8章 NDT与ICP的精度对比及适用场景分析
NDT和ICP是点云配准的两种主流算法,各有优势。ICP适合小位移场景,精度高(毫米级);NDT对初始位姿鲁棒性强,适用于大位移配准。性能上,ICP计算更快但抗噪性差,NDT内存需求高但对噪声更鲁棒。实际应用中建议结合使用:先用NDT进行粗配准,再用ICP精修。参数调优时需注意ICP的对应点距离阈值和NDT的网格分辨率。选择算法需根据具体场景的精度需求、点云密度和计算资源综合考虑。
2025-06-27 10:14:37
132
原创 第12.7章 PC点云pcl::PointCloud<pcl::PointXYZI>传参用哪种方式好?
本文对比了三种函数参数传递方式的区别:智能指针引用传递、智能指针值传递和对象引用传递。智能指针引用高效但需确保指针非空;智能指针值使用方便但有复制开销;对象引用高效但无法处理空对象。在自动驾驶应用中,推荐使用智能指针引用(Ptr &)处理点云数据,因其高效安全且避免深拷贝,特别适合大规模点云处理。文中提供了NDT匹配的代码实例,展示了智能指针引用的实际应用场景。
2025-06-26 11:04:56
46
原创 第4.5章 C++ 函数工作实战笔记: 锁与条件变量在自动驾驶开发中的应用
本文介绍了C++多线程编程中的关键同步机制。首先阐述了C++类和函数两个核心概念,重点讲解了锁机制的使用。通过两种RAII风格的锁封装(std::lock_guard和std::unique_lock)实现资源自动管理,并建议在不同场景下的选择:简单情况用lock_guard,条件变量环境中必须使用unique_lock。接着说明条件变量的概念及其与unique_lock的配合使用方式,展示了线程间通过条件变量进行协作的经典模式。文中还提供了自动驾驶定位数据处理的代码示例,演示了如何在实际场景中应用这些同步
2025-06-23 11:16:24
36
原创 第4.4章 C++ 函数工作实战笔记:多线程编程在自动驾驶算法中应用
本文介绍了C++多线程编程的核心概念与应用。首先概述了C++类和函数的基础知识,重点讲解了C++11引入的std::thread标准线程库及其在自动驾驶等领域的实际应用。文章详细解析了std::thread的三种可调用对象形式(函数指针、函数对象和lambda表达式),并通过示例代码演示了多线程处理不同传感器数据(GPS、IMU、激光雷达)的方法。最后以自动驾驶定位算法为例,展示了如何使用多线程处理UWB数据,并说明lambda表达式如何通过this指针访问类成员。全文提供了从基础到实践的完整多线程编程指导
2025-06-23 11:05:18
33
原创 第4.3章 C++函数工作实战笔记:自动驾驶常用函数最全总结
本文介绍了C++编程中常用函数及其应用场景,重点聚焦自动驾驶定位算法开发中的实际用例。主要内容包括: 标准库函数:涵盖了输入输出、字符串处理、动态内存管理(含智能指针)、文件操作和异常处理等基础功能,适用于传感器数据处理和系统错误管理。 数学函数:通过<cmath>库演示了平方根、幂运算、绝对值等常用数学计算,这些在定位算法中的距离计算和误差处理中尤为重要。 容器操作:展示了STL容器(如vector)和算法(排序、查找、转换)的使用,这些功能对处理车辆位置数据等结构化信息非常实用。 文章通过具
2025-06-23 11:01:44
32
原创 第4.2章 C++ 函数工作实战笔记:函数传参最全总结
本文总结了C++函数传参的7种主要方式及其在自动驾驶定位算法中的应用。包括传普通值、普通指针、常量引用、指针常量、右值引用、智能指针和引用指针,着重分析了各种方式的适用场景和优势。特别详细讲解了右值引用的使用场景、示例代码和注意事项,强调其在减少拷贝操作、提高性能方面的价值。文章指出,在自动驾驶算法开发中,常量引用与指针常量的组合最为常用,而合理选择传参方式对程序性能和代码可维护性至关重要。
2025-06-23 10:57:42
27
原创 第4.1章 C++ 函数工作实战笔记:普通函数、回调函数、lambda等函数用法最全总结
本文摘要:文章系统介绍了C++中的可调用对象及其在自动驾驶定位算法中的应用。主要内容包括:1) 普通函数的基本结构、声明调用及参数传递方式选择原则;2) 函数模板实现泛型编程的方法;3) 回调函数的四种实现方式(函数指针、std::function、仿函数、bind联合使用);4) Lambda表达式语法与捕获机制;5) constexpr函数的编译期计算特性。文章结合自动驾驶场景,强调了合理选用可调用对象对提升代码模块化和性能的重要性,并提供了各类可调用对象的典型用法示例和最佳实践建议。(149字)
2025-06-23 10:50:23
27
原创 第3.7章 C++类工作实战笔记:类模板
本文介绍了C++类模板及其在自动驾驶算法开发中的应用。类模板允许编写泛型代码处理不同数据类型,提高了代码复用性。文章详细讲解了类模板的定义语法和使用方法,并重点分析了标准库中模板类的典型应用,包括容器类(vector、list等)和智能指针(unique_ptr、shared_ptr、weak_ptr)。通过具体代码示例,展示了类模板在管理传感器数据和内存资源时的实际应用价值,为算法工程师开发高效、通用的定位系统提供了技术参考。
2025-06-23 10:03:18
34
原创 第3.6.2章 C++类工作实战笔记:抽象类与接口的全面解析
C++抽象类与接口在自动驾驶系统开发中的关键应用。文章首先介绍了抽象类与接口的基本概念,重点说明纯虚函数(=0)的使用及其对抽象类的判定作用。在规则部分强调了抽象类不能实例化,派生类必须实现所有纯虚函数的特点。通过形状类的实例展示了不同派生类实现相同接口的多态特性,并以Apollo工程的BaseMapMatrix为例,解读了抽象类在地图矩阵操作中的实际应用,包括初始化、数据序列化等纯虚函数接口设计。这些抽象设计方法为自动驾驶系统的模块化开发和功能扩展提供了重要支持。
2025-06-23 09:59:27
103
原创 第3.6.1章 C++类工作实战笔记:什么情况下需要用到虚析构函数?
摘要: 析构函数是否定义为虚函数取决于使用场景。若无需通过基类指针删除派生类对象(直接创建派生类对象),则无需虚析构函数,编译器会按正确顺序调用析构。若需通过基类指针删除派生类对象,则必须将基类析构函数声明为虚函数,否则仅调用基类析构函数,导致派生类资源泄漏。虚析构函数确保派生类析构函数被调用,避免内存泄漏。综上,多态场景下需虚析构,否则非必要。(150字)
2025-06-23 09:55:59
217
原创 第3.6章 C++类工作实战笔记:多态、虚函数、纯虚函数及虚析构函数最全代码总结
摘要 本文介绍了C++面向对象编程中多态、虚函数、纯虚函数以及虚析构函数的核心概念与应用。通过几何图形类的示例展示了静态多态与动态多态的区别,重点说明了虚函数实现运行时多态的机制。文章详细解析了纯虚函数创建抽象类的方法,并强调了虚析构函数在防止内存泄漏中的重要性。最后通过代码示例演示了虚析构函数和纯虚析构函数的工作原理,这些技术对于构建灵活的类层次结构(如自动驾驶中的传感器数据处理系统)具有重要价值,能显著提升代码的可维护性和健壮性。
2025-06-23 09:52:49
554
原创 第3.5章 C++类工作实战笔记:类继承最全代码总结
本文介绍了C++类继承在自动驾驶定位算法中的应用。主要内容包括:1)基类与派生类的关系及定义方式;2)访问控制规则及其重要性;3)公有、保护和私有三种继承类型的特点;4)多继承的语法和使用场景;5)虚继承解决多重继承问题的机制。文章通过传感器数据处理的具体案例,说明了合理运用类继承可以提高代码复用性、可维护性和可扩展性,同时强调了在复杂系统中避免二义性的重要性。
2025-06-23 09:37:24
24
原创 第3.4章 C++类工作实战笔记:和类相关关键字最全总结
摘要: 本文介绍了C++中9个关键特性在自动驾驶定位算法开发中的应用。主要内容包括:static静态数据成员用于全局共享数据,default/defaulted函数简化构造/析构实现,delete禁用默认函数,explicit避免隐式转换,virtual实现多态(含虚析构、纯虚函数),override明确重写关系,friend授予访问权限,volatile确保实时变量访问,final禁止继承/覆盖。这些特性可提高代码安全性、可维护性和可靠性,在自动驾驶系统开发中具有重要实践价值,如管理全局配置、实现模块化设
2025-06-23 09:33:39
92
原创 第3.3章 C++ 类工作实战笔记:C++ 类相关函数最全总结
本文介绍了C++中各类成员函数在自动驾驶定位算法中的应用。主要内容包括:特殊成员函数(默认/拷贝/移动构造函数、析构函数、拷贝/移动赋值运算符),非静态/静态成员函数,友元函数,内联函数和仿函数。通过传感器数据、位姿信息等实际场景的代码示例,展示了如何正确使用这些函数特性编写高效、安全的自动驾驶算法代码,特别是涉及指针管理和资源分配时的注意事项。这些概念对于自动驾驶定位算法工程师的C++开发工作至关重要。
2025-06-20 15:07:03
466
原创 第3.2章 C++类工作实战笔记:访问修饰符总结
本文概述了访问修饰符及其应用:public允许类内外访问,private仅限类内(默认),protected允许派生类访问。三类成员特点不同:公有成员可外部直接访问,私有成员需通过成员函数,受保护成员类似私有但派生类可访问。继承方式影响成员可见性:public继承保持原权限,protected继承将public降级,private继承全降级。访问成员变量时,普通成员通过.或->,静态成员用类名::变量名,继承场景下派生类可通过基类函数或直接访问保护/公共成员。私有成员始终仅限类内访问。
2025-06-20 14:58:24
356
原创 第3.1章 C++类工作实战笔记:类定义与实例化对象最全总结
本文探讨了C++类与对象在自动驾驶定位算法开发中的应用。主要内容包括:1)类定义的基本语法及其在定位算法中的具体应用;2)三种对象实例化方式(直接声明、普通指针和智能指针)及其适用场景,强调智能指针在内存管理中的优势;3)数据成员的访问方法。文章结合定位算法开发的实际需求,帮助工程师掌握如何合理运用C++面向对象编程技术,构建高效可靠的定位系统模块。重点分析了不同实例化方式的优缺点,并推荐在动态内存管理中使用智能指针以避免内存泄漏。
2025-06-20 14:46:18
631
原创 第2.8章 自动驾驶工作实战笔记:C++ I/O 与终端参数输入最全代码总结
本文介绍了C++ I/O操作在自动驾驶定位算法开发中的关键应用。主要内容包括:1) <iostream>的基本输入输出用法;2) <iomanip>的格式化输出功能;3) <fstream>的文件读写操作;4) 终端参数输入的实现方式。文章通过具体代码示例展示了如何输出传感器数据、格式化显示结果、读写数据文件以及通过命令行设置算法参数。这些I/O操作是自动驾驶系统中数据处理和调试的基础,开发者可根据实际需求进行扩展,如支持更复杂的数据格式和参数解析。
2025-06-20 14:33:59
283
原创 第2.7章 自动驾驶工作实战笔记:C++中static关键字最全代码总结
本文介绍了C++中static关键字在面向对象编程中的关键应用,重点讲解了静态成员变量和静态成员函数的使用方法。静态成员变量通过类共享数据,需要在类外单独初始化;静态成员函数可通过类名直接调用,但只能访问静态成员。文章还通过自动驾驶算法开发的实际案例,展示了静态成员在数据共享和功能调用中的优势。最后强调了静态成员初始化的要点:必须在类外进行,且所有对象共享同一内存空间。这些特性使static成为优化代码结构和提高效率的重要工具。
2025-06-19 16:23:59
860
原创 第2.6章 自动驾驶工作实战笔记:C++ 指针与引用最全代码总结
C++指针与引用在自动驾驶定位算法开发中的应用 本文系统介绍了C++中指针和引用的核心概念与应用。指针部分涵盖普通指针的特性、指针与数组的关系、动态数组内存管理以及智能指针(unique_ptr、shared_ptr、weak_ptr)的安全内存管理机制。引用部分对比了指针与引用的区别,分析了引用作为别名变量的特性及其在函数参数传递中的优势。作为自动驾驶定位算法工程师,深入理解这些特性可有效提升数据处理效率和内存管理安全性,对优化激光雷达、相机等传感器数据处理算法具有重要价值。
2025-06-19 16:14:37
882
原创 第2.5章 自动驾驶算法工作实战笔记:const修饰变量、指针、引用和函数及与define区别最全总结
本文系统梳理了C++中const关键字的使用方法及其在自动驾驶定位算法中的应用。文章首先介绍了常量基础概念,然后详细分析了const修饰普通变量、指针变量(常量指针、指针常量、常量指针常量)、引用(常量引用、临时对象、常量对象、函数传参)的具体用法。在函数方面,重点讲解了const修饰函数形参、返回值以及成员函数(常函数)的注意事项。最后比较了const与#define、constexpr的区别,强调const在保证代码安全性和稳定性方面的重要作用。在自动驾驶定位算法中,合理使用const可以有效保护传感器
2025-06-19 16:10:07
999
原创 第2.4章 机器人自动驾驶工作实战笔记:C++关键字最全代码总结
本文系统梳理了C++编程语言的62个关键字及其在自动驾驶定位算法中的应用。内容分为11个章节,涵盖基本数据类型、控制流、函数与类、存储类、模板、命名空间等关键领域。重点介绍了bool、char等基本数据类型在传感器数据处理中的使用,if、for等控制流语句在算法逻辑实现中的作用,以及class、struct等面向对象特性在代码模块化中的价值。文章通过具体代码示例(如传感器类定义、坐标结构体声明等)展示了各关键字在实际工程中的运用场景,为自动驾驶工程师提供了全面的C++关键字参考指南。
2025-06-19 15:58:03
762
原创 第2.3章 C++变量作用域在自动驾驶算法开发中的应用
本文系统解析了变量作用域在自动驾驶定位算法开发中的关键应用。文章从变量定义位置(局部变量、形式参数、全局变量)入手,详细阐述了四种作用域类型的特点:局部作用域用于函数内临时存储,全局作用域共享系统参数,块作用域限定代码块访问,类作用域封装相关数据。特别强调变量初始化的必要性,指出未初始化变量可能导致定位精度偏差。通过典型代码示例,展示了如何处理名称冲突及类作用域变量的使用。最后指出合理运用不同作用域变量对提升自动驾驶系统代码质量的重要价值。全文为算法工程师提供了实用的变量作用域应用指南。
2025-06-19 15:52:38
20
原创 第2.2章 C++变量修饰符在自动驾驶中的实战应用
本文系统介绍了C++中的变量修饰符及其在自动驾驶定位算法中的应用。内容涵盖存储类说明符(auto、register、static等)、类型修饰符(const、volatile)、作用域修饰符(thread_local、constexpr)及其他特殊修饰符(friend、virtual等)。通过合理运用这些修饰符,工程师能优化算法性能,确保代码安全性和可维护性。文章结合自动驾驶场景实例,展示了如何利用修饰符处理多线程数据共享、性能优化等实际问题,为开发高性能自动驾驶系统提供了实用指导。
2025-06-19 15:44:09
25
原创 第2.1章 C++基础类型及变量在自动驾驶定位算法中的应用与实践
摘要 本文系统阐述了C++数据类型在自动驾驶定位算法中的关键应用。第一部分分析了基础数据类型的工程选择,包括整形类型(如uint16_t存储激光雷达序号)、浮点数类型(float/double精度权衡)、字符类型(协议解析)和布尔类型(状态机控制)。第二部分探讨了自定义数据类型的设计实践:结构体封装多传感器数据、强类型枚举定义状态机、联合体优化内存使用、类模板实现矩阵运算。第三部分重点讨论了变量操作规范,强调列表初始化安全实践、左值/右值语义优化,以及类型修饰符(const/volatile)和转换在传感器
2025-06-19 15:30:10
879
原创 第1.3章 Git本地配置、代码仓管理及代码上传最全入门教程
本文详细介绍了Git在自动驾驶定位算法开发中的核心配置和使用技巧。主要内容包括:SSH密钥生成与用户配置、仓库创建与管理(多仓库推送、撤销操作、文件忽略等)、reset选项区别(--hard与--soft)、远程仓库名称修改、checkout操作(分支切换、标签管理)以及错误代码回退方法。通过系统化的Git操作指南,帮助开发者高效管理代码版本,提升自动驾驶算法开发的协作效率与代码质量。
2025-06-19 15:13:30
549
原创 第1.2章 CMake技术指南:从基础到自动驾驶项目实践
本文系统介绍了CMake在自动驾驶开发中的全流程应用。从CMake基础配置到复杂项目管理,涵盖多目录结构、外部库集成和条件编译等进阶功能。重点讲解了自动驾驶开发中的编译优化、测试框架集成、交叉编译部署等场景化实践,包括针对车载嵌入式平台的ARM架构优化、定位算法单元测试配置以及车载系统安装规则。通过CMake高效管理激光雷达、视觉SLAM等多模块编译,实现算法开发到嵌入式部署的全链路构建支持,为自动驾驶工程实践提供完整的构建系统解决方案。
2025-06-19 15:01:57
681
原创 第1.1章 自动驾驶定位工作实战笔记:Linux系统、网络技术与远程调试实战指南
本文档系统介绍了自动驾驶定位算法开发的Linux工程实践全流程。主要内容包括:1)Linux目录规划与代码调试技术,如gdb调试定位算法关键断点;2)车载网络配置实战,包含组合导航IP设置、多传感器子网划分及网络故障排查;3)开发环境搭建与版本控制,涉及apt工具链安装、deb包制作和git工作流;4)数据运维技巧,如日志分析、远程传输及存储优化;5)远程调试方法,包括ssh环境配置和vim高效编辑。文档通过具体代码示例(如ROS工程管理、tcpdump抓包分析等)为定位算法工程师提供了从开发到部署的完整解
2025-06-19 14:46:13
1466
原创 第5.4章 SLAM实战:使用std::chrono计算传感器消息时间戳
摘要:本文介绍了C++11中std::chrono时间库在机器人及自动驾驶定位中的应用。重点分析了三种时钟类型:system_clock(系统时间)、steady_clock(稳定计时)和high_resolution_clock(高精度时钟)的特性与适用场景。通过代码示例详细讲解了如何使用steady_clock获取微秒级时间戳,包括时间点转换、纪元时间计算和单位转换等关键操作。文章还提供了简化后的时间获取函数,并强调在定位系统中选择合适时钟类型(如steady_clock保证单调性)和精确时间单位的重要
2025-06-17 11:01:04
222
原创 C++常用的计时方法及其使用场景总结
摘要:C++中常用计时方法包括:1) std::chrono(高精度,跨平台);2) std::clock()(CPU时间统计);3) Unix的gettimeofday(微秒级);4) Windows的QueryPerformanceCounter;5) RAII自动计时器。选择方法需考虑精度、平台及使用场景,建议高精度需求用std::chrono,跨平台使用RAII计时器。注意多次测试取平均值,并关注编译器优化和多线程的影响。
2025-06-17 10:41:59
497
原创 Eigen::Isometry3d中rotate()和 linear()有什么区?
Eigen::Isometry3d的两种初始化方式在数学结果上等价,但存在关键差异: 变换顺序: rotate()+pretranslate()体现先旋转后平移的顺序(T=translation·rotation) 直接设置linear()和translation()无顺序概念 应用场景: 第一种方式更符合坐标系变换的物理意义(如先旋转后平移) 第二种方式适合直接构造已知参数的变换矩阵 两种方式最终生成的变换矩阵相同,但第一种更具可读性,推荐用于表达明确的变换逻辑。注意避免混淆pretranslate()和
2025-06-16 15:11:13
701
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人