**
计算机图形学:极坐标实现圆的扫描转换算法``的python实现
**
为了完成学校作业,其实本来是要使用C的openGL库实现的。但是奈何作者在轻量级的c编辑器(codeBLocks,devc++)一直配置不好openGL,又不想再重新下载那个大的过分的VS,所以只能勉强在python上自己画坐标轴模拟像素点实现这个xxx算法。个人感觉使用极坐标实现圆的扫描转换算法是最简单的。
代码如下:
首先是画坐标轴函数:
def draw_axis(cs):
# 画出坐标轴
plt.xlim(-cs, cs+1)
plt.ylim(-cs, cs+1)
ax = plt.gca() # 获取整个框架
ax.spines['right'].set_color('none') # 可以隐藏两条边
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
x_ticks=np.arange(-cs,cs+1,1)
y_ticks=np.arange(-cs,cs+1,1)
plt.xticks(x_ticks,fontsize=8)
plt.yticks(y_ticks,fontsize=8)
plt.grid() #生成网格
然后就是
具体算法实现:
#使用极坐标画圆算法
def draw_circle(x0,y0,R):
plt.scatter(x0,y0)
list_x=[]
list_y=[]
angle = 360
while (angle >= 0):
#角度转弧度
change = angle * math.pi / 180
x = round(x0 + R * math.cos(change))
y = round(y0 + R * math.sin(change))
list_x.append(x)
list_y.append(y)
angle -= 2 # 步长设置为2
for i in range(1,len(list_x)):
plt.scatter(list_x[i],list_y[i])
plt.plot([list_x[i-1],list_x[i]],[list_y[i-1],list_y[i]],color='r')
plt.pause(0.01)
主函数:
if __name__=='__main__':
plt.figure(figsize=(6, 6))
draw_axis(int(input('请输入坐标轴大小\n')))
draw_circle(int(input('请输入圆心的x坐标\n')),int(input('请输入圆心的y坐标\n')),int(input('请输入圆的半径长度\n')))
plt.show()
运行结果如下