椭圆的光学性质

椭圆光学性质讲解+例题+动态演示

在高中数学的圆锥曲线部分,我们不仅会接触到繁杂的代数运算,更会领略到几何本身的极致之美。其中,椭圆的光学性质无疑是最令人着迷的定理之一。

本文将通过数学推导、实际应用、代码可视化以及经典例题,带你全方位、深入浅出地吃透椭圆的光学性质。


一、 什么是椭圆的光学性质?

椭圆的光学性质定理:

从椭圆的一个焦点发出的光线,经过椭圆内壁反射后,反射光线必经过椭圆的另一个焦点。

在现实生活中,这个性质有非常多奇妙的应用。例如回音壁(Whispering Gallery) 。如果你在一个椭圆形房间的一个焦点处小声说话,声音遇到墙壁反射后,会全部汇聚到另一个焦点处。因此,站在另一个焦点处的人可以非常清晰地听到你的耳语,而房间里其他人却听不清。医学上的体外碎石机也是利用这个原理:将声波发射源放在一个焦点,将患者体内的结石定位在另一个焦点,高能声波经过椭圆面反射后全部汇聚于结石处,从而击碎结石而不伤及周围组织。


二、 【HTML/JS 可视化演示

为了让大家更直观地感受这一性质,整了一个基于HTML5 Canvas的网页动画。

