几何距离计算全解析:从点到线段的算法实现与性能优化
1. 项目概述从基础到实战的距离计算全解析在图形学、游戏开发、机器人路径规划甚至是UI交互设计里距离计算都是一个绕不开的底层基石。我们经常需要判断一个点离另一个点有多远一个角色离一堵墙有多近或者两个物体是否即将发生碰撞。这些看似简单的需求背后都依赖于一套精确且高效的几何距离计算法则。今天我们就来彻底拆解这个核心工具箱两点间距离、点到直线距离、点到线段距离以及线段到线段距离。这不仅仅是背几个公式更重要的是理解它们在不同场景下的应用、潜在的陷阱以及如何写出既正确又高性能的代码。无论你是刚入门的新手还是需要优化底层算法的老手这套“距离四件套”都能让你在处理空间关系时更加得心应手。2. 核心概念与数学原理拆解在动手写代码之前我们必须先夯实数学基础。理解公式背后的几何意义远比死记硬背更重要这能帮助我们在遇到边界情况或性能瓶颈时找到正确的优化方向。2.1 两点间距离一切的开端两点间距离公式即欧几里得距离是我们最熟悉的。对于平面上的两点P1(x1, y1)和P2(x2, y2)其距离d为d sqrt((x2 - x1)^2 (y2 - y1)^2)这个公式来源于勾股定理直观地表示了两点间的“直线”长度。为什么是平方和再开方这确保了距离的非负性和对称性并且符合我们在现实世界中对于“最短路径”的认知。在三维或更高维空间公式可以自然地扩展为各维度差值的平方和再开方。注意性能考量。开平方根运算sqrt()在计算机中是一个相对昂贵的操作。在只需要比较距离大小例如找出离玩家最近的敌人而不需要确切数值时通常会比较距离的平方(dx*dx dy*dy)从而避免开销巨大的开方运算。这是游戏开发中的一个经典优化技巧。2.2 点到直线距离垂直最短的几何体现点到直线的距离定义为该点到直线上任意一点连线的最小长度而这个最短连线必然垂直于该直线。 给定直线L由其上一点P0和法向量n或方向向量d定义以及点P距离计算公式为d |(P - P0) · n| / ||n||其中·表示点积||n||是法向量的长度。如果直线由一般式Ax By C 0表示则点(x, y)到直线的距离为d |Ax By C| / sqrt(A^2 B^2)核心理解公式的分子|Ax By C|的绝对值本质上是将点坐标代入直线方程后得到的“有向距离”。分母是直线法向量(A, B)的模长用于将其归一化为真正的几何距离。这个公式的美妙之处在于它统一地处理了点在直线的哪一侧的问题通过绝对值。2.3 点到线段距离边界条件的艺术这是第一个容易出现bug的地方。点到线段的距离不再是简单的垂直距离。因为线段有起点A和终点B是有限的。点P到线段AB的距离需要分三种情况讨论最近点为线段起点A当点P在线段AB所在直线上的投影点落在线段起点A的“外侧”即靠近A的延长线上。此时最近距离就是|PA|。最近点为线段终点B同理当投影点落在线段终点B的外侧。此时最近距离是|PB|。最近点为投影点本身当投影点落在线段AB内部。此时最近距离就是点P到直线AB的垂直距离。如何判断投影点的位置我们可以利用向量点积。设向量AP P - AAB B - A。计算点积t AP · AB / (AB · AB)。这个t就是投影点在线段AB上的参数化位置0代表A点1代表B点。若t 0则属于情况1最近点为A。若t 1则属于情况2最近点为B。若0 ≤ t ≤ 1则属于情况3投影点C A t * AB即为最近点距离为|PC|。2.4 线段到线段距离空间关系的复杂判断这是最复杂的一种情况。两条线段AB和CD之间的距离定义为它们各自上任意两点之间距离的最小值。这个最小值可能出现在一条线段的端点到另一条线段上即情况3的复用。两条线段的端点之间即情况1的复用。两条线段本身相交距离为0。因此计算线段到线段距离不能简单地套用点到线段公式两次。一个稳健的算法通常遵循以下步骤快速排斥实验检查两条线段的外接矩形是否相交。这是一个非常廉价的运算可以快速排除很多显然不相交的情况避免进入复杂的计算。跨立实验判断两条线段是否相交。这可以通过计算叉积来判断每条线段是否“跨立”在另一条线段所在直线的两侧。如果相互跨立则线段相交距离为0。计算端点-线段距离如果未相交则分别计算线段AB的端点A、B到线段CD的距离以及线段CD的端点C、D到线段AB的距离。这四种距离中的最小值即为两条线段的最短距离。3. 算法实现与代码实战理解了原理我们来看看如何用代码这里以Python为例实现它们。我会提供清晰、健壮的实现并附上关键注释。3.1 两点间距离实现import math def distance_point_to_point(p1, p2): 计算两点之间的欧几里得距离。 参数: p1, p2 - 元组 (x, y) 返回: 距离 (float) dx p2[0] - p1[0] dy p2[1] - p1[1] return math.sqrt(dx*dx dy*dy) def distance_squared_point_to_point(p1, p2): 计算两点之间距离的平方。用于距离比较避免开方。 参数: p1, p2 - 元组 (x, y) 返回: 距离的平方 (float) dx p2[0] - p1[0] dy p2[1] - p1[1] return dx*dx dy*dy3.2 点到直线距离实现这里我们采用向量法因为它更通用易于扩展到三维。def distance_point_to_line(point, line_point, line_dir): 计算点到直线的距离向量法。 参数: point: 目标点 (x, y) line_point: 直线上的一个点 (x, y) line_dir: 直线的方向向量 (dx, dy) 返回: 距离 (float) # 将点转换为相对于直线上点的向量 ap (point[0] - line_point[0], point[1] - line_point[1]) # 计算方向向量的法向量 (垂直于方向向量) # 对于二维向量(dx, dy)一个法向量是(-dy, dx) norm (-line_dir[1], line_dir[0]) # 计算点积的绝对值再除以法向量的模长 dot_product abs(ap[0] * norm[0] ap[1] * norm[1]) norm_length math.sqrt(norm[0]*norm[0] norm[1]*norm[1]) # 避免除零错误如果方向向量为零向量则直线定义无效 if norm_length 0: return math.sqrt(ap[0]*ap[0] ap[1]*ap[1]) # 退化为点到点距离 return dot_product / norm_length3.3 点到线段距离实现这是核心函数包含了之前讨论的三种情况。def distance_point_to_segment(point, seg_start, seg_end): 计算点到线段的最短距离并返回最近点坐标。 参数: point: 目标点 P (x, y) seg_start: 线段起点 A (x, y) seg_end: 线段终点 B (x, y) 返回: (distance, closest_point) # 将点转换为向量 A seg_start B seg_end P point AB (B[0] - A[0], B[1] - A[1]) AP (P[0] - A[0], P[1] - A[1]) BP (P[0] - B[0], P[1] - B[1]) # 计算线段长度的平方和参数 t ab2 AB[0]*AB[0] AB[1]*AB[1] # 如果线段退化为一个点 if ab2 0: dist math.sqrt(AP[0]*AP[0] AP[1]*AP[1]) return dist, A ap_dot_ab AP[0]*AB[0] AP[1]*AB[1] t ap_dot_ab / ab2 # 根据参数 t 判断最近点 if t 0.0: # 最近点是起点A dist math.sqrt(AP[0]*AP[0] AP[1]*AP[1]) closest A elif t 1.0: # 最近点是终点B dist math.sqrt(BP[0]*BP[0] BP[1]*BP[1]) closest B else: # 投影点在线段内部 # 计算投影点坐标 C A t * AB Cx A[0] t * AB[0] Cy A[1] t * AB[1] closest (Cx, Cy) # 计算距离 PC PCx P[0] - Cx PCy P[1] - Cy dist math.sqrt(PCx*PCx PCy*PCy) return dist, closest3.4 线段到线段距离实现结合快速排斥和跨立实验构建一个完整的解决方案。def cross_product(v1, v2): 二维向量叉积结果是一个标量z轴分量 return v1[0] * v2[1] - v1[1] * v2[0] def is_segments_intersect(A, B, C, D): 判断线段AB和CD是否相交使用跨立实验。 返回: True 如果相交否则 False。 def on_segment(p, q, r): 判断点q是否在线段pr上假设q在直线pr上 return (min(p[0], r[0]) q[0] max(p[0], r[0]) and min(p[1], r[1]) q[1] max(p[1], r[1])) # 计算向量 AB (B[0] - A[0], B[1] - A[1]) AC (C[0] - A[0], C[1] - A[1]) AD (D[0] - A[0], D[1] - A[1]) CD (D[0] - C[0], D[1] - C[1]) CA (A[0] - C[0], A[1] - C[1]) CB (B[0] - C[0], B[1] - C[1]) # 计算叉积 d1 cross_product(AB, AC) # AB x AC d2 cross_product(AB, AD) # AB x AD d3 cross_product(CD, CA) # CD x CA d4 cross_product(CD, CB) # CD x CB # 跨立实验 if ((d1 0 and d2 0) or (d1 0 and d2 0)) and \ ((d3 0 and d4 0) or (d3 0 and d4 0)): return True # 处理共线或端点相交的特殊情况 if d1 0 and on_segment(A, C, B): return True if d2 0 and on_segment(A, D, B): return True if d3 0 and on_segment(C, A, D): return True if d4 0 and on_segment(C, B, D): return True return False def distance_segment_to_segment(seg1_start, seg1_end, seg2_start, seg2_end): 计算两条线段之间的最短距离。 参数: 两条线段的起点和终点。 返回: 最短距离 (float)。 A, B seg1_start, seg1_end C, D seg2_start, seg2_end # 第一步快速排斥实验检查外接矩形是否重叠 if (max(A[0], B[0]) min(C[0], D[0]) or min(A[0], B[0]) max(C[0], D[0]) or max(A[1], B[1]) min(C[1], D[1]) or min(A[1], B[1]) max(C[1], D[1])): # 外接矩形不相交直接进入端点距离计算 pass # 跳过相交判断直接计算端点距离 else: # 第二步跨立实验判断是否相交 if is_segments_intersect(A, B, C, D): return 0.0 # 线段相交距离为0 # 第三步计算所有端点-线段距离取最小值 # 计算 seg1 端点到 seg2 的距离 dist1, _ distance_point_to_segment(A, C, D) dist2, _ distance_point_to_segment(B, C, D) # 计算 seg2 端点到 seg1 的距离 dist3, _ distance_point_to_segment(C, A, B) dist4, _ distance_point_to_segment(D, A, B) return min(dist1, dist2, dist3, dist4)4. 应用场景与实战技巧理解了算法我们来看看它们在实际项目中如何大显身手。不同的场景对精度和性能的要求天差地别。4.1 游戏开发碰撞检测与AI感知在游戏里距离计算无处不在。碰撞检测对于简单的圆形或矩形碰撞两点距离与半径和比较或点到线段距离判断角色与墙壁是基础。distance_segment_to_segment可以用于判断两个挥舞的武器是否相交。AI行为敌人的视野和听觉范围。点到点距离平方的快速比较可以高效筛选出一定范围内的玩家。点到线段距离可以用于判断玩家是否在敌人的“巡逻路径”附近。运动与寻路在网格或导航网格寻路中点到线段距离可以帮助角色进行路径跟随Steering Behavior保持沿着路径移动而不偏离。实操心得在游戏的主循环中距离计算可能每帧执行成千上万次。务必进行层级优化空间划分使用四叉树、网格或BVH包围盒层次结构来快速剔除明显不相关的物体避免全图遍历计算距离。距离平方如非必要绝不使用sqrt()。比较距离时永远比较平方值。近似计算在某些对精度要求不高的场合如远距离物体可以使用曼哈顿距离或切比雪夫距离作为快速近似它们的计算只涉及加减法和取绝对值速度快得多。4.2 图形学与UI交互选中与吸附图形编辑软件判断鼠标点击是否选中了一条线点到线段距离小于某个阈值或者是否靠近线的端点以便进行吸附操作。distance_point_to_segment函数返回的closest_point在这里极其有用可以直接作为吸附的目标位置。UI拖拽与连线在流程图、思维导图工具中判断连接线的终点应该吸附到哪个图形节点的哪个端口本质上也是点到线段或点到矩形边距离的计算。4.3 机器人学与路径规划避障与轨迹评估避障机器人通过传感器如激光雷达获取周围障碍物的点云。计算机器人当前位置或未来预测位置到这些障碍点形成的线段或连续点构成的轮廓的距离是避障算法的核心。distance_point_to_segment在这里被频繁调用。轨迹平滑度评估一条规划好的路径可以通过计算路径上连续线段之间的夹角或距离变化来评估其平滑度。过于尖锐的拐角线段夹角小或过于密集的路径点线段距离短可能不利于机器人执行。5. 常见陷阱、数值稳定性与优化即使算法看起来完美在计算机的浮点数世界里和极端情况下依然暗藏杀机。5.1 浮点数精度与比较误差这是所有几何计算的头号敌人。问题判断t 0或t 1时由于浮点数误差一个理论上正好等于0或1的t值计算出来可能是-1e-15或1.0000000000000002。这可能导致最近点被错误地判断为端点而非投影点虽然距离误差极小但在某些对连续性要求高的场景如物理模拟可能引发问题。解决方案引入一个微小的容差epsilon。EPSILON 1e-10 if t -EPSILON: # 属于起点外侧 elif t 1.0 EPSILON: # 属于终点外侧 else: # 将t钳制在[0, 1]区间内处理-eps t 1eps的情况 t_clamped max(0.0, min(1.0, t)) # 用t_clamped计算投影点同样在判断叉积是否为0共线时也应使用abs(cross_product) EPSILON来代替 0。5.2 退化情况处理零长度线段当线段起点和终点重合时AB向量为零向量。在distance_point_to_segment中如果不做检查计算t ap_dot_ab / ab2会导致除零错误。我们的代码中已经处理了ab2 0的情况将其退化为点到点距离。平行或共线线段在distance_segment_to_segment中如果两条线段平行或共线但不相交跨立实验会判定为不相交然后通过计算端点-线段距离得到正确的最小距离。这是正确的但计算了四次点到线段距离。对于已知大量线段平行的情况可以有更优化的专门算法但通用函数这样处理是稳妥的。5.3 性能优化进阶当需要处理海量线段时如数万条即使有空间划分底层距离函数的微优化也至关重要。内联函数将distance_point_to_segment这样的核心函数内联到distance_segment_to_segment中避免函数调用开销。在C中可以使用inline关键字。提前终止在计算四个端点-线段距离求最小值时可以记录当前最小值min_dist。在计算后续距离时如果发现某项距离的平方已经大于min_dist的平方则可以提前终止该次计算因为最终距离只会更小或相等。使用SIMD指令在现代CPU上可以使用SSE、AVX等SIMD指令集同时对多个点的坐标数据进行并行计算大幅提升吞吐量。这对于点云处理等场景是终极优化手段。6. 测试用例与调试方法写出代码只是第一步用全面的测试用例验证其正确性至关重要。以下是一些必须测试的边界情况测试场景描述验证点点到线段投影点在线段中点距离应为垂直距离最近点为投影点投影点在起点左侧距离应为到起点的距离最近点为起点投影点在终点右侧距离应为到终点的距离最近点为终点点与线段起点重合距离应为0最近点为起点线段退化为点应正确处理退化为点到点距离线段到线段两条线段相交距离应为0两条线段平行且分离距离应为端点-线段距离之一两条线段共线且部分重叠距离应为0两条线段共线但分离距离应为端点-端点距离其中一条线段退化为点应退化为点到线段距离通用所有坐标值为负确保计算过程符号正确坐标值非常大测试浮点数精度是否导致溢出或严重误差一个简单的测试方法是为每个函数编写单元测试使用已知的几何关系例如勾股定理构成的直角三角形来验证计算结果。对于随机测试可以生成大量随机线段和点用另一种可靠但可能较慢的方法如暴力枚举线段上采样点进行结果比对。我自己在实现这些函数后会习惯性地先跑一遍这些边界用例确保在“奇怪”的输入下程序不会崩溃并且返回的结果在物理意义上是合理的。例如距离永远是非负的最近点应该确实在线段上或其延长线的端点处。花在编写测试上的时间会在后续集成到大型项目中时以减少调试时间的形式加倍回报回来。

