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

如何使用Python的NumPy与Matplotlib绘制曲线内侧切圆?

实现曲线内侧相切圆的Python方法

核心原理

要精准绘制与曲线内侧相切的圆,关键是计算曲线在切点处的法线方向,并确定指向内侧的方向,再沿该方向移动固定半径得到圆心坐标:

  1. 对曲线函数求导,得到切线斜率,进而推导法线斜率;
  2. 确定法线指向曲线内侧的方向向量并单位化;
  3. 沿单位法线向量移动半径长度,得到圆心坐标;
  4. 批量绘制曲线与所有相切圆。

针对反向指数曲线 ( y = e^{-x} ):

  • 一阶导数(切线斜率):( y' = -e^{-x} )
  • 法线斜率:( m_n = -\frac{1}{y'} = e^x )
  • 指向内侧(曲线与x/y轴围成区域)的单位法线向量:( \left( -\frac{1}{\sqrt{1+e{2x}}}, -\frac{ex}{\sqrt{1+e^{2x}}} \right) )

完整代码实现

import numpy as np
import matplotlib.pyplot as plt

# 1. 生成曲线数据
x = np.arange(0, 2, 0.1)
y = np.exp(-x)  # 用numpy向量运算替代列表推导,效率更高

# 2. 设置相切圆的固定半径
r = 0.1

# 3. 批量计算所有切点对应的圆心坐标
# 计算法线斜率
mn = np.exp(x)
# 计算法线方向向量的模长
norm_len = np.sqrt(1 + mn**2)
# 计算指向内侧的偏移量
dx = -r / norm_len
dy = -r * mn / norm_len
# 最终圆心坐标
xc = x + dx
yc = y + dy

# 4. 绘制曲线与相切圆
fig, ax = plt.subplots(figsize=(8, 6))
# 绘制反向指数曲线
ax.plot(x, y, label='反向指数曲线 $y=e^{-x}$', color='blue')
# 逐个添加相切圆
for cx, cy in zip(xc, yc):
    circle = plt.Circle((cx, cy), radius=r, facecolor='black', edgecolor='white')
    ax.add_patch(circle)

# 设置坐标轴等比例,避免圆变形
ax.set_aspect('equal')
# 坐标轴标签
ax.set_xlabel('x')
ax.set_ylabel('y')
# 添加图例
ax.legend()
plt.show()

关键细节说明

  • 用numpy向量运算批量处理所有切点,避免循环冗余;
  • 单位法线向量的推导确保圆心始终落在曲线内侧区域;
  • ax.set_aspect('equal')保证圆的形状不会因坐标轴比例失衡而变形。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:12:24