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

限制射线不越过平面:鼠标命中点不超原点位置方案求助

鼠标命中点不越过原点的解决方案

核心逻辑

先判断鼠标命中点是否跑到原点的另一侧,越界了就把它拉回原点或限制在原点边界;没越界就正常使用。

具体操作步骤

  • 计算鼠标命中点(记为P)到原点(记为O)的向量:vec = P - O
  • 选一个代表「允许区域方向」的向量(比如你希望只能在原点右上侧,就选(1,1),按需调整),记为dir
  • 计算vec和dir的点积:dot = vec.x * dir.x + vec.y * dir.y
  • 若dot < 0,说明命中点已越过原点进入禁止区域,直接把命中点改成原点即可;想要平滑效果的话,也可以设为极靠近原点的同方向点
  • 若dot >= 0,说明命中点在允许范围内,无需改动

伪代码示例

// 假设原点坐标是(0,0),鼠标当前命中点为mousePos
vec_x = mousePos.x - 0
vec_y = mousePos.y - 0
// 这里假设允许区域是原点右侧(x正方向),可按需替换dir
dir_x = 1
dir_y = 0

dot_product = vec_x * dir_x + vec_y * dir_y

if dot_product < 0:
    // 越界后修正为原点
    mousePos = (0, 0)
    // 若要保留方向:
    // length = sqrt(vec_x*vec_x + vec_y*vec_y)
    // if length > 0:
    //     mousePos = (vec_x/length * 0.001, vec_y/length * 0.001)

对你原有思路的问题分析

你之前的计算逻辑是P - (单位向量 * 模长),结果直接等于原点,但没有提前判断是否越界,等于不管情况如何都把点拉到原点,自然达不到预期。得先判断点是否越界,再决定要不要执行修正。

内容的提问来源于stack exchange,提问作者anata0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:30:59