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

如何实现速滑运动员图像的椭圆运动?原代码仅支持圆周运动

实现速滑运动员的椭圆运动轨迹

嘿,这个问题太贴合实际了——速滑场本身就是椭圆形的,把圆周运动改成椭圆其实只需要调整核心的数学公式就行!

原理说明

原来的圆周运动用同一个半径r计算x、y方向的偏移,自然是正圆形轨迹:

var px = x + r * Math.cos(a);
var py = y + r * Math.sin(a);

而椭圆运动需要区分x方向的半轴长度(rx)和y方向的半轴长度(ry),把两个方向的偏移幅度分开控制,公式就变成了:

var px = x + rx * Math.cos(a);
var py = y + ry * Math.sin(a);

这样x方向会按照rx的幅度拉伸,y方向按照ry的幅度拉伸,组合起来就是完美的椭圆轨迹,刚好匹配速滑场的形状。

修改后的完整代码示例

// 椭圆圆心坐标
const x = 700; 
const y = 200;
// 椭圆的长半轴和短半轴(根据速滑场实际比例调整)
const rx = 300; // x方向半轴(对应速滑场的长轴)
const ry = 150; // y方向半轴(对应速滑场的短轴)
let a = 0; // 角度(范围0到Math.PI * 2)

function rotate(a) {
  // 核心逻辑替换为椭圆计算公式
  var px = x + rx * Math.cos(a); 
  var py = y + ry * Math.sin(a);
  document.querySelector('#point').style.left = px + 'px';
  document.querySelector('#point').style.top = py + 'px';
}

// 用requestAnimationFrame实现平滑的持续动画
function animate() {
  a += 0.01; // 控制滑行速度,数值越大滑得越快
  if (a > Math.PI * 2) {
    a = 0; // 角度重置,实现循环滑行
  }
  rotate(a);
  requestAnimationFrame(animate);
}

// 启动动画
animate();

额外优化提示

  • 你可以根据速滑场的实际尺寸微调rx和ry的数值,标准400米速滑场的长轴和短轴比例大概是2:1,你可以按需调整。
  • 如果想要更贴近真实速滑的运动感,还可以动态调整角度增量:比如在弯道区域减小a += 0.01的数值模拟减速,直道区域增大数值模拟加速,这属于进阶的细节优化啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:04:47