相关新闻

图解大语言模型:从Transformer到RAG与Agent的认知图谱构建

图解大语言模型:从Transformer到RAG与Agent的认知图谱构建

1. 项目概述:为什么我们需要“图”解LLM?如果你最近在关注AI,尤其是大语言模型,可能会被各种术语淹没:Transformer架构、注意力机制、微调、RAG、Agent……这些概念单独理解已经不易,更别说理清它们之间千丝…

2026/8/15 22:04:04 阅读更多 →
Arch Linux开机网络故障排查与中文社区软件源配置指南

Arch Linux开机网络故障排查与中文社区软件源配置指南

1. 问题引入:当Arch Linux在开机后“失联”如果你刚完成Arch Linux的安装,满怀期待地重启,准备大展拳脚,却发现屏幕右下角的网络图标是个红叉,或者ping archlinux.org毫无反应,别慌,这几乎是每个…

2026/8/15 22:04:04 阅读更多 →
小白吃透DeepSeek Harness:新一代AI Agent框架保姆级实战教程

小白吃透DeepSeek Harness:新一代AI Agent框架保姆级实战教程

小白吃透DeepSeek Harness:新一代AI Agent框架保姆级实战教程 大家好,我是黒漂技术佬! 最近AI圈又出重磅开源项目,DeepSeek官方全新推出的DeepSeek Harness一经开源就刷屏技术圈。很多新手小伙伴一脸懵:这到底是新大模…

