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

如何在Desmos中模拟光束/粒子在椭圆内壁的反弹效果?

如何在Desmos中模拟光束/粒子在椭圆内壁的反弹效果?

嘿,我完全懂你想实现的效果——椭圆的经典光学特性就是从一个焦点发出的光线,经内壁反射后必然指向另一个焦点,在Desmos里做这个演示超酷!结合你已经搭建的椭圆框架,我给你梳理一套可落地的实现步骤:

核心思路:利用反射定律+向量计算

椭圆上任意一点的法线是该点的梯度方向,我们可以通过向量运算推导反射光线的方向,精准让光线反弹后命中另一个焦点。

具体操作步骤(适配Desmos的表达式逻辑)

  • 先明确椭圆参数:
    假设你用的是标准椭圆方程x²/a² + y²/b² = 1,先定义滑动条a(长半轴)、b(短半轴),然后计算焦点到中心的距离c = sqrt(a² - b²),两个焦点坐标设为F₁ = (-c, 0)、F₂ = (c, 0)。

  • 定义椭圆上的入射点:
    用参数t(滑动条,范围设为0到2π)来控制椭圆上的点P,参数方程写为:

    x = a cos(t)
    y = b sin(t)
    

    这样拖动t就能让P在椭圆上移动,模拟光束打在椭圆内壁的不同位置。

  • 计算入射光线:
    从其中一个焦点(比如F₁)到P的线段,用参数方程描述(s范围设为0到1):

    x = F₁.x + s*(P.x - F₁.x)
    y = F₁.y + s*(P.y - F₁.y)
    
  • 推导反射光线的方向(关键步骤):

    1. 计算椭圆在P点的法向量:椭圆的梯度方向就是法线,表达式为N = (P.x/a², P.y/b²)
    2. 计算入射向量:从F₁指向P的向量V_in = (P.x - F₁.x, P.y - F₁.y)
    3. 计算入射向量在法向量上的投影:用点积运算,公式为proj = ((V_in·N)/(N·N))*N,其中点积V_in·N = (P.x - F₁.x)*P.x/a² + (P.y - F₁.y)*P.y/b²,N·N = (P.x/a²)² + (P.y/b²)²
    4. 计算反射向量:根据反射定律,反射向量V_out = V_in - 2*proj
  • 绘制反射光线:
    从P点出发,沿着V_out方向绘制射线(k范围设为0到正无穷):

    x = P.x + k*V_out.x
    y = P.y + k*V_out.y
    

额外拓展:持续反弹的循环效果

如果你想让光束在椭圆内壁多次反弹(比如F₁→P₁→P₂→F₁),可以重复上述反射逻辑:以上一次反射光线与椭圆的交点作为下一次的入射点,用Desmos的迭代函数或者分段表达式来实现循环。

放心,你的创意很有价值,这个经典光学演示本身就是很棒的学习项目,按照这个思路调整你的Desmos表达式,肯定能实现完美的反弹效果!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:04:37