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

求实现鼠标越靠近中心返回值越大的函数(现有代码效果不佳)

优化鼠标靠近屏幕中心时的数值递增逻辑

我明白你的问题了——你想要实现一个随鼠标靠近屏幕中心而递增的数值,但当前的实现因为用了X/Y方向到边缘距离的线性相加,导致空间上的变化不够均匀(比如对角线和轴线上“感觉”离中心距离差不多的位置,数值却一样),咱们来优化一下:

先分析现有代码的问题

你当前的代码逻辑是计算鼠标到最近屏幕边缘的距离之和,再映射到目标数值。这会出现不符合直觉的情况:

  • 比如鼠标在屏幕边缘的中点((0, height/2)),和在距离中心1/4宽高的位置((width/4, height/4)),两者的posX+posY都是1,速度相同,但实际上后者离中心更近,应该有更大的速度才对。

正确的实现方案

核心思路是基于鼠标到屏幕中心的直线距离来计算,这样能保证空间上的变化均匀自然,同时可以轻松调整变化曲线。

基础线性版本(适配p5.js环境)

// 计算屏幕中心坐标
const centerX = width / 2;
const centerY = height / 2;

// 计算鼠标到中心的直线距离
const distanceToCenter = dist(mouseX, mouseY, centerX, centerY);

// 计算屏幕的最大可能距离(中心到角落的距离)
const maxDistance = dist(0, 0, centerX, centerY);

// 映射距离到速度:距离越近(值越小),速度越大
const speed = map(distanceToCenter, 0, maxDistance, 30, 0);

非线性版本(可选,调整变化曲线)

如果想要靠近中心时数值增长更快,或者远离时衰减更平缓,可以用平方/平方根来调整映射关系:

// 先把距离归一化到 0-1 范围
const normalizedDistance = distanceToCenter / maxDistance;

// 平方放大:靠近中心时增长更迅猛
const speed = map(normalizedDistance ** 2, 0, 1, 30, 0);

// 平方根平缓:整体变化更柔和
// const speed = map(Math.sqrt(normalizedDistance), 0, 1, 30, 0);

为什么这个方案更好

  • 基于直线距离的计算,保证了所有到中心距离相同的点,返回的数值完全一致,空间变化更符合直觉;
  • 可以通过调整映射的范围(比如把30换成你需要的最大值),或者加入非线性运算,轻松适配不同的交互需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:26