You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求解两不同斜率直线间正方形对齐的水平与垂直偏移量(基于交点)

求解两不同斜率直线间正方形对齐的水平与垂直偏移量(基于交点)

兄弟我太懂这种卡了好几个小时的感觉了——明明感觉答案就在眼皮子底下,就是绕不出来,太闹心了😂 咱们一步步来拆解这个问题,把h3和v3的代数表达式推出来。

首先先把咱们手里的已知量再理一遍,避免混淆:

  • (xi, yi):两条斜坡的交点坐标
  • ha:玩家的水平锚点(也就是半宽,玩家中心到左右边缘的水平距离)
  • va:玩家的垂直锚点(半高,中心到上下边缘的垂直距离)
  • h1, v1:玩家完全贴合第一条斜坡时,中心相对于交点的水平/垂直偏移
  • h2, v2:玩家完全贴合第二条斜坡时,中心相对于交点的水平/垂直偏移
  • θ1, θ2:两条斜坡的角度(咱们可以把它转成斜率m = tan(θ * π/180),或者用已知的h1/v1、h2/v2直接推导斜率,更方便)

核心思路

玩家要“卡”在两条斜坡之间,意味着它的两个边缘会分别贴合在两条斜坡上。这里分两种常见的贴合情况,咱们分别推导:


情况1:玩家上下边缘分别贴合两条斜坡

假设玩家的下边缘贴第一条斜坡,上边缘贴第二条斜坡。

首先,从h1, v1推导第一条斜坡的斜率m1:当玩家贴合第一条斜坡时,下边缘的y坐标是yi + v1 - va,这个点同时在第一条斜坡上,代入直线方程(以交点(xi, yi)为原点偏移)可得:
v1 - va = m1 * h1 → 所以 m1 = (v1 - va) / h1

同理,从h2, v2推导第二条斜坡的斜率m2:上边缘的y坐标是yi + v2 + va,代入第二条斜坡方程:
v2 + va = m2 * h2 → 所以 m2 = (v2 + va) / h2

现在,当玩家卡在两条斜坡之间时,中心坐标是(xi + h3, yi + v3),此时上下边缘分别满足两条斜坡的方程:

  1. 下边缘:yi + v3 - va = m1 * h3 + yi → 化简得 v3 - va = m1 * h3
  2. 上边缘:yi + v3 + va = m2 * h3 + yi → 化简得 v3 + va = m2 * h3

把这两个方程联立求解,就能得到h3和v3:

h3 = 2 * va * h1 * h2 / [ h1*(v2 + va) - h2*(v1 - va) ]
v3 = va * [ h2*(v1 - va) + h1*(v2 + va) ] / [ h1*(v2 + va) - h2*(v1 - va) ]

情况2:玩家左右边缘分别贴合两条斜坡

如果是玩家的左边缘贴第一条斜坡,右边缘贴第二条斜坡,推导逻辑类似:

先从贴合状态推导斜率:

  • 左边缘贴合第一条斜坡时,接触点坐标是(xi + h1 - ha, yi + v1 + va),代入斜坡方程得:v1 + va = m1*(h1 - ha) → m1 = (v1 + va)/(h1 - ha)
  • 右边缘贴合第二条斜坡时,接触点坐标是(xi + h2 + ha, yi + v2 - va),代入斜坡方程得:v2 - va = m2*(h2 + ha) → m2 = (v2 - va)/(h2 + ha)

联立左右边缘贴合两条斜坡的方程:

  1. 左边缘:v3 + va = m1*(h3 - ha)
  2. 右边缘:v3 - va = m2*(h3 + ha)

求解后得到:

h3 = [ ha*(m1 + m2) + 2*va ] / (m1 - m2)

把m1和m2替换成已知变量的表达式:

h3 = [ ha*((v1+va)/(h1-ha) + (v2-va)/(h2+ha)) + 2*va ] / [ (v1+va)/(h1-ha) - (v2-va)/(h2+ha) ]

对应的v3:

v3 = [ 2*m1*m2*ha + va*(m1 + m2) ] / (m1 - m2)

同样替换m1和m2即可得到全已知变量的表达式。

代码里的注意事项

  • 记得把角度转成弧度再计算正切(如果直接用角度的话),比如m1 = tan(θ1 * math.pi / 180)
  • 要注意分母为0的情况(两条斜坡平行),这种时候玩家没法卡在中间,得加个判断分支

备注:内容来源于stack exchange,提问作者CardinalCoder64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:39:51