计算机图形学python编程_GitHub - matessd/cg: 计算机图形学作业,实现一个绘图工具...

这篇博客详细介绍了南京大学计算机图形学课程大作业的要求,学生需使用Python编程实现一个图形学系统,包括核心算法、命令行界面和图形用户界面。系统需支持多种图形元素的绘制、编辑和保存,遵循特定的指令文件格式。同时,作业还包括进度报告、系统报告、使用说明书和演示视频的提交。作业评分标准包含算法实现、用户界面和文档质量等方面。
摘要由CSDN通过智能技术生成

南京大学《计算机图形学》课程大作业

更新记录

[2020/03/13 11:30] 更新三月进展报告提交方式

[2020/02/19 10:20] 更新2.2节说明,详情见Commit 6dc66448

[2020/02/17 15:30] 更新测试环境下载地址

1. 作业内容

本课程作业是横跨一学期的项目,要求跟随课程进度在项目中实现各种图形学算法,最终完成一个完整的图形学系统,进度自由安排,3月31日、4月30日提交进度报告和已完成代码,5月31日提交系统报告、完整的系统、系统使用说明书和系统演示视频。

截止时间:

提交日的 23:00

提交内容:

一个7z压缩包

命名方式:

“学号_月份.7z”,例如“17186001_3.7z”。当提交错误,或有内容更新时,加上“_v2”、“_v3”等后缀重新提交,例如“17186001_3_v2.7z”。以截止时间前最晚的提交为准

!!!重要:请务必按要求命名,以免自动化评分和查重时出现意外

文件结构:

学号_月份

|- 学号_报告.pdf

|- 学号_说明书.pdf

|- 学号_演示.mp4

|- source

| |- cg_alforithms.py

| |- cg_cli.py

| |- cg_gui.py

| |- ...

|- ...

例如

!!!重要:请务必按要求组织文件结构,以免自动化评分和查重时出现意外

2. 系统实现要求

使用Python3语言编程,实现一个绘图系统

2.1. 要实现的内容

核心算法模块(各种图元的生成、编辑算法):cg_algorithms.py

命令行界面(CLI)程序:cg_cli.py

读取包含了图元绘制指令序列的文本文件,依据指令调用核心算法模块中的算法绘制图形以及保存图像

允许依赖第三方库numpy和Pillow,用于将画布保存为图像

程序接受两个外部参数:指令文件的路径和图像保存目录

测试程序时的指令格式如下:

python cg_cli.py input_path output_dir

用户交互界面(GUI)程序:cg_gui.py

以鼠标交互的方式,通过鼠标事件获取所需参数并调用核心算法模块中的算法将图元绘制到屏幕上,或对图元进行编辑

要实现2.2节中的所有功能

界面样式和交互方式不做限制,可自由设计

可自由选择GUI库,如PyQt5、Tkinter等

测试程序时的指令格式如下:

python cg_gui.py

CG_demo仅提供了一种简单的系统架构及交互逻辑,可以直接在此基础上丰富、优化功能;也可以另起炉灶,设计更优秀的系统架构和交互方式。

2.2. 指令文件格式

每行一条指令,包括:

重置画布

resetCanvas width height

清空当前画布,并重新设置宽高

width, height: int

100 <= width, height <= 1000

保存画布

saveCanvas name

将当前画布保存为位图name.bmp

name: string

设置画笔颜色

setColor R G B

R, G, B: int

0 <= R, G, B <= 255

绘制线段

drawLine id x0 y0 x1 y1 algorithm

id: string, 图元编号,每个图元的编号是唯一的

x0, y0, x1, y1: int, 起点、终点坐标

algorithm: string, 绘制使用的算法,包括"DDA"和"Bresenham"

绘制多边形

drawPolygon id x0 y0 x1 y1 x2 y2 ... algorithm

id: string, 图元编号,每个图元的编号是唯一的

x0, y0, x1, y1, x2, y2 ... : int, 顶点坐标

