点到线投影点计算:从数学原理到工程实践的完整指南
1. 从“点投影到线”说起这个几何操作到底在解决什么问题很多人第一次接触“点到线的投影点”是在计算几何的入门课上。老师画一条直线、一个点然后从点向直线作垂线垂足就是投影点。看起来简单得不能再简单但真正动手写代码的时候你会发现事情远没有想象中那么直接——二维和三维的公式不一样直线用两点表示还是用点加方向向量表示也不一样更别提还要处理点就在直线上的退化情况、直线长度为零的边界条件以及浮点数精度带来的各种“看起来对但实际错”的坑。我在实际项目里第一次真正用到这个操作是在做一个路径规划的可视化工具时。当时需要把地图上任意一个位置点投影到最近的道路线段上用来判断这个点是否偏离了预定路线。一开始觉得随便写写就行结果测试的时候发现当点位于线段延长线外侧时投影点跑到了线段外面导致距离计算完全错误。后来才意识到点到直线的投影和点到线段的投影是两个不同的概念前者永远落在直线上后者需要额外判断是否落在线段范围内。这个操作的核心价值在于它是大量几何算法的基石。比如计算点到直线的最短距离、判断点与直线的相对位置关系、在计算机图形学中做射线与平面的求交、在机器学习中做数据点到超平面的投影、在游戏开发中做碰撞检测的最近点查询甚至在你用地图导航时计算“当前位置到路线的垂直距离”底层都是这个操作在支撑。所以这篇文章我打算把“点到线的投影点”这件事从头到尾讲透。不管你是刚学计算几何的学生还是工作中需要用到这个操作的开发者我都会从数学原理、代码实现、边界处理、性能优化几个角度把我在实际项目中踩过的坑和总结的经验全部分享出来。文章会覆盖二维和三维两种情况给出可以直接复制使用的代码并且解释每一步为什么这么写。2. 投影点的数学本质向量点积为什么能定位垂足2.1 用向量语言重新描述“作垂线”中学几何里投影点是“从点向直线作垂线得到的垂足”。这个描述很直观但没法直接翻译成代码。我们需要用向量语言重新表述。假设直线上有两个点 A 和 B它们确定了直线的方向。直线外有一个点 P。我们要找的是直线上一点 Q使得 PQ 垂直于 AB。这就是投影点的定义。用向量来表示令向量d B - A这是直线的方向向量。令向量v P - A这是从直线上已知点指向目标点的向量。投影点 Q 可以表示为 A t *d其中 t 是一个标量参数。我们的任务就是求出 t。因为 PQ 垂直于 AB所以向量 (Q - P) 与d的点积为零。代入 Q A t *d得到(A t *d- P) ·d 0展开后t * (d·d) (P - A) ·d所以t ((P - A) ·d) / (d·d)这就是投影参数的计算公式。它的几何意义非常清晰分子是向量 AP 在直线方向上的投影长度乘以 |d|分母是 |d| 的平方两者相除就得到了归一化的参数 t。2.2 为什么点积能判断垂直这里稍微展开说一下点积的几何意义因为很多初学者对这个公式“知其然不知其所以然”。两个向量的点积等于它们的模长乘积再乘以夹角的余弦值。当两个向量垂直时夹角为90度余弦值为零所以点积为零。反过来如果两个非零向量的点积为零它们必然垂直。在投影问题中我们正是利用了这个性质垂足处的向量 PQ 与直线方向d垂直所以它们的点积必须为零。这个条件唯一确定了 t 的值。整个推导过程没有任何近似或假设是精确的代数结果。2.3 参数 t 的取值与投影点位置的关系算出 t 之后投影点 Q A t *d。但 t 的取值不同Q 的位置也不同当 0 ≤ t ≤ 1 时Q 落在线段 AB 内部这是点到线段投影的有效区间。当 t 0 时Q 落在 A 点外侧的延长线上此时点到线段的最近点其实是 A。当 t 1 时Q 落在 B 点外侧的延长线上此时点到线段的最近点其实是 B。这个区分非常关键。如果你要计算的是点到直线的投影那 t 取任何实数都无所谓Q 永远在直线上。但如果你要计算的是点到线段的投影就必须把 t 限制在 [0, 1] 范围内否则投影点会跑到线段外面去。我在实际项目中就犯过这个错误。当时用点到直线的公式去处理道路线段结果对于远离道路端点的位置点投影点跑到了道路的延长线上导致距离计算偏小系统误判该点“在路线上”。后来加上了 t 的钳制逻辑问题才解决。2.4 二维与三维的统一视角上面的推导在二维和三维中完全一样因为向量点积的定义不依赖于维度。二维中d (dx, dy)三维中d (dx, dy, dz)公式形式完全相同。这也是向量方法的美妙之处——一套公式多个维度通用。不过在实际编码时二维和三维的数据结构不同需要分别处理。二维可以用两个浮点数表示一个点三维需要三个。但核心计算逻辑可以抽象成一个函数通过模板或泛型来复用。3. 手写代码实现从公式到可运行的函数3.1 二维情况点到直线与点到线段先看二维的实现。我习惯用结构体来表示点这样代码可读性更好。struct Point2D { double x, y; }; // 向量减法 Point2D sub(Point2D a, Point2D b) { return {a.x - b.x, a.y - b.y}; } // 向量点积 double dot(Point2D a, Point2D b) { return a.x * b.x a.y * b.y; } // 点到直线的投影点 Point2D projectPointToLine(Point2D p, Point2D a, Point2D b) { Point2D d sub(b, a); Point2D v sub(p, a); double t dot(v, d) / dot(d, d); return {a.x t * d.x, a.y t * d.y}; } // 点到线段的投影点带钳制 Point2D projectPointToSegment(Point2D p, Point2D a, Point2D b) { Point2D d sub(b, a); Point2D v sub(p, a); double t dot(v, d) / dot(d, d); if (t 0.0) t 0.0; if (t 1.0) t 1.0; return {a.x t * d.x, a.y t * d.y}; }这段代码很短但每一行都有讲究。dot(d, d)是方向向量的模长平方它一定非负。如果 A 和 B 重合这个值为零除法会出问题。所以实际使用时需要加一个判断如果dot(d, d)接近零说明直线退化成了一个点直接返回 A 即可。3.2 三维情况多一个维度多一份小心三维的代码结构类似只是多了一个 z 分量。struct Point3D { double x, y, z; }; Point3D sub(Point3D a, Point3D b) { return {a.x - b.x, a.y - b.y, a.z - b.z}; } double dot(Point3D a, Point3D b) { return a.x * b.x a.y * b.y a.z * b.z; } Point3D projectPointToLine3D(Point3D p, Point3D a, Point3D b) { Point3D d sub(b, a); Point3D v sub(p, a); double dd dot(d, d); if (dd 1e-12) return a; // 退化情况 double t dot(v, d) / dd; return {a.x t * d.x, a.y t * d.y, a.z t * d.z}; }三维中退化判断的阈值我用了 1e-12这个值需要根据你的坐标尺度来调整。如果你的坐标值很大比如地理坐标以米为单位数值达到几万那么 1e-12 可能太小应该用相对误差来判断。一个更稳健的做法是判断dd是否小于epsilon * max(1, |d|^2)之类的相对量。3.3 为什么我推荐用参数 t 而不是直接算坐标有些教程会直接给出投影点坐标的展开公式比如二维中Qx Ax ((Px-Ax)*dx (Py-Ay)*dy) / (dx^2dy^2) * dx这样写虽然也能用但可读性差而且容易在三维中出错。用参数 t 的方式逻辑清晰代码短而且 t 本身有几何意义方便后续做判断比如判断投影点是否在线段内。我在团队里做代码审查时看到直接展开坐标的写法都会建议改成参数形式。3.4 浮点数精度那个让你怀疑人生的 1e-7计算几何中最让人头疼的就是浮点数精度。理论上如果点 P 就在直线 AB 上那么投影点应该就是 P 本身。但实际上由于浮点运算的舍入误差算出来的投影点可能和 P 差了一个很小的量。如果你用去判断两个点是否相等几乎肯定会失败。我的经验是永远不要用精确相等来判断浮点数。判断点是否在直线上应该用点到直线的距离是否小于某个阈值。判断投影点是否在线段内应该用 t 是否在 [-epsilon, 1epsilon] 范围内而不是严格的 [0, 1]。这个 epsilon 取多少取决于你的坐标尺度和精度要求。对于一般的图形学应用1e-6 到 1e-9 都有人用。我通常用 1e-9但在坐标值达到 1e6 量级时会放宽到 1e-6。关键是保持一致性整个项目中用同一个 epsilon 定义不要这里用 1e-6 那里用 1e-9。4. 边界情况与退化处理那些让程序崩溃的“特殊情况”4.1 直线退化成点A 和 B 重合这是最常见的退化情况。当 A 和 B 重合时方向向量d是零向量dot(d, d)为零除法会得到 NaN 或无穷大。程序可能不会立刻崩溃但后续使用这个投影点时会出各种奇怪的问题。处理方式很简单在计算 t 之前先判断dot(d, d)是否接近零。如果是直接返回 A或者返回 P取决于你的业务逻辑。这里的选择需要根据实际场景来定如果直线退化成一个点那么“点到直线的投影”在数学上没有定义但在工程上返回那个点本身是最合理的选择。4.2 点就在直线上t 算出来是多少如果点 P 恰好在直线 AB 上那么向量 v P - A 与 d 平行t 算出来应该在 [0, 1] 范围内如果 P 在线段上或者超出这个范围如果 P 在延长线上。投影点就是 P 本身。但由于浮点误差算出来的 Q 可能和 P 有微小差异。如果你需要精确判断“点是否在直线上”应该用距离判断而不是投影点比较。4.3 垂足在线段外钳制逻辑的正确写法前面提到了 t 的钳制。这里再强调一个细节钳制之后投影点变成了线段的端点但此时“投影点”这个说法其实不太准确了——它不再是垂足而是线段上距离 P 最近的点。很多库函数会把这两个概念分开projectPointOnLine返回垂足closestPointOnSegment返回最近点。命名上要清晰避免调用者混淆。我在一个项目中就遇到过这个问题同事调用了“投影点”函数来计算点到线段的距离但没有做钳制结果对于线段外侧的点算出来的距离比实际最短距离小导致碰撞检测漏报。后来我们把函数改名并加了文档说明才避免了类似问题。4.4 三维中的平行与垂直特殊情况更多三维中点到直线的投影公式不变但退化情况更多。比如直线方向向量某个分量为零、点与直线共面但不共线等。这些情况公式本身都能处理不需要特殊分支。唯一需要小心的是零向量判断和浮点精度。另外三维中如果要做点到平面的投影公式会不同。点到平面的投影需要用到平面法向量计算方式是把点沿法向量方向移动到平面上。这个和点到直线的投影是两套不同的逻辑不要混淆。5. 性能优化与工程实践什么时候该自己写什么时候该用库5.1 这个计算有多快一次投影的耗时分析点到直线投影的计算量很小两次向量减法、两次点积、一次除法、一次向量加法。总共大约十几次浮点运算。在现代 CPU 上单次计算通常在纳秒级别。即使处理一百万个点也只需要几毫秒到几十毫秒。所以对于绝大多数应用性能不是瓶颈。你不需要为了省几次乘法而把代码写得晦涩难懂。可读性和正确性远比微小的性能提升重要。5.2 批量计算的优化思路如果你确实需要处理大量点比如百万级可以考虑以下优化预计算直线的dot(d, d)的倒数避免每个点都做一次除法。除法比乘法慢预计算倒数后改用乘法可以提速。如果直线固定、点很多可以把直线的参数A 点和方向向量提前算好循环中只做必要的减法、点积和加法。使用 SIMD 指令并行处理多个点。现代编译器在开启优化后有时能自动向量化简单的循环。如果不行可以手动使用 SIMD 内联函数。但我要提醒一句在优化之前先用性能分析工具确认瓶颈确实在这里。我见过太多人花大力气优化一个只占总耗时 1% 的函数而真正的瓶颈在别处。5.3 什么时候该用现成的几何库如果你的项目已经引入了某个计算几何库比如 CGAL、Eigen、GLM 等直接用库里的投影函数通常更省事。这些库经过了大量测试边界情况处理得更完善而且可能针对特定硬件做了优化。但用库也有代价增加依赖、学习 API、可能引入不必要的复杂度。对于“点到直线投影”这种简单操作如果项目本身没有几何库自己写一个十几行的函数往往比引入一个庞大的库更划算。我的判断标准是如果你只需要这一个操作自己写如果你需要一系列几何操作求交、凸包、三角剖分等用库。5.4 测试用例设计怎么确认你的实现是对的写完投影函数后一定要写测试。我通常会用以下几类测试用例测试场景输入示例预期结果点在直线正上方P(0,1), A(0,0), B(1,0)Q(0,0)点在线段中点上方P(0.5,1), A(0,0), B(1,0)Q(0.5,0)点在线段外侧P(2,1), A(0,0), B(1,0)直线投影 Q(2,0)线段投影 Q(1,0)点就在直线上P(0.5,0), A(0,0), B(1,0)Q(0.5,0)直线退化为点P(1,1), A(0,0), B(0,0)Q(0,0)三维情况P(0,1,0), A(0,0,0), B(1,0,0)Q(0,0,0)这些用例覆盖了正常情况、边界情况和退化情况。每次修改代码后跑一遍能快速发现回归问题。6. 实际项目中的应用场景与踩坑记录6.1 路径匹配把 GPS 点投影到道路上这是我最常遇到的应用场景。用户的位置点需要匹配到最近的道路线段上用来做导航纠偏或轨迹分析。这里的“道路”通常是一系列线段组成的折线需要对每条线段做投影然后取距离最小的那个。踩过的坑一开始只做了点到直线的投影没有做线段钳制导致远离道路端点的点被投影到了道路延长线上距离计算偏小系统误判为“在道路上”。后来改成点到线段的最近点计算问题解决。另一个坑是当两条道路交叉时交叉点附近的点可能被投影到任意一条道路上导致匹配结果不稳定。解决方案是加入方向约束如果用户有移动方向优先匹配方向一致的道路。6.2 碰撞检测判断球体是否碰到墙壁在简单的物理引擎中球体与墙壁的碰撞可以简化为“球心到墙壁线段的距离是否小于半径”。这里需要计算球心到线段的最近点然后比较距离。如果最近点距离小于半径说明发生了碰撞碰撞法线就是最近点到球心的方向。这个场景中投影点的计算频率很高每帧都要算所以性能有一定要求。我的优化方式是预计算墙壁线段的参数避免重复计算方向向量和点积。6.3 图形学中的射线与平面求交虽然这篇文章主要讲点到直线的投影但射线与平面的求交在本质上用到了类似的思想。射线可以看作从原点出发的直线平面可以用法向量和一点表示。求交的过程就是把射线方向投影到法向量上计算参数 t。这个场景中退化情况是射线与平面平行方向向量与法向量垂直此时点积为零没有交点。处理方式和点到直线投影中的退化判断类似。6.4 机器学习中的超平面投影在支持向量机等算法中需要计算数据点到超平面的距离。超平面可以表示为 w·x b 0点到超平面的投影点可以通过类似的方式计算。虽然公式形式不同但核心思想一致找到超平面上距离给定点最近的点。这个场景中维度可能很高几十到几百维但计算量仍然是 O(n) 的其中 n 是维度。高维情况下浮点误差的累积更明显需要更小心地选择 epsilon。7. 几个容易被忽略的细节与我的个人建议7.1 参数 t 的几何意义再强调t 不仅仅是一个中间变量它有明确的几何意义t 表示投影点在线段上的归一化位置。t0 表示在 A 点t1 表示在 B 点t0.5 表示在中点。这个意义在调试时非常有用如果你算出来的 t 是 100 或者 -50说明投影点远远超出了线段范围很可能是输入数据有问题。7.2 坐标系的选择会影响结果吗理论上投影点的位置与坐标系无关因为它是几何不变量。但在数值计算中坐标系的选择会影响浮点误差的大小。如果坐标值很大比如地理坐标建议先做平移把直线的一个端点移到原点附近再计算投影最后平移回去。这样可以减小浮点误差。7.3 单位向量的简化作用如果直线方向向量是单位向量模长为1那么dot(d, d) 1t 的计算简化为dot(v, d)。这可以省去一次除法和一次点积。在性能敏感的场景中可以先把方向向量归一化然后使用简化公式。但要注意归一化本身也有计算成本如果只算一次投影可能不划算如果对同一条直线算很多次投影预归一化就很有价值。7.4 我的个人经验总结最后分享几条我在实际项目中总结的经验第一永远不要假设输入是合法的。直线端点重合、点坐标是 NaN、方向向量为零这些情况都要处理。防御性编程在几何计算中不是过度设计而是必要措施。第二写测试用例时除了正常情况一定要覆盖退化情况和边界情况。我见过太多 bug 是在点恰好落在线段端点附近时出现的。第三如果项目中有多处用到投影计算把它封装成一个独立的、经过充分测试的函数而不是到处复制粘贴。复制粘贴的代码在修改时容易漏改导致行为不一致。第四文档中要明确说明函数的行为是投影到直线还是线段退化时返回什么精度如何这些信息对调用者非常重要。第五如果使用第三方库先写一个小 demo 验证它的行为是否符合你的预期。不同库对退化情况的处理方式可能不同有的返回 NaN有的抛异常有的返回端点。提前搞清楚避免在生产环境中被意外行为坑到。

