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

如何绘制半圆方程?Python代码生成的半圆效果不符合预期怎么办?

半圆绘制问题排查与修正方案

现有代码的问题

  • x取值范围错误:你用的range((1 + h - r), (h + r - 1), 1)存在两个问题,一是range本身是左闭右开规则,你还在左右边界都手动偏移了1,导致x取不到±r的端点;二是range只能生成整数步长的采样点,点密度太低,绘制出来的图形边缘不平滑。
  • 数组维度错误:将coord_list转换为numpy数组时,外层多套了一层[],导致转置后的维度不符合plt.scatter的输入要求。
  • 缺少等比例轴设置:matplotlib默认会自动适配x、y轴的显示比例,即便坐标计算正确,也会把圆拉伸成椭圆形状。

正确实现代码

方案1:参数方程法(更推荐,采样点均匀无变形)

利用圆的极坐标参数方程生成采样点,不需要处理开根号的边界问题,点分布更均匀:

import numpy as np
import matplotlib.pyplot as plt

h = 0  # 圆心x坐标
k = 0  # 圆心y坐标
r = 6  # 半径

# 角度范围取0到π,共100个均匀采样点,对应上半圆
theta = np.linspace(0, np.pi, 100)
x = h + r * np.cos(theta)
y = k + r * np.sin(theta)

plt.scatter(x, y)
# 若需要连续的半圆线条,替换上方scatter为:plt.plot(x, y)
plt.grid(color='green', linestyle='--', linewidth=0.2)
# 强制xy轴等比例显示,避免半圆变形
plt.axis('equal')
plt.show()

方案2:修正原x计算y的写法

如果你需要保留用x坐标计算y的逻辑,修改采样方式和数组处理即可:

import math
import numpy as np
import matplotlib.pyplot as plt

coord_list = []
h = 0
k = 0
r = 6

# 用linspace在[-r, r]范围内生成100个密集的x采样点,替代整数range
x_arr = np.linspace(h - r, h + r, 100)
for x in x_arr:
    y1 = k + math.sqrt(r**2 - (x - h)**2)
    coord_list.append([x, y1])

# 转换数组时不要额外套外层[]
data = np.array(coord_list)
x, y = data.T

plt.scatter(x, y)
plt.grid(color='green', linestyle='--', linewidth=0.2)
plt.axis('equal')
plt.show()

补充说明

如果需要绘制下半圆,只需把y值的计算改为k - math.sqrt(r**2 - (x - h)**2)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:36:01