我有兴趣使用sin()和cos()函数绘制一个变化半径的圆。
是否有增加弧度的黄金法则,以便在同一位置没有多个绘图,并且在基于像素的显示上绘制的圆圈中没有间隙?
x = cos(r) * radius
y = sin(r) * radius
r = r + s
我的猜测是,将2×PI除以半径导出的数字可以做什么?
由于浮点计算的限制,我确信这可能非常简单或不可能。
感谢您的时间
安东尼
答案 0 :(得分:0)
弧的长度只是s = r * delta_fi
,其中r
是圆的半径,fi
是角度,delta_fi
是角度的变化。
此弧对x轴的投影为delta_x = s * sin(fi)
,y轴为delta_y = s * cos(fi)
您希望delta_fi
或delta_x
为{1}的delta_y
。
显然,问题是对称的,我们可以针对fi
从-45°到45°和delta y
解决问题,然后在其他象限中应用相同的解决方案。我们有:
r * delta_fi * cos(fi) = 1
因此:
delta_fi = 1/cos(fi)/r
答案 1 :(得分:0)
圆的坐标确实可以使用三角函数正弦和余弦完全定义:
x = cos(角度)
y = sin(angle)
如果半径是 1 以外的任何值(恰好定义了单位圆),三角函数的基本原理仍然适用,因此可以推导出以下等式:
x = cos(angle) * 半径
y = sin(angle) * 半径
为了在 Python 中实现这一点(在 Numpy 的帮助下),除了我们已经定义的之外,所有必要的是一个合适的角度向量(或一维数组),它将由函数计算x 和 y。
import numpy as np
r = 2 # An arbitrary value for the radius
angle = np.linspace(0, 2*np.pi, 1000) # A vector covering all angles from
# 0 to 2*pi (the full circle in radians)
# with an arbitrary number of
# elements, 1000 in this example
x = np.cos(angle)*r
y = np.sin(angle)*r
在绘制这个圆时不要忘记将图形的大小调整为正方形,否则圆会变形。
import matplotlib.pyplot as plt
plt.figure(figsize=(3, 3))
plt.plot(x, y)