数据类设计_图片类设计_矩阵图类型和像素图类型设计的补充

前言

以矩阵图类型和像素图类型作为++图像类数据++的基础,但在使用过程中有个问题:矩阵图形和像素图形的尺寸---长和高没有表现出来,本贴对此做出分析.

引入

原帖数据类设计_图片类设计之7_矩阵图形类设计更新_实战之页面简单设计(前端架构)-CSDN博客里有对矩阵图形类的定义如下:

复制代码
//更新后的矩阵类定义
struct Matrix : public Reg_pic {
    short length;                             //表示长度的点个数
    short height;                             //表示高度的点个数
    short red;
    short green;
    short blue;
    vector<vector<Reg_point>> matrix;         //图,点的二维数组
    vector<Matrix> inner_matrix;              //更新时添加的属性,表示内部矩阵
    Matrix(short Length, short Height, short Red,
        short Green, short Blue)              //构造函数
    {
        vector<Reg_point> tmp;                //临时容器
        for (short i = 0; i < height; i++)
            for (short j = 0; j < length; j++)
            {
                tmp.push_back(Reg_point{ Red,Green,Blue });
            }
        matrix.push_back(tmp);                //临时容器内容添加到矩阵对象
    }
};

而点的类型定义在数据类设计_图片类设计之1_矩阵类设计(前端架构基础)-CSDN博客

复制代码
//规则点类
struct Reg_point{
    short red;
    short green;
    short blue;
}

像素图和像素点定义如下:

复制代码
//自由图形类(像素图)定义
struct Pixel_pic{
    vector<Pixel_point> pps;    //像素点集合
}
 
//像素点类型定义
struct Pixel_point{
    short x_cord;
    short y_cord;
    short red;
    short green;
    short blue;
}

复习数据的来源与访问

数据的来源

"数据=数据类型+参数"----通常情况下数据分三步得来:定义数据类型,给出参数,得到数据.

数据的访问

数据的访问有两种形式:

1.数据名或者指向数据对象的指针;

2.数据集合与查找算法---当把数据用某种数据结构放入数据集合时,由指向数据集合首元素的指针和定义的查找算法来访问数据

矩阵类图形类型分析

1.矩阵类对象的构造函数,符合数据来源的写法.

复制代码
//矩阵类构造函数
Matrix(short Length, short Height, short Red,short Green, short Blue)    

他表示建立一个长Length,宽Height,颜色分别为Red,Green,Blue的纯色矩阵对象.

这种情况下,Length和Height是核心属性,他们直接决定了数据对象的构成.也可以看作是一种"主动"的属性.

2.矩阵类对象由vector动态生成.

因为Matrix对象是由二维数组的点所构成,在后面的矩阵混合算法中,都是采用push_back()添加进对象的,所以此时的长和高,采用vector方法求出来.这是一种被动生成数据的写法.

于是可以给三个函数,分别为showSize() ;getLength()getHeight();表示计算尺寸,获得长度和高度.

复制代码
//更新后的矩阵类定义
struct Matrix : public Reg_pic {
    short length;                             //表示长度的点个数
    short height;                             //表示高度的点个数
    short red;
    short green;
    short blue;
    vector<vector<Reg_point>> matrix;         //图,点的二维数组
    vector<Matrix> inner_matrix;              //更新时添加的属性,表示内部矩阵
    Matrix(short Length, short Height, short Red,
        short Green, short Blue)              //构造函数
    {
        vector<Reg_point> tmp;                //临时容器
        for (short i = 0; i < height; i++)
            for (short j = 0; j < length; j++)
            {
                tmp.push_back(Reg_point{ Red,Green,Blue });
            }
        matrix.push_back(tmp);                //临时容器内容添加到矩阵对象
    }
    //以下至末尾为新添加代码
    void showSize(){                          //计算尺寸
        height=matrix.size();                 //计算高度
        auto mxd=matrix.begin();              //得到指向矩阵第一行的指针
        length=(*mxd).size();                 //取得这一行,得到其长度
    }

    short getLength(){                        //get长度
        return length;
    }

    short getHeight(){                        //get高度
        return height;
    }
                               
};

注意:被动生成数据的时候,核心属性是vector<vector<Reg_point>> matrix;

像素图形类分析

和矩阵数据类对象的第二种情况类似,他也是一种被动生成的数据.

复制代码
//自由图形类(像素图)定义
struct Pixel_pic{
    vector<Pixel_point> pps;    //像素点集合
    //以下为新增代码
    short getLength(){          //获得长度,最大x坐标
        short max=0;
        for(auto ppsd=pps.begin();ppsd!=pps.end();ppsd++){
            if(max<(*ppsd).x_cord){
                max=(*ppsd).x_cord;
            }
        }
    return max;
    }

    short getHeight(){          //获得高度,最大y坐标
        short max=0;
        for(auto ppsd=pps.begin();ppsd!=pps.end();ppsd++){
            if(max<(*ppsd).y_cord){
                max=(*ppsd).y_cord;
            }
        }
    return max;
    }

}

getLength()和getHeight();表示获得长度和高度

至此两种图形类型长和高的问题解决了.如果其他代码中需要用到这两个属性,可以表达出来.笔者就不更新之前的代码了.

回顾

实质上是对vector这种数据结构的认识,在C/C++定义的动态数组中,表示数据集合内元素个数的数字,也是一种被动的存在.

小结

除了上一帖引入了核心属性 ,这里由于vector的特殊性质,又引入了被动属性这个概念.

另外,编程重在理解(理解的重点还是数据---数据是程序中的重中之重),只要有足够的理解,代码不管是横着写竖着写,正着写反着写,都能写得出来,共勉.

相关推荐
虾球xz17 分钟前
游戏引擎学习第195天
c++·学习·游戏引擎
珹洺25 分钟前
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)
java·开发语言·前端·hive·hadoop·servlet·html
熙曦Sakura39 分钟前
【C++】map
前端·c++
黑贝是条狗42 分钟前
html 列表循环滚动,动态初始化字段数据
前端·javascript·html
Stardep1 小时前
算法学习11——滑动窗口——最大连续1的个数
数据结构·c++·学习·算法·leetcode·动态规划·牛客网
双叶8361 小时前
(C语言)学生信息表(学生管理系统)(基于通讯录改版)(正式版)(C语言项目)
c语言·开发语言·c++·算法·microsoft
萌萌哒草头将军1 小时前
🔥🔥🔥4 月 1 日尤雨溪突然宣布使用 Go 语言重写 Rolldown 和 Oxc!
前端·javascript·vue.js
搬砖的阿wei1 小时前
从零开始学 Flask:构建你的第一个 Web 应用
前端·后端·python·flask
萌萌哒草头将军1 小时前
🏖️ TanStack:一套为现代 Web 开发打造的强大、无头且类型安全的库集合 🔥
前端·javascript·vue.js
wen__xvn1 小时前
每日一题洛谷P8716 [蓝桥杯 2020 省 AB2] 回文日期c++
c++·算法·蓝桥杯