【Canvas與旗幟】二十角金盤德國旗

【成圖】

1

2

3

4

5

【代碼】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>多角金盤德國旗 Draft1</title><style type="text/css">.centerlize{margin:0 auto;width:1200px;}</style></head><body onload="init();"><div class="centerlize"><canvas id="myCanvas" width="12px" height="12px" style="border:1px dotted black;">如果看到這段文字說您的瀏覽器尚不支持HTML5 Canvas,請更換瀏覽器再試.</canvas></div></body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 將全體代碼(從<!DOCTYPE到script>)拷貝下來,粘貼到文本編輯器中,
* 另存為.html文件,再用chrome瀏覽器打開,就能看到實現效果。
******************************************************************/// canvas的繪圖環境
var ctx;// 高寬
const WIDTH=512;
const HEIGHT=512;// 舞臺對象
var stage;//-------------------------------
// 初始化
//-------------------------------
function init(){// 獲得canvas對象var canvas=document.getElementById('myCanvas');  canvas.width=WIDTH;canvas.height=HEIGHT;// 初始化canvas的繪圖環境ctx=canvas.getContext('2d');  ctx.translate(WIDTH/2,HEIGHT/2);// 原點平移// 準備stage=new Stage();    stage.init();// 開幕animate();
}// 播放動畫
function animate(){    stage.update();    stage.paintBg(ctx);stage.paintFg(ctx);     // 循環if(true){//sleep(100);window.requestAnimationFrame(animate);   }
}// 舞臺類
function Stage(){// 初始化this.init=function(){}// 更新this.update=function(){    }// 畫背景this.paintBg=function(ctx){ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏    }// 畫前景this.paintFg=function(ctx){// 底色/*ctx.save();ctx.fillStyle = "white";ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);ctx.restore();*/const R=220;//基準尺寸// #1 上下漸變金盤ctx.save();    var r=R*1.00;var gnt=ctx.createLinearGradient(0,-r,0,r);gnt.addColorStop(0,"rgb(225,199,125)");gnt.addColorStop(1,"rgb(150,103,49)");drawSolidCircle(ctx,0,0,r,gnt);ctx.restore();// #2 鋸齒邊ctx.save();    var r=R*1.00;ctx.fillStyle="black";// 1drawSawtoothLoop(ctx,0,0,20,r*1.05,r*0.95);    ctx.fill();ctx.fillStyle="rgb(243,233,146)";// 2drawSawtoothLoop(ctx,0,0,20,r*1.03,r*0.93);    ctx.fill();ctx.fillStyle="black";// 3drawSawtoothLoop(ctx,0,0,20,r*1.01,r*0.91);    ctx.fill();ctx.restore();// #3 上下漸變金圈ctx.save();    var r=R*0.85;var gnt=ctx.createLinearGradient(0,-r,0,r);gnt.addColorStop(0,"rgb(221,193,119)");gnt.addColorStop(0.25,"rgb(177,130,58)");gnt.addColorStop(0.375,"rgb(228,211,131)");gnt.addColorStop(0.5,"rgb(144,91,41)");gnt.addColorStop(0.625,"rgb(169,108,41)");gnt.addColorStop(0.75,"rgb(216,158,58)");gnt.addColorStop(1,"rgb(220,169,64)");drawSolidCircle(ctx,0,0,r,gnt);drawSolidCircle(ctx,0,0,R*0.83,"black");ctx.restore();// #4 環狀橄欖枝ctx.save();    var n=32;var r=R*0.70;drawLeftOliver(ctx,0,0,r,n,Math.PI/2,Math.PI/2*3-Math.PI/18,Math.PI/6,Math.PI/4,gnt);// 左枝drawRightOliver(ctx,0,0,r,n,-Math.PI/2+Math.PI/18,Math.PI/2,Math.PI/6,Math.PI/4,gnt);// 右枝ctx.fillStyle=gnt;// 上方十字drawIronCross(ctx,0,-r,r*0.18,r*0.075);ctx.fill();drawSolidCircle(ctx,0,r,R/220*9,gnt);// 下方圓球ctx.restore();// #5 玻璃光ctx.save();    var r=R*0.81;var gnt=ctx.createLinearGradient(0,-r,0,r);gnt.addColorStop(0,"rgba(255,255,255,0.3)");gnt.addColorStop(0.5,"rgba(255,255,255,0.15)");gnt.addColorStop(1,"rgba(255,255,255,0.0)");drawSolidCircle(ctx,0,0,r,gnt);drawSolidCircle(ctx,0,0,R*0.60,"black");ctx.restore();// #6 上下漸變金圈ctx.save();    var r=R*0.58;var gnt=ctx.createLinearGradient(0,-r,0,r);gnt.addColorStop(0,"rgb(255,253,162)");gnt.addColorStop(0.5,"rgb(212,175,68)");gnt.addColorStop(1,"rgb(171,137,48)");drawSolidCircle(ctx,0,0,r,gnt);drawSolidCircle(ctx,0,0,R*0.565,"black");ctx.restore();// #7 德國旗ctx.save();    var r=R*0.545;ctx.beginPath();ctx.arc(0,0,r,0,Math.PI*2,false);ctx.clip();var h=2*r;// 高寬var w=3*r;const N=3;var colors=["rgb(7,3,2)","rgb(190,25,39)","rgb(233,203,57)"];// 黑紅黃三色for(var i=0;i<N;i++){ctx.fillStyle=colors[i];drawRect(ctx,0,-h/3+i*h/3,w,h/3);ctx.fill();}    ctx.restore();// #8 月形玻璃光ctx.save();    var r=R*0.545;var center=createPt(0,0);var c=createPt2(center.x,center.y,r,Math.PI/6);var b=createPt2(center.x,center.y,r,Math.PI/2+Math.PI/6);var a=createPt2(center.x,center.y,r,-Math.PI/3);var gnt=ctx.createLinearGradient(0,-r,0,b.y);gnt.addColorStop(0,"rgba(255,255,255,0.3)");gnt.addColorStop(0.4,"rgba(255,255,255,0.15)");gnt.addColorStop(1,"rgba(255,255,255,0.0)");ctx.fillStyle=gnt;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.arc(center.x,center.y,r,-Math.PI/3,Math.PI/2+Math.PI/6,true);ctx.arc(c.x,c.y,r*Math.sqrt(2),Math.PI-Math.PI/12,-Math.PI/2-Math.PI/12,false);ctx.fill();ctx.restore();writeText(ctx,WIDTH/2-30,HEIGHT/2-5,"逆火制圖","8px consolas","lightgrey");// 版權}
}/*----------------------------------------------------------
函數:用于繪制鐵十字輪廓
ctx:繪圖上下文
x,y:鐵十字矩形中心坐標
sideLength:容納鐵十字的正方形邊長
thickness:鐵十字在正方形邊上的厚度
----------------------------------------------------------*/
function drawIronCross(ctx,x,y,sideLength,thickness){var r=sideLength*sideLength/thickness/2+thickness/8;var alpha=Math.asin(sideLength/2/r);var beta=Math.asin((1+0.25*thickness/r)/Math.sqrt(2))-Math.PI/4;ctx.save();ctx.translate(x,y);var a=createPt(sideLength/2,-thickness/2);var b=createPt(sideLength/2,+thickness/2);ctx.beginPath();ctx.moveTo(sideLength/2,-thickness/2);ctx.lineTo(sideLength/2,+thickness/2);ctx.arc(0,r+thickness/4,r,alpha-Math.PI/2,-Math.PI/2+beta,true);ctx.arc(r+thickness/4,0,r,Math.PI-beta,Math.PI-alpha,true);ctx.lineTo(-thickness/2,sideLength/2);ctx.arc(-r-thickness/4,0,r,alpha,beta,true);ctx.arc(0,r+thickness/4,r,-Math.PI/2-beta,-Math.PI/2-alpha,true);ctx.lineTo(-sideLength/2,-thickness/2);ctx.arc(0,-r-thickness/4,r,Math.PI/2+alpha,Math.PI/2+beta,true);ctx.arc(-r-thickness/4,0,r,-beta,-alpha,true);ctx.lineTo(thickness/2,-sideLength/2);ctx.arc(r+thickness/4,0,r,Math.PI+alpha,Math.PI+beta,true);ctx.arc(0,-r-thickness/4,r,Math.PI/2-beta,Math.PI/2-alpha,true);ctx.closePath();ctx.restore();        
}/*----------------------------------------------------------
函數:畫順時針橄欖枝
x:橫坐標
y:縱坐標
r:橄欖枝中心半徑
n:葉片對數
start:起始角度
end:中止角度
alpha: 葉片中線到圓弧的角度
beta:葉片中線到圓弧的角度
color:葉片顏色
----------------------------------------------------------*/
function drawLeftOliver(ctx,x,y,r,n,start,end,alpha,beta,color){const R=r;                // 橄欖枝中心半徑var   N=n;                // 有N對葉片    const START=start;        // 起始角度const END=end;            // 中止角度const STEP=(END-START)/N;// 步長        const ALPHA=alpha;        // 葉片中線到圓弧的角度const L=R/8;            // 葉片長度const BETA=beta;        // 葉片中線到圓弧的角度ctx.save();    ctx.translate(x,y);ctx.rotate(STEP);ctx.lineWidth=1;ctx.strokeStyle=color;// 畫中心圈ctx.beginPath();for(var i=-1;i<=N;i++){var theta=START+STEP*i;var r=R;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));ctx.lineTo(a.x,a.y);            }ctx.stroke();// 畫外側葉子for(var i=0;i<N;i++){var theta=START+STEP*i;var r=R;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));r=L/9;var angle=theta+ALPHA;var b=createPt(a.x+r*Math.cos(angle),a.y+r*Math.sin(angle));r=L/9*4/Math.cos(BETA);angle=theta+ALPHA+BETA;var d=createPt(b.x+r*Math.cos(angle),b.y+r*Math.sin(angle));r=L/9*4/Math.cos(BETA);angle=theta+ALPHA-BETA;var e=createPt(b.x+r*Math.cos(angle),b.y+r*Math.sin(angle));r=L;angle=theta+ALPHA;var c=createPt(a.x+r*Math.cos(angle),a.y+r*Math.sin(angle));ctx.fillStyle=color;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);ctx.quadraticCurveTo(d.x,d.y,c.x,c.y);ctx.quadraticCurveTo(e.x,e.y,b.x,b.y);            ctx.closePath();            ctx.fill();}// 畫內側葉子for(var i=0;i<N;i++){var theta=START+STEP*i;var r=R;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));r=L/9;var angle=theta-ALPHA+Math.PI;var b=createPt(a.x+r*Math.cos(angle),a.y+r*Math.sin(angle));r=L/9*4/Math.cos(BETA);angle=theta-ALPHA+Math.PI+BETA;var d=createPt(b.x+r*Math.cos(angle),b.y+r*Math.sin(angle));r=L/9*4/Math.cos(BETA);angle=theta-ALPHA+Math.PI-BETA;var e=createPt(b.x+r*Math.cos(angle),b.y+r*Math.sin(angle));r=L;angle=theta-ALPHA+Math.PI;var c=createPt(a.x+r*Math.cos(angle),a.y+r*Math.sin(angle));ctx.fillStyle=color;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);ctx.quadraticCurveTo(d.x,d.y,c.x,c.y);ctx.quadraticCurveTo(e.x,e.y,b.x,b.y);            ctx.closePath();            ctx.fill();}    ctx.restore();
}/*----------------------------------------------------------
函數:畫逆時針橄欖枝
x:橫坐標
y:縱坐標
r:橄欖枝中心半徑
n:葉片對數
start:起始角度
end:中止角度
alpha: 葉片中線到圓弧的角度
beta:葉片中線到圓弧的角度
color:葉片顏色
----------------------------------------------------------*/
function drawRightOliver(ctx,x,y,r,n,start,end,alpha,beta,color){const R=r;                // 橄欖枝中心半徑var   N=n;                // 有N對葉片    const START=start;        // 起始角度const END=end;            // 中止角度const STEP=(END-START)/N;// 步長        const ALPHA=alpha;        // 葉片中線到圓弧的角度const L=R/8;            // 葉片長度const BETA=beta;        // 葉片中線到圓弧的角度ctx.save();ctx.translate(x,y);ctx.lineWidth=1;ctx.strokeStyle=color;// 畫中心圈ctx.beginPath();for(var i=-1;i<=N;i++){var theta=START+STEP*i;var r=R;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));ctx.lineTo(a.x,a.y);            }ctx.stroke();// 畫外側葉子for(var i=0;i<N;i++){var theta=START+STEP*i;var r=R;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));r=L/9;var angle=theta-ALPHA;var b=createPt(a.x+r*Math.cos(angle),a.y+r*Math.sin(angle));r=L/9*4/Math.cos(BETA);angle=theta-ALPHA+BETA;var d=createPt(b.x+r*Math.cos(angle),b.y+r*Math.sin(angle));r=L/9*4/Math.cos(BETA);angle=theta-ALPHA-BETA;var e=createPt(b.x+r*Math.cos(angle),b.y+r*Math.sin(angle));r=L;angle=theta-ALPHA;var c=createPt(a.x+r*Math.cos(angle),a.y+r*Math.sin(angle));ctx.fillStyle=color;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);ctx.quadraticCurveTo(d.x,d.y,c.x,c.y);ctx.quadraticCurveTo(e.x,e.y,b.x,b.y);            ctx.closePath();            ctx.fill();}// 畫內側葉子for(var i=0;i<N;i++){var theta=START+STEP*i;var r=R;var a=createPt(r*Math.cos(theta),r*Math.sin(theta));r=L/9;var angle=theta+ALPHA-Math.PI;var b=createPt(a.x+r*Math.cos(angle),a.y+r*Math.sin(angle));r=L/9*4/Math.cos(BETA);angle=theta+ALPHA-Math.PI+BETA;var d=createPt(b.x+r*Math.cos(angle),b.y+r*Math.sin(angle));r=L/9*4/Math.cos(BETA);angle=theta+ALPHA-Math.PI-BETA;var e=createPt(b.x+r*Math.cos(angle),b.y+r*Math.sin(angle));r=L;angle=theta+ALPHA-Math.PI;var c=createPt(a.x+r*Math.cos(angle),a.y+r*Math.sin(angle));ctx.fillStyle=color;ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);ctx.quadraticCurveTo(d.x,d.y,c.x,c.y);ctx.quadraticCurveTo(e.x,e.y,b.x,b.y);            ctx.closePath();            ctx.fill();}    ctx.restore();
}/*----------------------------------------------------------
基本函數:用于繪制鋸齒環
ctx:繪圖上下文
x:圖形中心橫坐標
y:圖形中心縱坐標
n:齒輪齒數
outerRadius:齒輪外徑
innerRadius:齒輪內徑
----------------------------------------------------------*/
function drawSawtoothLoop(ctx,x,y,n,outerRadius,innerRadius){var angle=Math.PI/n;var gearArr=new Array();// 創建點數組for(var i=0;i<n*2;i++){var alpha=Math.PI/n*i;var bata=alpha+angle;var x1,y1,x2,y2;if(i%2==1){x1=innerRadius*Math.cos(alpha);y1=innerRadius*Math.sin(alpha);x2=outerRadius*Math.cos(bata);y2=outerRadius*Math.sin(bata);                }else{                x1=outerRadius*Math.cos(alpha);y1=outerRadius*Math.sin(alpha);x2=innerRadius*Math.cos(bata);y2=innerRadius*Math.sin(bata);}gearArr.push({x:x1,y:y1});gearArr.push({x:x2,y:y2});}ctx.beginPath();// 繪制輪廓for(var i=0;i<gearArr.length;i++){ctx.lineTo(gearArr[i].x,gearArr[i].y);}ctx.closePath();
}/*----------------------------------------------------------
基本函數:用于繪制矩形
ctx:繪圖上下文
x:矩形中心橫坐標
y:矩形中心縱坐標
width:矩形寬
height:矩形高
----------------------------------------------------------*/
function drawRect(ctx,x,y,width,height){ctx.beginPath();ctx.moveTo(x-width/2,y-height/2);ctx.lineTo(x+width/2,y-height/2);ctx.lineTo(x+width/2,y+height/2);ctx.lineTo(x-width/2,y+height/2);ctx.closePath();
}/*----------------------------------------------------------
基本函數:用于繪制實心圓
ctx:繪圖上下文
x:矩形中心橫坐標
y:矩形中心縱坐標
r:圓半徑
style:填充圓的方案
----------------------------------------------------------*/
function drawSolidCircle(ctx,x,y,r,style){ctx.fillStyle=style;ctx.beginPath();ctx.arc(x,y,r,0,Math.PI*2,false);ctx.closePath();ctx.fill();
}/*----------------------------------------------------------
基本函數:創建一個二維坐標點
baseX:基準點橫坐標
baseY:基準點縱坐標
radius:當前點到基準點的距離
theta:當前點到基準點的角度
Pt即Point
----------------------------------------------------------*/
function createPt2(baseX,baseY,radius,theta){var retval={};retval.x=baseX+radius*Math.cos(theta);retval.y=baseY+radius*Math.sin(theta);return retval;
}/*----------------------------------------------------------
基本函數:創建一個二維坐標點
x:橫坐標
y:縱坐標
Pt即Point
----------------------------------------------------------*/
function createPt(x,y){var retval={};retval.x=x;retval.y=y;return retval;
}/*----------------------------------------------------------
基本函數:延時若干毫秒
milliseconds:毫秒數
----------------------------------------------------------*/
function sleep(milliSeconds) {const date = Date.now();let currDate = null;while (currDate - date < milliSeconds) {currDate = Date.now();} 
}/*----------------------------------------------------------
基本函數:書寫文字
ctx:繪圖上下文
x:橫坐標
y:縱坐標
text:文字
font:字體
color:顏色
----------------------------------------------------------*/
function writeText(ctx,x,y,text,font,color){ctx.save();ctx.textBaseline="bottom";ctx.textAlign="center";ctx.font = font;ctx.fillStyle=color;ctx.fillText(text,x,y);ctx.restore();
}/*-------------------------------------------------------------
一個人的優點決定了他將來干什么,
而他的缺點決定了他能在這條路上能走多遠。
--------------------------------------------------------------*/
//-->
</script>

