」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 JavaScript 探索生成藝術

使用 JavaScript 探索生成藝術

發佈於2024-11-01
瀏覽:852

Exploring Generative Art with JavaScript

生成藝術是一種藝術家創建系統的技術,通常以演算法的形式自動產生藝術品。這些系統可以從一組初始規則中產生無限的結果,使這個過程令人著迷且充滿可能性。在本文中,我們將深入研究使用 JavaScript 的生成藝術世界,更具體地說,是流行的函式庫 p5.js。

什麼是生成藝術?

生成藝術依賴於創建可以生成藝術作品的無限種變體的系統。這些系統可以透過特定規則、數學演算法甚至隨機性來控制。系統的每次執行都可以產生新的、獨特的且視覺上有趣的藝術品。

這種藝術形式與程式設計密切相關,因為規則和程式碼定義瞭如何創建視覺結果。生成藝術家使用演算法來定義圖案、顏色、形狀和運動,使每件作品都是發現的過程。

為什麼選擇 JavaScript?

JavaScript 是一種通用且易於存取的語言,可直接在網頁瀏覽器中運行,允許生成藝術結果的即時視覺化。此外,借助 p5.js 等函式庫,只需幾行程式碼就可以建立複雜的圖形。

p5.js 是一個專門為建立互動式和可視圖形而設計的 JavaScript 函式庫。它的簡單性使其成為開始探索生成藝術的理想工具。

p5.j​​s 入門

設定環境

要開始使用 JavaScript 創建生成藝術,您只需要一個瀏覽器和一個程式碼編輯器。您可以使用 p5.js Web 編輯器或下載庫並將其新增至您的專案。

p5.j​​s 草圖的基本骨架

每個 p5.js 草圖分為兩個主要功能:

  • setup():此函數在開始時運行一次。這是我們設定畫布、顏色和任何初始參數的地方。
  • draw():此函數在迴圈中重複運行。在這裡,我們放置繪製和創建視覺元素的說明。

這是一個基本範例:

function setup() {
  createCanvas(800, 800); // Create an 800x800 pixel canvas
  background(255); // White background
}

function draw() {
  noLoop(); // Prevent the draw function from looping
  for (let i = 0; i 



在這個基本草圖中,我們創建一個空白畫布,並用隨機顏色繪製 100 個圓圈,每個圓圈的位置都是隨機的。生成藝術的美妙之處在於結果的可變性。每次運行程式碼時,圓圈都會出現在不同的位置並具有不同的顏色。

用數學創建模式

生成藝術通常將隨機性與精確的數學結構結合。讓我們來看一個基於規則形狀和循環運動生成幾何圖案的範例:

function setup() {
  createCanvas(800, 800);
  background(255);
  noFill();
  stroke(0, 50);
}

function draw() {
  translate(width / 2, height / 2); // Move the origin to the center
  let radius = 300;
  for (let i = 0; i 



在此範例中,我們使用 cos() 和 sin() 等三角函數以圓形圖案圍繞畫布中心分佈 100 個圓。生成藝術中數學的美妙之處在於,您可以使用簡單的方程式來創建複雜且令人驚訝的模式。

增加互動性

使用 JavaScript 和 p5.js 的一大優勢是您可以輕鬆地為您的創作添加互動性。以下是圖案顏色根據滑鼠位置變化的範例:

function setup() {
  createCanvas(800, 800);
}

function draw() {
  background(255);
  let numLines = 50;
  let spacing = width / numLines;

  for (let i = 0; i 



在此草圖中,線條的顏色會根據滑鼠位置而變化。互動性是生成藝術的重要組成部分,因為它允許觀眾直接影響藝術品。

結論

使用 JavaScript 的生成藝術開啟了一個充滿創意可能性的世界。使用 p5.js,我們可以將數學方程式、隨機函數和使用者互動轉換為動態且令人驚訝的視覺效果。最好的部分是,由於該環境的靈活性,結果是獨特的,並且每次執行總是不同的。

探索生成藝術是融合程式設計和創造力的好方法。嘗試不同的形狀、顏色和圖案,看看您可以將自己的生成藝術作品推向多遠!

版本聲明 本文轉載於:https://dev.to/marisbotero/exploring-generative-art-with-javascript-3dp?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 在JavaScript中如何並發運行異步操作並正確處理錯誤?
    在JavaScript中如何並發運行異步操作並正確處理錯誤?
    同意操作execution 在執行asynchronous操作時,相關的代碼段落會遇到一個問題,當執行asynchronous操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於2025-04-19
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-04-19
  • 使用AJAX下載MVC表單生成的Excel文件方法
    使用AJAX下載MVC表單生成的Excel文件方法
    在MVC中通過AJAX下載Excel文件 處理MVC中的大型表單時,可能需要生成一個Excel文件,其中包含表單特定子集的數據,而不會影響其餘部分。 AJAX通過允許您向服務器發出部分請求來為此提供解決方案。 無法直接下載Excel文件 不幸的是,您無法直接通過AJAX返回要下載的文件。相反,請...
    程式設計 發佈於2025-04-19
  • 如何處理PHP文件系統功能中的UTF-8文件名?
    如何處理PHP文件系統功能中的UTF-8文件名?
    在PHP的Filesystem functions中處理UTF-8 FileNames 在使用PHP的MKDIR函數中含有UTF-8字符的文件很多flusf-8字符時,您可能會在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    程式設計 發佈於2025-04-19
  • 如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    appEngine靜態文件mime type override ,靜態文件處理程序有時可以覆蓋正確的mime類型,在錯誤消息中導致錯誤消息:“無法猜測mimeType for for file for file for [File]。 application/application/octet...
    程式設計 發佈於2025-04-19
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-04-19
  • Go web應用何時關閉數據庫連接?
    Go web應用何時關閉數據庫連接?
    在GO Web Applications中管理數據庫連接很少,考慮以下簡化的web應用程序代碼:出現的問題:何時應在DB連接上調用Close()方法? ,該特定方案將自動關閉程序時,該程序將在EXITS EXITS EXITS出現時自動關閉。但是,其他考慮因素可能保證手動處理。 選項1:隱式關閉終...
    程式設計 發佈於2025-04-19
  • Java中Lambda表達式為何需要“final”或“有效final”變量?
    Java中Lambda表達式為何需要“final”或“有效final”變量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    程式設計 發佈於2025-04-19
  • 在Go語言中如何將結構體切片轉換為空接口切片?
    在Go語言中如何將結構體切片轉換為空接口切片?
    將structs的切片轉換為空接口的切片*mystruct var dest []接口{} dest = src //編譯錯誤此錯誤之所以出現,是因為編譯器將兩種類型標識為不兼容。要解決這個問題,必須手動複製每個元素:_,s:= range src { dest = append(dest...
    程式設計 發佈於2025-04-19
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-04-19
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示 僅通過Python的MlStripper 來簡化剝離過程,Python Standard庫提供了一個專門的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    程式設計 發佈於2025-04-19
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-04-19
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-04-19
  • SQL Server 2008如何使用自定義函數和檢查約束限制事件容量?
    SQL Server 2008如何使用自定義函數和檢查約束限制事件容量?
    在SQL Server 2008中使用帶有檢查約束的自定義函數強制實現事件容量限制,以確保事件的預期出現不超過現場能力對計劃和資源分配至關重要。為了強制執行此約束,可以與檢查約束一起使用自定義函數。 命名checkvenuecapacity的自定義函數採用兩個參數:@venue_id and @c...
    程式設計 發佈於2025-04-19
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-04-19

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3