集团新闻

两段骨骼怎样在平面上够到指定目标:状态推演第02例

2026-11-12

由两段固定长度组成的手臂,末端不能够到平面上的任意点。先判断目标距离,再计算可能的肘部位置,可以把可达性和选择弯曲方向分开处理。

先把规则写清楚

根部在原点,长度分别为L1与L2,目标距离为d。只有两长度差的绝对值不大于d且d不大于两长度之和时可达。目标方向上肘部投影距离a为(L1平方减L2平方加d平方)除以2d,垂直偏移h为L1平方减a平方的平方根。

本例输入与推演结果

七组独立骨骼长度与目标位置。原点重合、边界重合和一般两解情况分别记录。

长度、目标 | 状态 | 肘部坐标 {'lengths': [6, 6], 'target': [0, 0]} | 无限多个 | [] {'lengths': [7, 5], 'target': [12, 0]} | 边界重合 | [[7.0, 0.0], [7.0, 0.0]] {'lengths': [6, 2], 'target': [4, 0]} | 边界重合 | [[6.0, 0.0], [6.0, 0.0]] {'lengths': [5, 3], 'target': [-6, -3]} | 两个候选 | [[-3.136314, -3.894038], [-4.997019, -0.172629]] {'lengths': [5, 3], 'target': [3, 9]} | 不可达 | [] {'lengths': [3, 3], 'target': [-4, 9]} | 不可达 | [] {'lengths': [2, 2], 'target': [0, -4]} | 边界重合 | [[0.0, -2.0], [0.0, -2.0]]

这里的编号只用来辨认本例中的对象,不能当成另一份记录里的固定身份。阅读表格时先找到输入,再顺着运算顺序对照输出;空列表、零值和不存在的结果有不同含义,不能混用。表中分数保留精确值,小数显示仅为阅读方便。

怎样自己复核

肘部为目标单位方向乘a,再加或减垂直单位方向乘h。逐个检查根部到肘部距离等于第一段长度、肘部到目标距离等于第二段长度。完全伸直或折叠到边界时,两候选可能重合。

选择正侧或负侧弯曲应保持明确的约定,而不是每帧随机选一个。无解目标可以另行设计投影到可达范围的策略,但投影后的末端已经不在原目标处,必须区分近似展示与真正满足原长度条件的解。

适用范围

目标与根部重合且两段等长时有无穷多个肘部位置,本例单独报告这种退化情况;两段不等长时原点不可达。本例没有关节角限制、障碍、三维扭转或动画平滑,也不自动拉伸骨骼。

本例是一套可复现的游戏机制练习,不依赖具体品牌或某个软件的默认设置。修改任何边界约定、输入参数或操作顺序后,应重新推演并保存中间状态。发现差异时先定位第一处不一致,再判断是规则不同还是计算错误,不要只把最终答案调整到看起来相同。