END

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

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

相關文章

Linux軟件編程:總結

一、Linux系統概述&#xff08;一&#xff09;Linux系統概述&#xff08;二&#xff09;Linux系統簡介1.常見的Linux系統&#xff1f;2.Linux操作系統是操作系統的核心&#xff0c;也成為內核&#xff0c;內核的主要功能&#xff1f;3.shell是操作系統的外殼&#xff0c;主要作…

【51單片機學習】直流電機驅動(PWM)、AD/DA、紅外遙控(外部中斷)

一、直流電機驅動&#xff08;PWM&#xff09;1.直流電機介紹步進電機的旋轉速度完全由編碼的通電時間決定的&#xff0c;可以用于精密控制。 舵機內部是一個直流電機加一個控制器&#xff0c;引出三根線&#xff0c;分別是正負極和編碼線&#xff0c;根據輸出電平的時間來控制…

ComfyUI Portrait Master肖像大師中文版

本文轉載自&#xff1a;ComfyUI Portrait Master肖像大師中文版 - Hello123工具導航 ** 一、產品定位與技術架構 肖像大師中文版是專為 AI 繪畫工具設計的提示詞生成插件&#xff0c;通過結構化參數控制實現精準人物肖像生成。它基于 ComfyUI 平臺開發&#xff0c;提供 193 國…

