數據類設計_圖片類設計之4_規則類圖形混合算法(前端架構)

前言

? ? ? ? 學的東西多了,要想辦法用出來.C和C++是偏向底層的語言,直接與數據打交道.嘗試做一些和數據方面相關的內容

引入

? ? ? ? 接續上一篇,討論圖片類型設計出來后在場景中如何表達,以及圖片的混合算法.前面的內容屬于鋪墊和基礎,這篇內容和實際聯系起來了.

背景圖和前景圖

? ? ? ? 這里筆者想先引入兩個概念:背景圖和前景圖.

? ? ? ? 實際表達的圖片中,都是以圖片混合而存在的,一片色的圖幾乎沒有存在的空間,例如在當前頁面截取一張圖:

? ? ? ? 他外面是個矩陣圖,里面有一些字符,還有一個跑道圖.此時矩陣圖被稱作背景圖,字符和跑道圖是前景圖.

????????在跑道圖中,跑道圖是背景圖,"去查看"這三個字是前景圖.

圖片的混合

? ? ? ? 前面的圖片類設計出來后,只是說明了圖片由一堆點組成,還沒有實際顯示(當然這里的顯示也不是在屏幕上顯示,還需要調用虛擬內存寫到顯卡的寄存器中才行,本貼暫不討論).

? ? ? ? 思考:圖片作為一個對象或者散點集合,調取后出現在新空間中,最重要的是什么?答案是:位置

? ? ? ? 而怎樣才方便把位置表達出來?答案是:矩陣類對象Matrix作背景圖.

? ? ? ? 示意圖:

????????????????????????????????????????

? ? ? ? 前面提到過每張圖片都有著一個隱藏屬性:基點.他其實表示了兩個屬性:在原來坐標系中x坐標原點和y坐標原點.所以一張圖可以被看作:以矩陣類對象為背景圖,混合跑道圖,生成圖a;再以圖a(仍然是矩陣類對象)混合"發布博客"這四個字符圖.即:圖片生成=兩次混合

混合算法--規則型圖形

? ? ? ? 借助基點,一個矩陣類對象作輔助,寫出對應代碼.

? ? ? ? 形式選擇:用全局函數還是類方法來寫?如果是Java,純面向對象的語言,無疑用工具類方法來寫.C++可在兩者中選擇.筆者不想用類方法,因為他能表達更多東西(比如作動畫時需要覆蓋原有圖片),這里就用全局函數來表達了.

? ? ? ? 注意:每種類型的圖,混合算法不一樣.以上述圖片為例,寫出圓角矩陣類和矩陣圖混合的代碼如下:

//混合圓角矩陣類對象
Matrix& mix_fillet_matrix(short x_ref,short y_ref,Matrix & mx,Fillet_Matrix& fm)
{//得到指向前景圓角矩陣的迭代器vector<vector<Reg_Point>>::iterator itfm=fm.fillet_matrix.begin();   vector<vector<Reg_Point>>::iterator itfm_end=fm.fillet_matrix.end();  //得到圓角矩陣總行數 //得到指向背景矩陣的迭代器(指針)//標記下一行是開始寫的,不對,用的是C語言中的方法,即指向二維數組的指針化成指向一維數組的指針//vector<vector<Reg_Point>>::iterator itmx=mx.matrix.begin()+x_ref*mx.height+y_ref; //x_ref是圓角矩陣基點,傳入背景矩陣時的坐標,因此指向背景矩陣的迭代器,應指向偏移后的那一行vector<vector<Reg_Point>>::iterator itmx=mx.matrix.begin()+x_ref;for(int n=0;itfm<itfm+fm.radius;itfm++,n++)                     //圓角矩陣前r行//背景矩陣每列指針生成,背景矩陣列指針,需加上偏移量vector<Reg_Point>::iterator itmxs=(*itmx).begin()+y_ref;    for(itfms=(*itfm).begin();itfms!=(*itfm).end();itfms++){//背景矩陣指針偏移,第一次前進n個點,以后每行減少1個itmxs=itmxs+radius-n;  //點信息寫入(*itmxs).red=(*itfms).red;   (*itmxs).green=(*itfms).green;  (*itmxs).blue=(*itfms).blue;    itmxs++;                          }itmx++;    //背景矩陣向下偏移一行}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++;    //背景矩陣向下偏移一行}for(int n=0,itfm=itfm_end-radius;itfm!=itfm_end;itfm++,n++)   //圓角矩陣后r行vector<Reg_Point>::iterator itmxs=(*itmx).begin()+y_ref;   for(itfms=(*itfm).begin();itfms!=(*itfm).end();itfms++){//背景矩陣指針偏移,第一次進1個點,最后進r個點itmxs=itmxs+n+1;(*itmxs).red=(*itfms).red;   (*itmxs).green=(*itfms).green;  (*itmxs).blue=(*itfms).blue;    itmxs++;                          }itmx++;    //背景矩陣向下偏移一行}return mx;
}