相关新闻

AI芯片选型指南:从57种到120多种,如何避开参数陷阱

AI芯片选型指南:从57种到120多种,如何避开参数陷阱

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:48:56 阅读更多 →
Windows下用Vagrant打造可复现的Linux开发环境

Windows下用Vagrant打造可复现的Linux开发环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:48:56 阅读更多 →
SpringBoot整合Gateway与Feign的踩坑指南与高可用实践

SpringBoot整合Gateway与Feign的踩坑指南与高可用实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:48:56 阅读更多 →

最新新闻

三步跑通微信AI自动回复机器人:wechat-bot新手配置教程

三步跑通微信AI自动回复机器人:wechat-bot新手配置教程

三步跑通微信AI自动回复机器人:wechat-bot新手配置教程 【免费下载链接】wechat-bot 🤖 Multi-platform IM AI Agent for Telegram, WhatsApp, Lark, and WeChat. Connects ChatGPT / Claude / Kimi / DeepSeek / Ollama / Pi for auto-replies, communi…

2026/10/14 20:28:47 阅读更多 →
AI Agent架构从零搭建:后端工程师的踩坑与实操指南

AI Agent架构从零搭建:后端工程师的踩坑与实操指南

1. 从零理解AI Agent架构:一个后端工程师的踩坑式学习笔记最早接触AI Agent这个词,是在一个内部技术分享会上。当时有人演示了一个能自动查资料、写代码、跑测试、再根据报错自我修正的流程,台下不少人第一反应是“这不就是个高级脚本吗”。但…