(Redis)內存淘汰策略

1. 為什么需要內存淘汰策略&#xff1f;Redis 是一個基于內存的高性能數據庫&#xff0c;所有數據都存儲在內存中。優點&#xff1a;讀寫速度極快。缺點&#xff1a;內存有限&#xff0c;存滿之后如果繼續寫入&#xff0c;就必須有一套策略來決定“刪掉誰&#xff0c;留下誰”。…

Eclipse 里Mybatis的xml的頭部報錯

需要進行Eclipse 配置 MyBatis 的DTD文件Window -> Preference -> Maven -> 勾選 (download artifact javadoc).

SpringBoot Web快速入門_從零搭建你的第一個Web應用

在 Java 企業級開發領域&#xff0c;SpringBoot 以其 “約定優于配置” 的理念徹底革新了傳統 Spring 應用的開發模式。根據 2023 年 JetBrains 開發者調查報告&#xff0c;超 65% 的 Java 開發者將 SpringBoot 選為 Web 開發的首選框架。其優勢顯著&#xff1a;快速啟動&#…

手持 Mid360 + RealSense 相機 + Jetson Orin 一體平臺

這篇博客是我們開源的一個項目介紹&#xff0c;包括3D結構件 STP 文件與常見 SLAM 工程在 Arm 設備上編譯手冊等&#xff0c;將 Livox Mid360、Realsense 相機、Nvidia Jetson Orin、定制電池放在了一個手持設備上&#xff0c;同時這個手持設備預留了底部螺紋孔&#xff0c;當你…

