一、概述
本系统拟完成一个图形系统,对多种常见图形进行基本操作
系统功能
二维图形的输入:可输入或全部清除不同颜色的直线、矩形、圆、椭圆、多边形、曲线、铅笔工具
二维图形的编辑:对于直线、矩形、圆、椭圆、多边形、曲线,可以通过鼠标拖拽标出的控制顶点来进行编辑
二维图形的剪裁:可通过拖拽编辑矩形的剪裁窗口对当前直线进行剪裁
二维图形的变换:在直线、矩形、圆、椭圆、多边形、曲线内部可通过鼠标拖拽进行平移,通过按钮进行左右旋转和翻转,以及缩放
二维图形的存储:可将图形存储在选择的路径下
三维模型的显示:可选择加载OFF文件,显示对应的三维模型,并通过鼠标拖动转换视角
环境说明
IDE:Qt Creator 4.8.0
Qt版本:Qt 5.4.0 (mingw491_32)
开发语言:C/C++
Debuggers:GNU gdb 7.8 for MinGW 4.9.1 32bit
二、算法介绍
系统包括的算法主要是二维图形的操作、三维模型的显示和用户操作的响应。
2.1 二维图形
2.1.1 基本图形
对于各种图形,虽然其具体的实现细节有所不同(主要体现在图形的绘制),但它们都有一些公共的属性和操作,比如计算图形的范围和中心点的位置,以及图形平移、旋转、缩放操作。这些属性和方法的算法是相同的。
图形范围
对于直线、矩形、圆、椭圆、多边形、曲线,遍历其控制点的值,获得minX、maxX、minY、maxY。上述图形绘制后形成的所有点,不会有点的x值不在[minX, maxX]或y值不在[minY, maxY]中。四个值可以确定图形的范围,同时用于边框的绘制。
中心点
中心点位置为(centerX, centerY),其中centerX = (minX + maxX) / 2,centerY = (minY + maxY) / 2。中心点可用做旋转、缩放的基准点。
平移
图形的绘制依赖于控制点,因此只要更新每个控制点的信息即可。在图形平移方法中,传入的参数为x轴方向移动距离的值tx和y轴方向移动距离的值ty。对于(x, y)经平移(tx, ty)向量后的坐标为(x + tx, y + ty)。
旋转
图形旋转传入的参数为角度数θ。控制点(x, y)顺时针旋转θ后,是以中心点(centerX, centerY)为基准的,坐标变为(centerX + (x - centerX) cosθ - (y - centerY) sinθ, centerY + (x - centerX) sinθ + (y - centerY) cosθ )。