2026/8/15 22:04:04 阅读更多 →

最新新闻

还在为Wand专业版续费?试试这款开源增强器,解锁Pro还送手机遥控

还在为Wand专业版续费?试试这款开源增强器,解锁Pro还送手机遥控

还在为Wand专业版续费?试试这款开源增强器,解锁Pro还送手机遥控 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 晚上想开两…

2026/8/15 22:45:30 阅读更多 →
破解物理AI技术困局(33):TVA达成意图预判与主动配合

破解物理AI技术困局(33):TVA达成意图预判与主动配合

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它融合深度强化学习(DRL)、卷积神经…

2026/8/15 22:45:30 阅读更多 →
AI Agent白手起家74: CrewAI 核心组件详解——从智能体到知识库

AI Agent白手起家74: CrewAI 核心组件详解——从智能体到知识库

纲要 组件概览:Agent、Task、Crew、Flow、Knowledge、MemoryAgent:团队中的最小执行单元 YAML 配置化定义纯代码定义运行代码与工具集成 Task:智能体的工作任务 配置与依赖关系结构化输出 Crew:组建专业团队 配置式与代码式两种风…

2026/8/15 22:45:30 阅读更多 →
AI Agent白手起家75: 使用 CrewAI 构建游戏开发助手

AI Agent白手起家75: 使用 CrewAI 构建游戏开发助手