H7-TOOL固件2.31發布,支持250M示波器,支持IAR下載算法加載運行,上位機支持UTF-8編碼,增加多款脫機燒錄芯片支持

【PC軟件】V2.3.1 1. 脫機燒錄功能更新: - 添加芯片: - 自動填充文件名、Flash地址、Flash大小、SRAM地址和SRAM大小 - FLM算法文件不支持自動填寫文件名&#xff0c;當生成文件后需要手動更新 - 廠商列表欄鼠標右鍵菜單可復制廠商名 - 修復添加芯片排列次序的問題…

自然語言處理——06 遷移學習(上)

1 fasttext工具介紹 1.1 介紹 fasttext 是 Facebook AI Research&#xff08;FAIR&#xff09;開發的開源 NLP 工具包&#xff0c;專門用來解決文本相關任務&#xff0c;比如情感分析、文本分類&#xff08;判斷新聞屬于體育/財經等&#xff09;、識別“人名/地名”這類實體&a…

數據庫MVCC是什么

問題數據庫MVCC是什么我的回答MVCC&#xff0c;全稱是"多版本并發控制"(Multi-Version Concurrency Control)&#xff0c;是數據庫管理系統中常用的一種并發控制技術。說白了&#xff0c;它就是通過維護數據的多個版本&#xff0c;讓讀操作不會被寫操作阻塞&#xff…

