- [2024/03/05] 3月提交地址已更新 https://box.nju.edu.cn/u/d/fa53352eb3f94085b5a8/ 密码 cg2024
- 大作业3月报告提交日期为3月31日晚24:00,请勿错过提交期限
-
关于绘制时的纵坐标转换是什么意思?
需要实现的绘制坐标系的坐标原点在屏幕左上方(往右为x正方向,往下为y正方向),而常规的二维坐标系是左下方为坐标原点(往右为x正方向,往上为y正方向)。
请注意:Pillow库的早期版本以左下角为坐标原点,因此在cg_cli.py 37行提供的实例代码中通过行的运算变换了坐标原点。在编写实验代码时,请根据自己使用的库版本调整代码,以最终输出的视觉结果为主,坐标原点位于画布左上方
-
操作指令如果出现旋转椭圆怎么办?
测试数据不会出现规定之外的非法操作
本课程作业是横跨一学期的项目,要求跟随课程进度在项目中实现各种图形学算法,最终完成一个完整的图形学系统,进度自由安排,3月31日
、4月30日
、5月31日
提交进度报告即可,6月底
提交系统报告、完整的系统、系统使用说明书和系统演示视频,最后一次的具体时间时间视教学情况以及学校考试安排情况而定。
-
截止时间:
最后提交日的
23:59
-
提交方式:
提交前请仔细检查压缩包中是否已包含所有必要内容(系统代码、系统报告、使用说明书、演示视频),务必按要求组织文件结构和命名文件。
3月提交地址:https://box.nju.edu.cn/u/d/fa53352eb3f94085b5a8/
3月提交期限:3月31日晚24:00,请勿错过提交期限
查看已提交的文件:https://box.nju.edu.cn/d/435ce87bf20e4463a85a/
密码:cg2024
-
提交内容及命名方式:
3月、4月、5月只需要提交进度报告,命名方式“学号.pdf”。例如“171860001.pdf”。当提交错误,或有内容更新时,加上“_v2”、“_v3”等后缀重新提交,例如“171860001_v2.pdf”。以截止时间前最晚的提交为准
6月提交系统代码、系统报告、使用说明书以及演示视频,并压缩成"7z"文件,命名方式“学号.7z”,当提交错误或有内容更新,处理方式同上
!!!重要
:请务必按要求命名,以免评分和查重时出现意外 -
最终报告文件结构:
学号_月份 |- 学号_报告.pdf |- 学号_说明书.pdf |- 学号_演示.mp4 |- source | |- cg_algorithms.py | |- cg_cli.py | |- cg_gui.py | |- ... |- ...
例如
!!!重要
:请务必按要求组织文件结构,以免评分和查重时出现意外
使用Python3语言编程,实现一个绘图系统
- 核心算法模块(各种图元的生成、编辑算法):cg_algorithms.py
- 只允许依赖math库
- 参考CG_demo/cg_algorithms.py
- 命令行界面(CLI)程序:cg_cli.py
-
读取包含了图元绘制指令序列的文本文件,依据指令调用核心算法模块中的算法绘制图形以及保存图像
-
程序接受两个外部参数:指令文件的路径和图像保存目录
-
测试程序时的指令格式如下:
python cg_cli.py input_path output_dir
-
- 用户交互界面(GUI)程序:cg_gui.py
CG_demo仅提供了一种简单的系统架构及交互逻辑,可以直接在此基础上丰富、优化功能。
每行一条指令,包括:
-
重置画布
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-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,测试时保证所有指令都是合法的
- 图元不需要填充内部颜色
绘制图像时需要转换坐标:图像坐标系的y轴方向是反的,所以坐标(x,y)的点应当绘制在图像中(x,height-1-y)坐标的像素上--->绘制坐标与屏幕坐标统一,以左上为原点,x轴指向右,y轴指向下,根据输出结果自行调整- 不需要对椭圆进行旋转
- 平移、旋转以绘制出来的图像的视觉效果为准
-
在上个月报告的基础上添加本月新的内容即可,无需从头重写
-
报告内容包括:
- 已完成或拟采用算法的原理介绍、自己的理解、对比分析等
- 已完成或拟采用的系统框架、交互逻辑、设计思路等
- 介绍自己系统中的巧妙的设计、额外的功能、易用的交互、优雅的代码、好看的界面等(可选)
-
请附上联系方式(邮箱或QQ等),以便出现问题时及时联系
-
需注明在实现作业过程中使用的参考资料,包括技术博客等
-
可添加附加材料(觉得需要附加说明的代码等)
-
使用助教提供的Word或LaTeX文档模板撰写报告,Word需要另存为或打印为pdf文件后再提交。模板见图形学群文件:图形学实习作业资料文件夹
- 说明开发环境,包括用到的第三方库及其版本
- 对系统每个功能进行介绍并截图展示运行结果,清楚说明系统操作方式
- 需要生成为pdf文件后提交
- 展示你的GUI程序中实现的所有功能
- 直接录制的视频通常体积较大,请压制后再提交:
可安装ffmpeg后,用以下指令压制:
ffmpeg -i input.mov -b:v 4000k output.mp4
- 前三次进度报告
不要
提交视频文件
测试环境为:
CLI程序原则上只允许依赖numpy和pillow两个第三方库;GUI程序如果有其他特殊需求,要在系统使用说明书中注明。
不必和测试环境完全一致,python和python库的小版本不同一般不会影响程序运行。
请注意:请在报告中注明Python,numpy,pillow,pyqt的适用版本
-
简单方法一:
安装Anaconda,大而全,包含了numpy、Pillow、PyQt5和很多其他常用库
-
简单方法二:
直接在测试环境虚拟机中开发,需要自行配置IDE/编辑器。
虚拟机文件下载地址,密码:cg2020 (虚拟机内环境登录账号:cg 密码:cg)
IDE/编辑器选择:
- PyCharm:功能强大
- Spyder:Anaconda自带
- VSCode+Python extension:轻量级
- ...
- 核心算法模块+CLI程序:40分
由评分脚本自动运行程序,给定输入文件,比较生成的图像与标准答案(有容错机制,不要求像素级一致)
对于没有得到满分的程序,我们会人工二次检查
- GUI程序+系统演示视频:30分
通过鼠标交互实现2.2节中的所有功能,即可得到满分
实现额外的图形学功能、重新设计更好的程序架构和交互逻辑等,能够提升给报告评分时的宽容度
- 进度报告+系统报告+系统使用说明书:30分
按时提交进度报告能够提升评分时的宽容度