纲要 项目背景与目标系统架构与流程 团队组成:高级工程师、QA工程师、首席QA工作流:编码 → 审查 → 评估 项目结构核心实现:Agent、Task、Crew 的定义完整可运行示例 纯代码定义,无需外部配置文件生成贪吃蛇游戏 运行与效果展示总…

2026/8/15 22:45:30 阅读更多 →
Grok Bot AI智能体团队:24/7自动化工作流部署与集成实践

Grok Bot AI智能体团队:24/7自动化工作流部署与集成实践

这次我们来看一个名为Grok Bot的 AI 智能体项目。它不是单个聊天机器人,而是一个宣称能 24/7 全天候工作的“AI 智能体团队”。简单来说,你可以把它理解为一套自动化的工作流系统,由多个具备不同技能的 AI 智能体(Agent&#xff0…

2026/8/15 22:45:30 阅读更多 →
10 万亿参数大模型,注定要被关进笼子里

10 万亿参数大模型,注定要被关进笼子里

它能行的善与恶都将超出人类想象。 OpenAI即将发布的GPT-6,传闻称它的参数量高达10万亿。 10万亿是一个非常恐怖的概念。现如今,全球顶尖大模型的参数量都在“万亿”级别。比如阿里的Qwen 3.8为3.5万亿,Kimi K3为2.8万亿,字节内…

2026/8/15 22:44:30 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/15 12:59:14 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →