用 Python 一个参数画出完整的圆锥曲线可视化

发布时间:2026/9/20 7:20:06

用 Python 一个参数画出完整的圆锥曲线可视化 用 Python 一个参数画出完整的圆锥曲线可视化【免费下载链接】Book3_Elements-of-MathematicsBook_3_《数学要素》 | 鸢尾花书从加减乘除到机器学习上架欢迎继续纠错纠错多的同学还会有赠书项目地址: https://gitcode.com/GitHub_Trending/bo/Book3_Elements-of-Mathematics改一个数字屏幕上的椭圆瞬间变扁、开口、裂成双曲线——这是开源项目 Book3_Elements-of-Mathematics《数学要素》第 3 册鸢尾花书里你能直接体验到的圆锥曲线可视化。哪怕你从没用 Python 画过图、没碰过 Streamlit半小时也能亲手画出并操控椭圆、抛物线、双曲线前提是你会跑pip install。一个参数定三种曲线这一节解决记不住三种曲线公式的问题只需盯住一个数就能说出曲线长什么样。这个数叫离心率 eEccentricity。大白话讲它是曲线的变形仪表盘0 是最圆的状态越接近 1 越扁跨过 1 之后闭合的曲线直接炸开成两条腿张开的形状。e 0圆椭圆最圆的特例0 e 1椭圆e 1抛物线e 1双曲线课本里通常先讲平面斜着切圆锥的几何定义一句话带过即可真正干活的是代数式。椭圆有一个标准方程长这样$$x^2/a^2 y^2/b^2 1$$其中 a 是横向半径b 是纵向半径b 相对 a 缩得越狠椭圆越扁对应的离心率 $e \sqrt{1 - b^2/a^2}$ 就越接近 1。项目的 《圆锥曲线》章节Ch08 讲透了每种曲线的几何性质想深入推导的话《深入圆锥曲线》章节Ch09 有完整的推导过程。三行核心代码画出圆锥曲线族这一节解决从哪敲起的问题一段最小可运行代码跑完屏幕上就铺满 31 条曲线从圆到双曲线排成一队。第一次运行前装好两个库pip install numpy matplotlib。完整代码在仓库的Book3_Ch09_Python_Codes/目录可直接打开 Bk3_Ch09_01.ipynb 对照。下面这段是它的精简版逻辑完全一致先搭好网格、列好离心率清单再循环画线一共就三步import numpy as np import matplotlib.pyplot as plt # 网格x、y 各取 201 个点覆盖 -4 到 4 x np.linspace(-4, 4, num201) y np.linspace(-4, 4, num201) xx, yy np.meshgrid(x, y) # 31 个离心率从 0 到 3正好覆盖圆、椭圆、抛物线、双曲线 e_array np.linspace(0, 3, num31) fig, ax plt.subplots(figsize(8, 8)) colors plt.cm.RdYlBu(np.linspace(0, 1, len(e_array))) # 每条曲线配一个渐变色 for i, e in enumerate(e_array): # 同一个隐函数只改 e曲线就变了 f yy**2 - (e**2 - 1) * xx**2 - 2 * xx # f 0 的点集就是曲线让 contour 把零点连成线 ax.contour(xx, yy, f, levels[0], colors[colors[i]]) ax.axhline(0, colork, linewidth0.5) # 两条坐标轴 ax.axvline(0, colork, linewidth0.5) ax.set_aspect(equal) # 横纵同比例椭圆不会被压扁 plt.show()跑完你会看到左半屏挤着一族套娃般的椭圆e1 附近出现一条向右开口的抛物线e 继续变大曲线分叉成对称的双曲线颜色由红渐蓝标记 e 的走向。注意方程里没有任何 if 分支——三种曲线共用同一个式子区别只在 e。滑块实时控制曲线形变这一节解决图是死的没法把玩的问题给页面加一个滑块鼠标一拖曲线跟着变。一个最小的 Streamlit 应用骨架就四步用st.set_page_config设置页面标题放一个控制离心率 e 的滑块按当前滑块值算出网格上的隐函数画等高线并用st.pyplot显示页面自动重跑刷新import streamlit as st import numpy as np import matplotlib.pyplot as plt st.set_page_config(page_title圆锥曲线交互可视化, layoutwide) # 核心只有一个滑块控制离心率 e st.slider(离心率 e, min_value0.0, max_value3.0, value0.5, step0.1) x np.linspace(-4, 4, num201) y np.linspace(-4, 4, num201) xx, yy np.meshgrid(x, y) f yy**2 - (e**2 - 1) * xx**2 - 2 * xx fig, ax plt.subplots(figsize(8, 8)) ax.contour(xx, yy, f, levels[0], colors[b]) ax.set_aspect(equal) ax.axhline(0, colork, linewidth0.5) ax.axvline(0, colork, linewidth0.5) st.pyplot(fig) # 滑块一动整页重跑图形立刻刷新 if e 1: st.write(f当前 e {e:.2f}这是一条椭圆) elif e 1: st.write(当前 e 1正好是抛物线) else: st.write(f当前 e {e:.2f}这是一条双曲线)用streamlit run 上面这个文件.py启动后体感是e 从 0 往上拖椭圆一圈比一圈扁拖到 1 时曲线噗地开口变成抛物线再往下拖就劈成两条分支下方的文字判断和数值同步刷新。想参考更完整的成品项目里的 Streamlit_Bk3_Ch09_03.py 用了 m、n、rho 三个滑块能同时画出椭圆、它的外接矩形和四个顶点。为什么能这样画不做推导三段话看懂原理。第一段等高线为什么就是曲线。我们不把方程解成 y f(x)而是写成一个隐函数 f(x, y)曲线就是让 f 恰好等于 0的所有点。电脑在网格上每个点都算一遍 fcontour的工作只是把 f0 的点连成线——就像地形图把海拔相同的点连成等高线这里连的是函数值恰好为零的点。第二段还有一派画法叫参数方程描点。椭圆可以写成 x a·cos t、y b·sin t让角度 t 从 0 转到 2π吐出一串 (x, y) 坐标按顺序连线即可类似儿童画本里的连点成画。第三段为什么交互起来这么容易。曲线完全由少数几个参数决定滑块改的只是 e 这一个数参数变了 → 隐函数重算 → 等高线重画。三步全是几行代码的事所以拖动即变形的体验不需要任何黑科技。圆锥曲线出现在哪里画会了顺便看看它在工作里露面的地方 SVM 决策边界核函数把数据映射到高维后分界平面投影回原空间形状常常是圆锥曲线马氏距离异常检测马氏距离一种考虑了数据拉伸方向的距离的等值线天然是椭圆画几圈同心椭圆就是正常区域的围栏二维高斯分布概率密度等高线是一族同心椭圆鸢尾花书里的热力图里随处可见收获与下一步最后清点一下这半小时你带走了什么三种圆锥曲线不用分三门记离心率 e 一个数小于 1、等于 1、大于 1 分别对应椭圆、抛物线、双曲线隐函数 ax.contour这套等高线画曲线的套路可以原样搬到其他曲线族上Streamlit 滑块让任何静态图变成演示工具核心代码不超过五行仓库Book3_Ch09_Python_Codes/目录里有更多示例README.md 能帮你定位整本书的脉络想继续动手的话两个现成的方向 把圆锥曲线换成极坐标方程再画一遍对比两种坐标系下同一个形状的差别在图上标出焦点、画一条准线验证到焦点的距离 e × 到准线的距离这个定义在屏幕上是怎么成立的【免费下载链接】Book3_Elements-of-MathematicsBook_3_《数学要素》 | 鸢尾花书从加减乘除到机器学习上架欢迎继续纠错纠错多的同学还会有赠书项目地址: https://gitcode.com/GitHub_Trending/bo/Book3_Elements-of-Mathematics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/20 7:20:06

