用程式設計對P5中的一些“線條”效果進行擴充
用程式設計對P5中的一些“線條”效果進行擴充
一.實現對介面line的擴充套件
1.實現動態的繪製直線,同時新增線寬和顏色的隨機生成。
核心程式碼:
push();
for(var i=1;i<res;i++)
{
var t = i/res;
var xt = lerp(x0,x1,t);
var yt = lerp(y0,y1,t);
var x = xt;
var y = yt;
strokeWeight(10);//設定線寬
stroke(random(0,255),random(0,255),random(0,255));//顏色隨機生成
line(xp,yp,x,y);
xp = x;
yp = y;
}
pop();
2.實現對sin曲線的擴充套件,形成類似聲波的線條。
核心程式碼:
for(var i=1;i<res;i++)
{
var t = i/res;
var xt = lerp(x0,x1,t);
var yt = lerp(y0,y1,t);
var x = xt + i;
var y = yt + radius *i* sin(100*i);
strokeWeight(5);
stroke(random(0,255),random(0,255),random(0,255));
line(xp,yp,x,y);
xp = x;
yp = y;
}
3.繪製sin函式時,用大小隨機的圓來代替直線。
核心程式碼:
for(var i=1;i<res;i++)
{
var t = i/res;
var xt = lerp(x0,x1,t);
var yt = lerp(y0,y1,t);
var x = xt + i;
var y = yt + radius*sin(50*i);
//r=random(100,250);g=random(100,250);b=random(100,250);
r=random(200,250);g=random(100,140);b=random(150,200);
fill(r,g,b,random(50,255));
var t=random(0.1,8);
ellipse(random(x-5,x+5),random(y-5,y+5),t,t);
xp = x;
yp = y;
}
//註釋這句就會出現動態的serin曲線
//nostroke();
4.用noise噪聲來繪製山丘
核心程式碼:
var noiseScale=0.01;
var noiseScale2=0.02;
for(var k=0;k<mountainNum;k++){
for(var x=0;x<width;x++){
var noiseVal=noise((-mouseX+x)*noiseScale+k*100);
var noiseVal2=noise((-mouseX+x+100)*noiseScale2+k*100);
stroke(230-40*k);
var mountainstall=height-mountainTall+noiseVal*160-50+noiseVal2*60+50*k;
line(x, mountainstall, x, height);
}
var tem=height-mountainstall+180+50*k;
mountainShade(tem,230-40*k,shade);在這裡插入程式碼片
5.通過滑鼠控制Bezier曲線的繪製。
核心程式碼:
var r=random(10,20);
stroke(random(10,150),random(100,250),random(100,250));
strokeWeight(2);
noFill();
bezier(mouseX,mouseY,mouseX-100,
mouseY+100,mouseX+100,mouseY-100,40,3);裡插入程式碼片
二.實現2D圖形的擴充套件(主要是circle)
1.隨機繪製大小顏色不一樣的圓
核心程式碼:
stroke(random(10,250),random(10,250),random(10,250));
var d=random(10,30);
//ellipse(mouseX,mouseY,d,d);
ellipse(random(0,weight),random(0,height),d,d);
2.繪製由內向外,圓的半徑依次增大,一個週期的變化,參考網址:https://m.yisu.com/zixun/158611.html
核心程式碼:
for(var i=13;i>0;i--){
var y=22*sin(PI*frameCount/30-13*(i-1));
if(y>=10){
a=y;
}
else{
a=0;
}
fill(0,93,172,a);
ellipse(x0,y0,a+50*i);
fill(0,93,172,a);
ellipse(x0,y0,25+50*(i-1));
}
3.繪製圓運動撞牆反彈並繼續運動。
實驗核心程式碼:
function bounceOnEdge() {
//if條件判斷
if (x >= width - ballSize / 2) {
xSpeed *= -1;
x = width - ballSize / 2;
}
if (x <= ballSize / 2) {
xSpeed *= -1;
x = ballSize / 2;
}
if (y >= height - ballSize / 2) {
ySpeed *= -1;
y = height - ballSize / 2;
}
if (y <= ballSize / 2) {
ySpeed *= -1;
y = ballSize / 2;
}
}
修改小球的大小,並不覆蓋小球運動的路徑時有:
在上面的基礎上進行擴充:
4.此外參考了一些其他部落格,由於程式碼量較大,以下僅展示結果:
上訴實驗的所有原始碼:
相關文章
- 如何透過連線資料庫的方式對線下應用進行線上擴充套件資料庫套件
- 進行SQL Server縱向擴充套件的必備條件KVSQLServer套件
- Java擴充-網路程式設計基礎Java程式設計
- CSS3滑鼠懸浮橫條從中間向兩邊擴充套件效果CSSS3套件
- Sentinel 的一些小擴充套件套件
- 在Javascript中進行面向切面程式設計JavaScript程式設計
- CSS3進度條效果程式碼CSSS3
- Rust 程式設計影片教程(進階)——019 sync 和 send trait 的可擴充套件併發Rust程式設計AI套件
- 併發程式設計之執行緒池的使用及擴充套件和優化程式設計執行緒套件優化
- MySQL中InnoDB引擎對索引的擴充套件MySql索引套件
- 遊戲中“血條”設計的進化史遊戲
- [譯]AppExtension程式設計指南:擴充套件基礎4APP程式設計套件
- [譯]AppExtension程式設計指南:擴充套件基礎1APP程式設計套件
- [譯]AppExtension程式設計指南:擴充套件基礎2APP程式設計套件
- [譯]AppExtension程式設計指南:擴充套件基礎3APP程式設計套件
- 怎樣用 Bash 程式設計:邏輯操作符和 shell 擴充套件程式設計套件
- 當在laravel中開發擴充套件時,如何將本地擴充套件載入進其他laravel專案中進行測試?Laravel套件
- SQL_Postgresql-一些擴充套件和應用SQL套件
- Rust 程式設計視訊教程(進階)——019 sync 和 send trait 的可擴充套件併發Rust程式設計AI套件
- dart系列之:你的地盤你做主,使用Extension對類進行擴充套件Dart套件
- 如何使用 SEGW 的 redefine 功能對 SAP 標準 OData 服務進行擴充套件套件
- 使用Apache Kafka對電子商務系統進行擴充套件的思路 - BogdanApacheKafka套件
- 如何設計高擴充套件的線上網頁製作平臺套件網頁
- 對xxl-job進行simpleTrigger並動態建立任務擴充套件套件
- 進行Windows Azure SQL Database的水平擴充套件GVWindowsSQLDatabase套件
- 優秀程式設計師都在用哪些Chrome擴充工具?程式設計師Chrome
- kotlin對ZipInputStream與ZipOutputStream的一些擴充工具(壓縮,解壓)Kotlin
- tf.tile()進行張量擴充套件套件
- Spring(11) - Introductions進行類擴充套件方法Spring套件
- 使用擴充套件SRAM設計的存內計算套件
- larabbs 使用的一些擴充總結
- 分享一些好用的 Chrome 擴充套件Chrome套件
- 用 TS + Vue 寫了一個在 Chrome 中執行 Prettier 格式化的擴充套件程式VueChrome套件
- 設計模式之開閉原則:對修改關閉,對擴充套件開放設計模式套件
- 追求程式碼質量: 用 AOP 進行防禦性程式設計程式設計
- LVM中對基於xfs的檔案系統進行擴容LVM
- 可擴充套件的使用者表設計套件
- 重構 - 設計API的擴充套件機制API套件