你可以直接复制下方代码,保存为 ellipse.html,用浏览器打开,就能看到光线在焦点间反射的动画效果!

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>椭圆的光学性质动态演示</title>
    <style>
        body {
            display: flex; flex-direction: column; align-items: center;
            background-color: #f0f4f8; font-family: "Microsoft YaHei", sans-serif;
            margin: 0; padding: 20px;
        }
        canvas {
            background: #1a1a1a; box-shadow: 0 10px 30px rgba(0,0,0,0.3);
            border-radius: 12px; margin-top: 20px;
        }
        .info { color: #333; max-width: 600px; text-align: center; line-height: 1.6; }
    </style>
</head>
<body>
    <h2>椭圆的光学性质演示</h2>
    <div class="info">
        观察绿色光线:从左焦点 $F_1$ 发出的光,无论打在椭圆的哪一点,其反射光线必过右焦点 $F_2$。<br>
        <span style="color:#00ff00;">绿线代表光路</span>,<span style="color:#ffcc00;">黄线代表切线</span>,<span style="color:#00ccff;">蓝线代表法线</span>。
    </div>
    <canvas id="canvas" width="800" height="500"></canvas>

    <script>
        const canvas = document.getElementById('canvas');
        const ctx = canvas.getContext('2d');
        
        const cx = 400, cy = 250; // 中心
        const a = 300, b = 180;   // 长短半轴
        const c = Math.sqrt(a*a - b*b); // 焦距
        
        let angle = 0; // 动画角度

        function draw() {
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            
            // 1. 画椭圆
            ctx.beginPath();
            ctx.ellipse(cx, cy, a, b, 0, 0, 2 * Math.PI);
            ctx.strokeStyle = 'white';
            ctx.lineWidth = 2;
            ctx.stroke();

            // 2. 画焦点
            const f1x = cx - c, f1y = cy;
            const f2x = cx + c, f2y = cy;
            ctx.fillStyle = '#ff3366';
            ctx.beginPath(); ctx.arc(f1x, f1y, 6, 0, 2 * Math.PI); ctx.fill();
            ctx.beginPath(); ctx.arc(f2x, f2y, 6, 0, 2 * Math.PI); ctx.fill();
            ctx.fillStyle = 'white'; ctx.font = "16px Arial";
            ctx.fillText("F1", f1x - 25, f1y - 10); ctx.fillText("F2", f2x + 10, f2y - 10);

            // 3. 计算椭圆上的动点 P
            const px = cx + a * Math.cos(angle);
            const py = cy + b * Math.sin(angle);
            
            // 4. 画光路 (F1 -> P -> F2)
            ctx.beginPath();
            ctx.moveTo(f1x, f1y); ctx.lineTo(px, py); ctx.lineTo(f2x, f2y);
            ctx.strokeStyle = '#00ff00'; ctx.lineWidth = 2; ctx.stroke();
            
            // 画点 P
            ctx.fillStyle = 'white';
            ctx.beginPath(); ctx.arc(px, py, 4, 0, 2 * Math.PI); ctx.fill();
            ctx.fillText("P", px + 10, py - 10);

            // 5. 画切线和法线
            // 椭圆 x^2/a^2 + y^2/b^2 = 1 在 (x0, y0) 的切线方程为: x0*x/a^2 + y0*y/b^2 = 1
            // 切线斜率 k = -(b^2 * (px-cx)) / (a^2 * (py-cy))
            const dx = px - cx;
            const dy = py - cy;
            const k_tangent = -(b*b * dx) / (a*a * dy);
            
            // 绘制切线
            const lineLength = 200;
            const tx1 = px - lineLength, ty1 = py - k_tangent * lineLength;
            const tx2 = px + lineLength, ty2 = py + k_tangent * lineLength;
            ctx.beginPath(); ctx.moveTo(tx1, ty1); ctx.lineTo(tx2, ty2);
            ctx.strokeStyle = 'rgba(255, 204, 0, 0.7)'; ctx.setLineDash([5, 5]); ctx.stroke();
            
            // 绘制法线
            const k_normal = -1 / k_tangent;
            const nx1 = px - lineLength*0.3, ny1 = py - k_normal * lineLength*0.3;
            const nx2 = px + lineLength*0.3, ny2 = py + k_normal * lineLength*0.3;
            ctx.beginPath(); ctx.moveTo(nx1, ny1); ctx.lineTo(nx2, ny2);
            ctx.strokeStyle = 'rgba(0, 204, 255, 0.7)'; ctx.setLineDash([5, 5]); ctx.stroke();
            ctx.setLineDash([]); // 重置虚线

            angle += 0.005;
            requestAnimationFrame(draw);
        }
        
        draw();
    </script>
</body>
</html>

三、 数学原理解析(如何证明?)

光学的反射定律告诉我们:入射角等于反射角 (即入射光线和反射光线与法线的夹角相等,或者说它们与切线的夹角相等)。因此,要证明椭圆的光学性质,只需证明:焦点到椭圆上一点的连线,与该点处的切线夹角相等。

我们利用**最短光程原理(费马原理)**与几何法来证明这件优美的事情。

证明思路:

设椭圆为 x2a2+y2b2=1\frac{x^2}{a^2} + \frac{y^2}{b^2} = 1a2x2+b2y2=1,焦点为 F1,F2F_1, F_2F1,F2,点 PPP 为椭圆上任意一点。画出点 PPP 处的切线 lll。

我们要证明:直线 PF1PF_1PF1 和 PF2PF_2PF2 与切线 lll 构成的夹角 α\alphaα 和 β\betaβ 相等。

  1. 根据椭圆的定义,对于椭圆上的点 PPP,有 PF1+PF2=2aPF_1 + PF_2 = 2aPF1+PF2=2a。
  2. 假设在切线 lll 上存在异于 PPP 的另一点 QQQ。
  3. 因为点 QQQ 在切线上,且除切点 PPP 外,切线上的所有点都在椭圆外部
  4. 结合椭圆的几何性质,对于椭圆外的任意一点 QQQ,必有 QF1+QF2>2aQF_1 + QF_2 > 2aQF1+QF2>2a。
  5. 因此,PF1+PF2<QF1+QF2PF_1 + PF_2 < QF_1 + QF_2PF1+PF2<QF1+QF2 恒成立。这就意味着,在直线 lll 上,点 PPP 是到 F1F_1F1 和 F2F_2F2 距离之和最短的点!
  6. 根据**"将军饮马"模型**(轴对称求最短路径问题),如果要在直线 lll 上找一点使其到同侧两点 F1,F2F_1, F_2F1,F2 距离之和最短,该点与两点连线与直线的夹角必然相等。
  7. 故而,∠F1PA=∠F2PB\angle F_1 P A = \angle F_2 P B∠F1PA=∠F2PB (即入射角等于反射角)。

证毕。


四、 经典例题与图解解析

椭圆的光学性质在高考和各类数学竞赛中常常作为大题的"压轴背景"出现,以下为你拆解几道经典例题。

【例题 1:光线路径的周长问题】

题目:

已知椭圆 C:x225+y29=1C: \frac{x^2}{25} + \frac{y^2}{9} = 1C:25x2+9y2=1 的左右焦点分别为 F1,F2F_1, F_2F1,F2。一束光线从左焦点 F1F_1F1 发出,经过椭圆上一点 PPP 反射后,再经过椭圆上一点 QQQ 反射,最后回到点 F1F_1F1。求光线所走过的总路程(即 △PF1Q\triangle PF_1Q△PF1Q 的周长)。

【图解与解析】

根据椭圆的光学性质:

  1. 从 F1F_1F1 发出的光,经 PPP 反射后,必经过 F2F_2F2
  2. 光线继续行进打在椭圆上的点 QQQ,此时相当于光从 F2F_2F2 发出打在 QQQ 点。
  3. 经 QQQ 反射后,光线必再次经过另一个焦点,即回到 F1F_1F1。
    因此,光线的实际路径就是 △PF1Q\triangle PF_1Q△PF1Q 的周长。

由于光线路径是 F1→P→Q→F1F_1 \to P \to Q \to F_1F1→P→Q→F1,而由光学性质知该路线必经过 F2F_2F2。所以路径其实分为两段穿过焦点的折线:

  • 第一段折线:F1→P→F2F_1 \to P \to F_2F1→P→F2。由椭圆定义,PF1+PF2=2aPF_1 + PF_2 = 2aPF1+PF2=2a。
  • 第二段折线:F2→Q→F1F_2 \to Q \to F_1F2→Q→F1。由椭圆定义,QF1+QF2=2aQF_1 + QF_2 = 2aQF1+QF2=2a。

总路程 L=(PF1+PF2)+(QF1+QF2)=2a+2a=4aL = (PF_1 + PF_2) + (QF_1 + QF_2) = 2a + 2a = 4aL=(PF1+PF2)+(QF1+QF2)=2a+2a=4a。

在本题中,a2=25  ⟹  a=5a^2 = 25 \implies a = 5a2=25⟹a=5。

所以,光线走过的总路程为 4×5=204 \times 5 = 204×5=20。


【例题 2:切线与角平分线的高阶运用】

题目:

已知椭圆 x24+y23=1\frac{x^2}{4} + \frac{y^2}{3} = 14x2+3y2=1 的焦点为 F1,F2F_1, F_2F1,F2。点 P(1,32)P(1, \frac{3}{2})P(1,23) 在椭圆上,直线 lll 为椭圆在点 PPP 处的切线。求证:法线平分 ∠F1PF2\angle F_1PF_2∠F1PF2。

【解析】

这是一道非常经典的验证性题目。

由椭圆方程知 a=2,b=3a=2, b=\sqrt{3}a=2,b=3 ,焦点 F1(−1,0),F2(1,0)F_1(-1, 0), F_2(1, 0)F1(−1,0),F2(1,0)。

因为点 P(1,32)P(1, \frac{3}{2})P(1,23),我们先求两焦半径所在直线的斜率:
kPF1=3/2−01−(−1)=34kPF2=3/2−01−1→斜率不存在(垂直于x轴) \begin{aligned} k_{PF_1} &= \frac{3/2 - 0}{1 - (-1)} = \frac{3}{4} \\ k_{PF_2} &= \frac{3/2 - 0}{1 - 1} \to \text{斜率不存在(垂直于x轴)} \end{aligned} kPF1kPF2=1−(−1)3/2−0=43=1−13/2−0→斜率不存在(垂直于x轴)

所以 PF2PF_2PF2 在直线 x=1x = 1x=1 上。

利用公式,椭圆在点 (x0,y0)(x_0, y_0)(x0,y0) 处的切线方程为 x0xa2+y0yb2=1\frac{x_0x}{a^2} + \frac{y_0y}{b^2} = 1a2x0x+b2y0y=1。

代入 P(1,32)P(1, \frac{3}{2})P(1,23) 得到切线 lll 的方程:
1⋅x4+32y3=1  ⟹  x+2y−4=0 \frac{1 \cdot x}{4} + \frac{\frac{3}{2} y}{3} = 1 \implies x + 2y - 4 = 0 41⋅x+323y=1⟹x+2y−4=0

切线 lll 的斜率 kl=−12k_l = -\frac{1}{2}kl=−21。

法线 nnn 与切线垂直,故法线的斜率 kn=2k_n = 2kn=2。

法线 nnn 的方程为:y−32=2(x−1)  ⟹  4x−2y−1=0y - \frac{3}{2} = 2(x - 1) \implies 4x - 2y - 1 = 0y−23=2(x−1)⟹4x−2y−1=0。

接下来验证法线平分夹角。我们计算法线到 PF1PF_1PF1 和 PF2PF_2PF2 的夹角:

直线 PF1PF_1PF1 斜率 k1=34k_1 = \frac{3}{4}k1=43,法线斜率 kn=2k_n = 2kn=2。它们夹角的正切值:
tan⁡θ1=∣2−341+2×34∣=∣54104∣=12 \tan \theta_1 = \left| \frac{2 - \frac{3}{4}}{1 + 2 \times \frac{3}{4}} \right| = \left| \frac{\frac{5}{4}}{\frac{10}{4}} \right| = \frac{1}{2} tanθ1= 1+2×432−43 = 41045 =21

对于直线 PF2PF_2PF2 (斜率无穷大),与斜率为 2 的直线的夹角正切值:

由于法线与 xxx 轴夹角的正切是 2,而 PF2PF_2PF2 垂直 xxx 轴。
tan⁡θ2=∣cot⁡(arctan⁡2)∣=12 \tan \theta_2 = \left| \cot(\arctan 2) \right| = \frac{1}{2} tanθ2=∣cot(arctan2)∣=21

因为 tan⁡θ1=tan⁡θ2\tan \theta_1 = \tan \theta_2tanθ1=tanθ2,所以在第一象限夹角相等。
结论: 椭圆在该点的法线平分焦点三角形的顶角,等价于反射定律(入射角等于反射角)。


结语

椭圆的光学性质牛福克拉斯!

💡求求求求:

别忘了点个赞+收藏哦!

相关推荐
ZC跨境爬虫1 小时前
跟着 MDN 学 HTML day_53:(深入理解 XPathResult 接口)
前端·javascript·ui·html·音视频
摸鱼仙人~1 小时前
html-anything 仓库全面介绍
前端·html
a1117762 小时前
可视化角色权限配置页面(html 开源)
前端·开源·html
ZC跨境爬虫11 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
PieroPc13 小时前
CAMWATCH — 局域网摄像头监控系统 Fastapi + html
前端·python·html·fastapi·监控
向阳而生66019 小时前
iframe 使用全解析:语法、避坑与实操指南(新手友好)
html
a1117761 天前
细胞结构实验室(react 开源)
前端·javascript·开源·html
产品经理爱开发1 天前
老师用AI开发的HTML教具如何在线托管访问
前端·html·ai编程·持续部署·源代码管理
ZC跨境爬虫1 天前
跟着MDN学HTML_day_47:(Document接口)
前端·javascript·ui·html·ecmascript·音视频