algorithm: string, 绘制使用的算法,包括"DDA"和"Bresenham"

绘制椭圆(中点圆生成算法)

drawEllipse id x0 y0 x1 x1

id: string, 图元编号,每个图元的编号是唯一的

x0, y0, x1, y1: int, 椭圆矩形包围框的左上角和右下角顶点坐标

绘制曲线

drawCurve id x0 y0 x1 y1 x2 y2 ... algorithm

id: string, 图元编号,每个图元的编号是唯一的

x0, y0, x1, y1, x2, y2 ... : int, 控制点坐标

algorithm: string, 绘制使用的算法,包括"Bezier"和"B-spline"(三次均匀B样条曲线,曲线不必经过首末控制点)

图元平移

translate id dx dy

id: string, 要平移的图元编号

dx, dy: int, 平移向量

图元旋转

rotate id x y r

id: string, 要旋转的图元编号

x, y: int, 旋转中心

r: int, 顺时针旋转角度(°)

图元缩放

scale id x y s

id: string, 要缩放的图元编号

x, y: int, 缩放中心

s: float, 缩放倍数

对线段裁剪

clip id x0 y0 x1 y1 algorithm

id: string, 要裁剪的线段编号

x0, y0, x1, y1: int, 裁剪窗口的左上角和右下角顶点坐标

algorithm: string, 裁剪使用的算法,包括"Cohen-Sutherland"和"Liang-Barsky"

说明:

参考CG_demo/input.txt,测试时保证所有指令都是合法的

图元不需要填充内部颜色

不需要对椭圆进行旋转

3. 进度报告/系统报告要求

在上个月报告的基础上添加本月新的内容即可,无需从头重写

报告内容包括:

已完成或拟采用算法的原理介绍、自己的理解、对比分析等

已完成或拟采用的系统框架、交互逻辑、设计思路等

介绍自己系统中的巧妙的设计、额外的功能、易用的交互、优雅的代码、好看的界面等(可选)

请附上联系方式(邮箱或QQ等),以便出现问题时及时联系

需注明在实现作业过程中使用的参考资料,包括技术博客等

可添加附加材料(觉得需要附加说明的代码等)

使用助教提供的Word或LaTeX文档模板撰写报告,Word需要另存为或打印为pdf文件后再提交

4. 系统使用说明书要求

说明开发环境,包括用到的第三方库及其版本

对系统每个功能进行介绍并截图展示运行结果,清楚说明系统操作方式

需要生成为pdf文件后提交

5. 系统演示视频要求

展示你的GUI程序中实现的所有功能

直接录制的视频通常体积较大,请压制后再提交:

可安装ffmpeg后,用以下指令压制:

ffmpeg -i input.mov -b:v 4000k output.mp4

也可自行探索更合适的压制参数,或者使用其他压制工具

前两次进度报告不要提交视频文件

6. 测试环境说明

CLI程序原则上只允许依赖numpy和pillow两个第三方库;GUI程序如果有其他特殊需求,要在系统使用说明书中注明。

7. 开发环境配置

不必和测试环境完全一致,python和python库的小版本不同一般不会影响程序运行。

简单方法一:

安装Anaconda,大而全,包含了numpy、Pillow、PyQt5和很多其他常用库

简单方法二:

直接在测试环境虚拟机中开发,需要自行配置IDE/编辑器。

虚拟机文件下载地址,密码:cg2020

IDE/编辑器选择:

8. 评分标准

核心算法模块+CLI程序:40分

由评分脚本自动运行程序,给定输入文件,比较生成的图像与标准答案(有容错机制,不要求像素级一致)

对于没有得到满分的程序,我们会人工二次检查

GUI程序+系统演示视频:30分

通过鼠标交互实现2.2节中的所有功能,即可得到满分

实现额外的图形学功能、重新设计更好的程序架构和交互逻辑等,能够提升给报告评分时的宽容度

进度报告+系统报告+系统使用说明书:30分

按时提交进度报告能够提升评分时的宽容度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值