游戲廣告投放數據分析項目:拆解投放的“流量密碼”

用數據說話&#xff1a;1441條投放記錄拆解游戲廣告投放的“流量密碼”一、數據概況 & 處理思路 先放一張數據全家福&#xff0c;字段 13 個&#xff0c;樣本 1441 條&#xff0c;缺失值 0&#xff0c;只做了一件事&#xff1a;把“未知大小”“無”等臟數據清洗掉。 impor…

數據庫服務語句應用

文章目錄&#x1f31f;數據庫語句應用介紹&#x1f340;數據庫語句分類介紹DDL&#xff08;Data Definition Language&#xff09;數據定義語言DCL&#xff08;Data Control Language&#xff09;數據控制語言DML&#xff08;Data Manipulation Language&#xff09;數據操作語…

解釋器模式與布爾表達式的C++實現

詳細探討一下解釋器模式(Interpreter Pattern)以及如何使用它來實現一個簡單的布爾表達式求值器。 第一部分:解釋器模式詳解 1. 模式定義與意圖 解釋器模式是一種行為設計模式,它給定一個語言,定義其文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中…

ELK 重難點解析以及最佳實踐

ELK 重難點解析以及最佳實踐 目錄 ELK簡介核心組件詳解使用技巧重難點解析Spring Boot集成具體場景使用最佳實踐 ELK簡介 什么是ELK ELK是一個開源的日志分析平臺&#xff0c;由三個核心組件組成&#xff1a; Elasticsearch: 分布式搜索引擎&#xff0c;用于存儲和檢索日…

