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

极坐标图沿圆周正弦曲线角度失真的修正方案求助

回答

在极坐标中绘制保留正弦波均匀特性的圆周分布曲线

你当前的代码直接在极径r上叠加与角度θ相关的余弦分量,导致曲线变形——因为极坐标中,相同角度增量Δθ对应的弧长是rΔθ,当r较小时弧长更短,波形被压缩,花瓣更尖锐;r较大时弧长更长,波形被拉伸,花瓣更圆润。要保留正弦波的弧长均匀特性,需要基于圆周的弧长而非角度来定义正弦波的周期。

解决方案思路

改用弧长s作为参数,将正弦波的变化绑定到弧长上,确保每个正弦周期对应的弧长一致:

  1. 定义基础圆周的弧长范围(从0到周长2π*base_radius)
  2. 由弧长计算对应的极角θ = s / base_radius
  3. 基于弧长计算极径r,让正弦波的相位随弧长线性变化

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

# 参数设置
base_radius = 5       # 基础圆周半径
amplitude = 2         # 正弦波振幅
n_waves = 5           # 沿圆周分布的正弦波数量
n_points = 1000       # 采样点数

# 定义弧长s,覆盖整个基础圆周的周长
s = np.linspace(0, 2 * np.pi * base_radius, n_points)
# 弧长转换为极角θ
theta = s / base_radius
# 基于弧长计算极径,正弦波周期绑定到弧长
r = base_radius + amplitude * np.cos(n_waves * s / base_radius)

# 绘制极坐标图
plt.figure(figsize=(6, 6))
ax = plt.subplot(111, projection='polar')
ax.grid(True)
ax.plot(theta, r, color='red', linewidth=0.8)
plt.show()

代码解释

  • 弧长s的范围覆盖整个基础圆周,确保曲线闭合且完整
  • theta = s / base_radius将弧长转换为对应极角,保证沿圆周的角度分布符合基础圆周的几何关系
  • n_waves * s / base_radius让正弦波的相位随弧长线性变化,每个正弦周期对应的弧长为2π*base_radius / n_waves,即圆周被均匀分成n_waves个正弦周期,这样无论r如何变化,波形在弧长方向的间隔一致,花瓣的尖锐度统一。

如果需要让正弦波的周期基于角度(比如每2π/n_waves角度对应一个周期),可以调整相位计算为n_waves * theta,但这种情况下依然会存在径向缩放的问题——因此基于弧长的方案更贴合你“保留正弦波角度特性”的核心需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:07:12