代碼說明:

? ? ? ? 1.x_ref和y_ref是圓角矩陣寫入矩陣類對象時的坐標偏移,影響矩陣類對象迭代器的位置

? ? ? ? 1.看起來有些雜亂,大段重復代碼一般不會出現在工程中,只是為了看得清楚一些.就算工程代碼出現了較大量重復,只要沒人說也沒關系(筆者臆想)

? ? ? ? 2.因為沒有實際驗證,所以可能有點數錯誤,但問題應該不大,很好改正不用糾結

? ? ? ? 3.代碼有一個看點:二維數組的遍歷,如何從一個二維數組寫入另一個二維數組:兩邊指針偏移,看起來時間復雜度高,但運算量不大.而且既然選擇了二維數組無可避免.

? ? ? ? 4.注意:預設的圓角矩形尺寸小于矩陣類對象,也就是完全能被包括進去

預告

? ? ? ? 不規則圖片的混合算法,混合類圖形類型建立

鳴謝

????????筆者另一篇帖子數據在硬件和軟件中的表示-CSDN博客里有求下載鏈接,如果您感覺有所幫助,請幫忙點擊,下載,提高等級

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73308.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【openwebui 搭建本地知識庫(RAG搭建本地知識庫)】

安裝準備 openwebui 這個本地安裝之前寫過使用python安裝。也可以直接用docker 命令 docker run --rm -d \-p 3080:8080 \-p 3081:8081 \-e WEBUI_AUTHtrue \-e DEFAULT_LOCALEcn \-e GLOBAL_LOG_LEVEL"INFO" \-e AIOHTTP_CLIENT_TIMEOUT100 \--privilegedtrue \-…

Nginx的流式響應配置詳解

現在大模型場景繁多&#xff0c;項目中涉及nginx轉發大模型的流式數據時&#xff0c;需配置nginx的轉發策略&#xff1a; location /streaming {proxy_pass http://backend_server;proxy_cache off; # 關閉緩存proxy_buffering off; # 關閉代理緩沖chunked_transfer_encoding …

git使用命令總結

文章目錄 Git 復制創建提交步驟Git 全局設置:創建 git 倉庫:已有倉庫? 遇到問題解決辦法&#xff1a;問題一先git pull一下&#xff0c;具體流程為以下幾步&#xff1a; 詳細步驟 Git 復制 git clone -b RobotModelSetting/develop https://gitlab.123/PROJECT/123.git創建提…

flutter 圖片資源路徑管理

1. 創建統一資源管理類 創建一個單獨的 Dart 文件&#xff08;比如 manager.dart&#xff09;&#xff0c;將所有圖片路徑集中管理。這樣在引用圖片時&#xff0c;不需要每次都手動輸入完整路徑&#xff0c;只需通過常量引用即可。 //manager.dartclass Manager { static co…

Android Retrofit 框架配置與構建模塊深入源碼分析(六)

一、引言 Retrofit 是一個在 Android 和 Java 開發中廣泛使用的類型安全的 HTTP 客戶端。它通過簡潔的 API 設計&#xff0c;使得網絡請求的處理變得高效且易于管理。配置與構建模塊作為 Retrofit 的基礎部分&#xff0c;承擔著初始化和定制 Retrofit 實例的重要任務。開發者可…

80.Dictionary 字典 C#例子

使用 C# 中的 Dictionary 數據結構 在 C# 中&#xff0c;Dictionary<TKey, TValue> 是一個非常強大的數據結構&#xff0c;用于存儲鍵值對。它提供了高效的查找、插入和刪除操作&#xff0c;適用于需要快速訪問數據的場景。本文將通過一個簡單的示例&#xff0c;介紹如何…

tomcat負載均衡配置

這里拿Nginx和之前做的Tomcat 多實例來實現tomcat負載均衡 1.準備多實例與nginx tomcat單機多實例部署-CSDN博客 2.配置nginx做負載均衡 upstream tomcat{ server 192.168.60.11:8081; server 192.168.60.11:8082; server 192.168.60.11:8083; } ser…

C語言中scanf(“%c“,s)會出現的問題

scanf("%c%c", &word[0], &word[1]);的行為與輸入緩沖區的內容密切相關。你提到輸入ab后&#xff0c;word[0]是\n&#xff0c;這通常是因為輸入緩沖區中殘留了換行符&#xff08;\n&#xff09;。 一、原因分析 換行符殘留 若在輸入ab之前有其他輸入操作&a…

SealOS部署k8s集群(單節點)

一、 先決條件 每個集群節點應該有不同的主機名。需要在 K8s 集群的第一個 master 節點上運行 sealos run 命令。建議使用干凈的操作系統來創建集群。不要自己裝 Docker&#xff01;支持大多數 Linux發行版&#xff0c;但內核版本建議5以上。例如&#xff1a;Ubuntu、CentOS、…