DXGI_SWAP_CHAIN_DESC完全解析:从交换链原理到D3D11实践

1. 交换链到底在解决什么问题1.1 从一帧画面到屏幕的旅程很多刚开始学DirectX的朋友,第一次被一堆结构体砸晕的时候,往往不是Shader编译报错,而是连窗口上都画不出一个三角形。等你去查代码,发现十有八九卡在交换链这一关。DXGI_S…

2026/9/20 7:20:06

优启通PE启动盘制作与故障修复全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 7:20:06

Spring Boot养老护理小程序开发实践与优化

1. 项目背景与需求分析养老护理小程序作为智慧养老领域的重要载体,正在改变传统养老服务模式。这个JAVA框架开发的项目聚焦老人服务模块,旨在通过移动互联网技术解决老年群体日常生活中的核心痛点。我去年参与过某社区养老平台的开发,深刻体会…

2026/9/20 8:40:11

Open Code Review:开源可审计的LLM代码审查实践

1. 这不是又一个“AI代码审查工具”,而是一套可落地的开源协作新范式“open-code-review”这个词乍看像某个新发布的CLI工具名,但实际它指向的是一类正在快速成型的工程实践:用开源、透明、可审计的方式,把大语言模型(…

2026/9/20 8:40:11

JS语音合成与WebSocket流式推送:实时语音系统落地实践

做实时语音系统的时候,最绕不开的一环就是:把一段文本变成声音,然后以流的形式送到接收端。最近我正好整理了一个方案——用 JavaScript 做语音合成,把合成出来的音频转成语音流,再通过 WebSocket 推送给前端播放。这套…

2026/9/20 8:40:11

让AI Agent输出专业图表:从方框图到38种图表类型的工程实践

有些事不亲手做一遍,很难相信问题居然能这么离谱。前阵子我搭了一个AI Agent,让它帮忙梳理订单系统的业务逻辑,结果它给我输出了一堆用方括号和横线拼出来的"方框图"。图是能看懂,但想拿给业务方评审?想放进…

2026/9/20 8:40:11

Unity游戏实时翻译插件XUnity.AutoTranslator从安装到配置全攻略

玩 Unity 游戏的朋友应该都体会过这种憋屈:Steam 上淘到一个画面、玩法都很对胃口的独立游戏,结果一进去满屏英文或者日文,直接劝退。找汉化补丁吧,冷门游戏基本没人做;想用 OCR 机翻,窗口切来切去&#xf…

2026/9/20 8:35:10

OpenResearch 实战:用轻量级工具链构建可复现、可协作的研究工作流

1. 为什么“OpenResearch”值得认真对待第一次看到“OpenResearch”这个词,很多人会下意识觉得它离自己很远——听起来像是学术圈的事,跟日常写代码、做产品、搞副业没什么关系。但实际情况恰恰相反。我过去几年参与过几个开源协作项目,也帮朋…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码