2026/10/14 20:28:47 阅读更多 →
前端环境搭建避坑指南:从版本选型到联调配置全解析

前端环境搭建避坑指南:从版本选型到联调配置全解析

简介:苍穹外卖前端环境搭建笔记,面向正在学习或开发苍穹外卖项目的开发者,聚焦前端启动环节中高频出现的 Nginx 启动失败问题。文档以真实报错为切入点,指出即使未改动任何配置,仅双击 nginx.exe 也可能因安装目录含中…

2026/10/14 20:28:47 阅读更多 →
LaTeX-Workshop 多根目录工作区(Multi-root Workspace)实战指南:配置、根文件探测与编译流程

LaTeX-Workshop 多根目录工作区(Multi-root Workspace)实战指南:配置、根文件探测与编译流程

开发工具IDE 【免费下载链接】LaTeX-Workshop Boost LaTeX typesetting efficiency with preview, compile, autocomplete, colorize, and more. 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX-Workshop 点击查看 免费下载 导读 本文围绕 LaTeX-Workshop 仓…

2026/10/14 20:28:47 阅读更多 →
IconPark Vue3 图标库实战指南:@icon-park/vue-next 的安装、四种主题定制与按需加载

IconPark Vue3 图标库实战指南:@icon-park/vue-next 的安装、四种主题定制与按需加载

前端UI组件 【免费下载链接】IconPark 🍎Transform an SVG icon into multiple themes, and generate React icons,Vue icons,svg icons 项目地址: https://gitcode.com/gh_mirrors/ico/IconPark 点击查看 免费下载 本篇技术指南…

2026/10/14 20:28:46 阅读更多 →
学术codex应用场景与核心价值解析

学术codex应用场景与核心价值解析

刚接触一个新领域,最怕的就是迷失在海量的外国文献里,读了很多篇还是理不清脉络。我曾经也以为“研究现状”只能靠逐篇阅读、手动总结,直到发现了一些能生成“知识图谱”的神器。它们能让你像开了上帝视角一样,瞬间看清一个领域的…

2026/10/14 20:27:46 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →