用cos()sin()绘制一个圆,没有重复像素,没有间隙?

时间:2017-05-11 10:51:32

标签: python-2.7 sin cos

我有兴趣使用sin()和cos()函数绘制一个变化半径的圆。

是否有增加弧度的黄金法则,以便在同一位置没有多个绘图,并且在基于像素的显示上绘制的圆圈中没有间隙?

x = cos(r) * radius
y = sin(r) * radius
r = r + s

我的猜测是,将2×PI除以半径导出的数字可以做什么?

由于浮点计算的限制,我确信这可能非常简单或不可能。

感谢您的时间

安东尼

2 个答案:

答案 0 :(得分:0)

弧的长度只是s = r * delta_fi,其中r是圆的半径,fi是角度,delta_fi是角度的变化。

此弧对x轴的投影为delta_x = s * sin(fi),y轴为delta_y = s * cos(fi)

您希望delta_fidelta_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)