python/计算机图形学

**

计算机图形学:极坐标实现圆的扫描转换算法``的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()

运行结果如下
运行结果好看极了

发布了1 篇原创文章 · 获赞 0 · 访问量 14

猜你喜欢

转载自blog.csdn.net/nohairless/article/details/105373342