当前位置: 首页 > article >正文

数据类设计_图片类设计之7_矩阵图形类设计更新_实战之页面简单设计(前端架构)

前言

        学的东西多了,要想办法用出来.C和C++是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容

引入

        前面讲过的混合类型设计,实际上是矩阵类图形设计(名称已更新).他能够产生的视觉效果是这样的:

 注意:外层的矩形边框可以不存在,只是说明了图形存在于一个矩形区域内.

        特别是:矩阵对象之间不能层叠.这是区别矩阵类图形对象和自由图形类对象(在下一篇帖子讨论)的重要不同

        有人可能会问,第一层里的图像不就是层叠起来吗?注意,矩阵对象内部可以混合任何图像,但矩阵对象之间不能层叠,他必有矩形边.

矩阵图形类的分析

        矩阵图形类的优点:

        占用空间少.如上图所示,他可以建立许多层的矩阵图形,而矩阵类不需要存储坐标信息,用动态数组的对象来替代.

       矩阵图形类更新

        根据画出的矩阵图形类的样子,矩阵图形类更新如下:

//更新后的矩阵类定义
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>最外层界面设计

Matrix html_page(2560,1440,256,256,256);        //生成对象,假设2k分辨率,全白色

         说明:如果是放在windows里,把底部任务栏的尺寸扣掉,高度应低于1440.

        2>次外层设计

                1)次外层矩阵元素设计
//矩阵内第一层元素,也是矩阵对象的写法
Matrix hp1_1(300,500,256,256,256);    //意为界面内1层第1个矩阵对象
Matrix hp1_2(300,500,256,256,256);    //意为界面内1层第2个矩阵对象
...
...
                2)混合矩阵内容

                用前面的混合算法,把每个矩阵框的内容添加进去,因为前面只写了混合字符的算法,原帖地址:数据类设计_图片类设计之5_不规则类图形混合算法(前端架构)-CSDN博客所以借用

//字符对象混合到矩阵对象中,函数原型
Matrix& mix_zifu(short x_ref,short y_ref,Matrix& mx,Zifu& zf)

调用

hp1_1=mix_zifu(150,250,hp1_1,1);    //写入1到矩阵hp1_1中
hp1_2=mix_zifu(150,250,hp1_2,2);    //写入2到矩阵hp1_2中

产生的效果大概是这样的 :

        

为什么是大概呢?暂时不要纠结细节,字体位置还需要调整基点位置,达到居中或者偏左偏右等效果.

                3)生成的对象添加到外层页面中.
//添加次外层矩阵元素到最外层矩阵
html_page.inner_matrix.push_back(hp1_1);    //添加第1个内部矩阵到外部矩阵
html_page.inner_matrix.push_back(hp1_2);    //添加第2个内部矩阵到外部矩阵
                4)确定次外层矩阵在最外层中的位置

                再次使用矩阵混合算法,原帖在数据类设计_图片类设计之6_矩阵图形类设计(前端架构)-CSDN博客,里面虽没写,大概是这个样子

//借用圆角矩阵中间部分
    for(itfm=itfm+fm.radius;itfm<itfm_end-radius;itfm++)          //圆角矩阵中间也是矩阵  
        vector<Reg_Point>::iterator itmxs=(*itmx).begin()+y_ref;  
        for(itfms=(*itfm).begin();itfms!=(*itfm).end();itfms++){
             (*itmxs).red=(*itfms).red;   
             (*itmxs).green=(*itfms).green;  
             (*itmxs).blue=(*itfms).blue;    
             itmxs++;                          
        }
        itmx++;    //背景矩阵向下偏移一行
     }

        注意:

        1>这里用了硬编码,实际写的时候不要这么用,根据摆放的位置所决定.他表示第一个内部矩阵基点坐标200,200;第二个矩阵基点坐标200,500.

        2>为了写得好看用了遍历inner_matrix,实际上也要根据内部矩阵的实际位置来定.使用"operator[]"或者"at"函数来获得元素

for(pd=html_page.inner_matrix.begin();pd!=html_page.inner_matrix.end();pd++)
    {
        html_page=mix_matrix(200,200,html_page,pd);
        html_page=mix_matrix(200,500,html_page,pd);
    }

他表达出来的效果大概是这样: 

至此,页面框架设计完毕.不管里面有多少层矩阵,每个矩阵对象包含什么内容,都可以按照这个步骤来写.

补充

        1.页面的修改

        分两种情况:

        1>这个修改如果是固定内容的改变,需要修改的矩阵内容不需要马上表现出来,那么什么都不用变,在产品重新上线的时候,传入不同参数即可.

        2>如果是需要马上看见效果,调用mix算法,网页刷新时重新表现.

        2.内层矩阵位置的确定

        次外层hp1可以直接定位到最外层的基点位置.其他层(非次外层)的矩阵位置可能需要坐标转换

小结

        1>不经意间在页面元素类型设计时用到了散列算法.感叹很神奇,很强大.

        2>感觉出设计师和程序员的差别,架构师或者算法工程师掌握关键代码,把api交给程序员,剩下的就是"搬砖"的过程.不管需要什么内容都可以,分工明确.关键代码量也可能不会有多大.

        3>实现了"自顶向下"的设计.同时也是"面向对象"的不错体现,各人分工写各自页面元素,一层一层向上汇总,得到最终产品.例如,给你一个对象hp1_2_3_4,你明白自己要写第3层第4个矩阵的内容.写完后交给上一层(hp1_2_3),由他分配内容的位置

        4>页面刷新:由3>推导出,可以写出页面元素单独刷新或者全部刷新的代码

        5>挂了个名叫实战,里面的细节没完全整理.代码要多写,写着写着感觉就有了.

鸣谢

        笔者另一篇帖子数据在硬件和软件中的表示-CSDN博客里有求下载链接,如果您感觉有所帮助,请帮忙点击,下载,提高等级


http://www.kler.cn/a/593615.html

相关文章:

  • VLLM专题(十九)—兼容 OpenAI 的服务器
  • Matplotlib 柱形图
  • 波场trx质押能量租赁平台开发
  • 通信网络安全防护风险评估报告怎么写?范文模版分享
  • 剑指 Offer II 113. 课程顺序
  • NPN三极管基极接稳压管的作用
  • 识别并脱敏上传到deepseek/chatgpt的文本文件中的护照信息
  • companion object和object 从kotlin转java分析
  • Python+selenium,轻松搭建Web自动化测试框架
  • 稳定运行的以PostgreSQL数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
  • 【MyDB】7-客户端服务端通信之1-服务端客户端通信实现前言
  • deque
  • sql批量修改字段某一指定部分+修改重复编号
  • java TCP UDP 客户端访问例子和对比差异
  • 九、JavaScript作用域、预解析
  • 2025年高校辅导员考试题库及答案
  • numpy学习笔记9:numpy的广播机制详细解释
  • 【Transformer】架构:解锁自然语言处理的无限可能
  • 关于金融开发领域的一些专业知识总结
  • 第十三章,L2TP VPN