Linux 服務器安全配置:密碼復雜度與登錄超時設置

Linux服務器安全配置指南:密碼復雜度與登錄超時設置 一、密碼復雜度設置 通過PAM模塊pam_cracklib.so實現密碼強度策略,配置文件: system-auth該文件主要用于定義系統范圍內的認證策略,涵蓋了用戶登錄、su 命令切換用戶、sudo 權限提升等多種認證場景。當用戶嘗試進行系…

AI Agent開發框架分析:前端視角

1. Mastra (https://mastra.ai/docs) 優點&#xff1a; 提供直觀的界面構建器&#xff0c;適合無代碼/低代碼開發支持JavaScript/TypeScript&#xff0c;可直接集成到前端項目可視化工作流設計&#xff0c;降低入門門檻內置多種UI組件&#xff0c;加速前端開發 缺點&#xf…

linux上使用unsloth微調大模型的環境踩坑之路-4070ti、4090

我們實驗室有2套環境 一套&#xff1a;4070ti。安裝了cuda12.4 一套&#xff1a;3張4090.安裝了cuda12.4 現在開始給第一套裝能運行unsloth能運行的環境 第一步&#xff1a;開始創建虛擬環境 conda create -n test_env python3.11 第二步&#xff1a;進入虛擬環境 conda activa…

網絡安全演練有哪些形式

OPENVAS使用 1、確定指定IP是否能ping通 2、創建掃描目標 3、創建掃描任務&#xff08;scan management →newtask&#xff09; 4、開始任務start 5、查看掃描細節 6、查看掃描結果&#xff0c;包含漏洞詳細信息&#xff0c;亦可到處PDF文件 7、導出掃描結果報告 8、為…

ConcurrentModificationException:檢測到并發修改完美解決方法

&#x1f6a6; ConcurrentModificationException&#xff1a;檢測到并發修改完美解決方法 &#x1f4a1; 摘要 1. 什么是ConcurrentModificationException&#xff1f;&#x1f914; 2. ConcurrentModificationException的常見場景 &#x1f6a6; 2.1 使用for-each循環遍歷集合…

電路原理(電容 集成電路NE555)

電容 1.特性&#xff1a;充放電&#xff0c;隔直流&#xff0c;通交流 2.電容是通過聚集正負電荷來存儲電能的 3.電容充放電過程可等效為導通回路 4.多電容并聯可以把容量疊加&#xff0c;但是多電容串聯就不會&#xff0c;只會疊加電容的耐壓值。 6.電容充放電時相當于通路&a…

深入解析 React 最新特性:革新、應用與最佳實踐

深入解析 React 最新特性&#xff1a;革新、應用與最佳實踐 1. 引言 React 作為前端開發的核心技術之一&#xff0c;近年來不斷推出 新的 API 和優化機制&#xff0c;從 Concurrent Rendering&#xff08;并發模式&#xff09; 到 Server Components&#xff08;服務器組件&a…

【氮化鎵】高輸入功率應力誘導的GaN 在下的退化LNA退化

2019年,中國工程物理研究院電子工程研究所的Tong等人基于實驗與第一性原理計算方法,研究了Ka波段GaN低噪聲放大器(LNA)在高輸入功率應力下的退化機制。實驗結果表明,在27 GHz下施加1 W連續波(CW)輸入功率應力后,LNA的增益下降約1 dB,噪聲系數(NF)增加約0.7 dB。進一…

C#程序員接口調用工具與方法

作為專注于接口調用的C#軟件工程師&#xff0c;以下工具和方法能顯著提升開發效率與代碼質量&#xff1a; 一、接口開發與測試自動化工具 1. API測試與Mock工具 Postman Newman 支持RESTful/GraphQL接口調試與自動化測試&#xff0c;通過集合&#xff08;Collection&#xf…

Spring Boot項目中集成sa-token實現認證授權和OAuth 2.0第三方登錄

OAuth 2.0第三方登錄 OAuth 2.0 是一種授權協議&#xff0c;允許第三方應用在不暴露用戶密碼的情況下訪問用戶的資源。它通常用于第三方登錄場景&#xff0c;例如使用GitHub、Google等社交平臺進行登錄。 在sa-token框架中&#xff0c;OAuth 2.0第三方登錄可以通過集成sa-tok…

數字化新零售與 AI 大模型,如何重塑大健康賽道??

在數字化浪潮中&#xff0c;大健康賽道正經歷深刻變革。數字化新零售營銷模式的興起&#xff0c;與 AI 大模型的強大能力相結合&#xff0c;為大健康領域帶來了全新的發展機遇。 數字化新零售營銷模式融合線上線下&#xff0c;運用大數據、云計算分析消費者行為&#xff0c;實…