【PyTorch】單對象分割項目

對象分割是在圖像中找到目標對象的邊界的過程。單目標分割的重點是自動勾勒出圖像中一個目標對象的邊界。對象邊界通常由二進制掩碼定義。 通過二進制掩碼&#xff0c;可以在圖像上覆蓋輪廓以勾勒出對象邊界。例如以下圖片描繪了胎兒的超聲圖像、胎兒頭部的二進制掩碼以及覆蓋在…

esp dl

放下了好多年 又回到了dl 該忘的也忘的差不多了 其實沒啥復雜的 只是不習慣 熟悉而已 好吧 現代的人工智能體 還是存在著很大的問題 眼睛 耳朵 思考 雖然功能是正常的 但距離&#xff02;真正&#xff02;(&#xff09;意思上的獨立意識個體 還是差別很大 再等個幾十年 看看…

基于django/python的服裝銷售系統平臺/服裝購物系統/基于django/python的服裝商城

基于django/python的服裝銷售系統平臺/服裝購物系統/基于django/python的服裝商城

詳解ThreadLocal<HttpServletRequest> requestThreadLocal

public static ThreadLocal<HttpServletRequest> requestThreadLocal ThreadLocal.withInitial(() -> null);一、代碼逐部分詳解 1. public static public&#xff1a;表示這個變量是公開的&#xff0c;其他類可以訪問。static&#xff1a;表示這是類變量&#xff0c…

Vue2 響應式系統設計原理與實現

文章目錄Vue2 響應式系統設計原理與實現Vue2 響應式系統設計原理與實現 Vue2 的響應式原理主要基于以下幾點&#xff1a; 使用 Object.defineProperty () 方法對數據對象的屬性進行劫持 當數據發生變化時&#xff0c;通知依賴該數據的視圖進行更新 實現一個發布 - 訂閱模式&a…

探索 JUC:Java 并發編程的神奇世界

探索 JUC&#xff1a;Java 并發編程的神奇世界 在 Java 編程領域&#xff0c;隨著多核處理器的普及和應用場景復雜度的提升&#xff0c;并發編程變得愈發重要。Java 并發包&#xff08;JUC&#xff0c;Java.util.concurrent&#xff09;就像是一座寶藏庫&#xff0c;為開發者提…