p5.js:模擬 n個彩色小球在一個3D大球體內部彈跳

?向 豆包 提問:編寫一個 p5.js 腳本,模擬 42 個彩色小球在一個3D大球體內部彈跳。每個小球都應留下一條逐漸消失的軌跡。大球體應緩慢旋轉,并顯示透明的輪廓線。請確保實現適當的碰撞檢測,使小球保持在球體內部。

cd p5-demo
copy .\node_modules\p5\lib\p5.min.js .
編寫? p5_3d_42_balls.html? 如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>3D Bouncing Balls in Sphere</title><script src="p5.min.js"></script>
</head><body>
<script>let balls = [];let sphereRadius = 200;let rotationSpeed = 0.01;function setup() {createCanvas(800, 600, WEBGL);for (let i = 0; i < 42; i++) {balls.push(new Ball());}}function draw() {background(0);rotateX(frameCount * rotationSpeed);rotateY(frameCount * rotationSpeed);// 繪制大球體stroke(255, 100);noFill();sphere(sphereRadius);// 更新并繪制小球for (let ball of balls) {ball.update();ball.display();}}class Ball {constructor() {this.pos = p5.Vector.random3D().mult(random(0, sphereRadius));this.vel = p5.Vector.random3D().mult(random(1, 3));this.color = color(random(255), random(255), random(255));this.trail = [];this.trailLength = 20;}update() {this.pos.add(this.vel);// 碰撞檢測let distanceToCenter = this.pos.mag();if (distanceToCenter > sphereRadius) {let normal = this.pos.copy().normalize();this.vel.reflect(normal);// 確保小球回到球體內this.pos = normal.mult(sphereRadius - 0.1); }// 更新軌跡this.trail.push(this.pos.copy());if (this.trail.length > this.trailLength) {this.trail.shift();}}display() {// 繪制軌跡for (let i = 0; i < this.trail.length; i++) {let alpha = map(i, 0, this.trail.length, 255, 0);stroke(this.color.levels[0], this.color.levels[1], this.color.levels[2], alpha);if (i > 0) {line(this.trail[i - 1].x, this.trail[i - 1].y, this.trail[i - 1].z, this.trail[i].x, this.trail[i].y, this.trail[i].z);}}// 繪制小球fill(this.color);noStroke();push();translate(this.pos.x, this.pos.y, this.pos.z);sphere(5);pop();}}
</script>
</body>
</html>

雙擊打開 p5_3d_42_balls.html?


交互式分形樹

  • 描述: 創建一個分形樹,用戶可以通過鼠標或鍵盤控制樹的生長角度、分支長度等參數。

  • 編寫 p5_branch.html? 如下

  • <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>p5 branch Example</title><script src="p5.min.js"></script>
    </head>
    <body>
    <script>
    // 創建分形樹,用戶可以通過鼠標控制樹的生長角度、分支長度等參數。function setup() {createCanvas(800, 600);angleMode(DEGREES);}function draw() {background(50);stroke(255);translate(width/2, height);branch(map(mouseX, 0, width, 50, 150));}function branch(len) {line(0, 0, 0, -len);translate(0, -len);if (len > 4) {push();rotate(map(mouseY, 0, height, 20, 60));branch(len * 0.67);pop();push();rotate(-map(mouseY, 0, height, 20, 60));branch(len * 0.67);pop();}}
    </script>
    </body>
    </html>
    

    雙擊打開?p5_branch.html?


動態波形生成器

  • 描述: 創建一個動態波形,用戶可以通過鼠標或鍵盤控制波形的頻率、振幅或顏色。

  • 編寫 p5_wave.html? 如下

  • <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>p5 wave Example</title><script src="p5.min.js"></script>
    </head>
    <body>
    <script>let angle = 0;let amplitude = 100;let frequency = 0.02;function setup() {createCanvas(windowWidth, windowHeight);}function draw() {background(0);noFill();stroke(255);strokeWeight(2);beginShape();for (let x = 0; x < width; x += 10) {let y = height / 2 + sin(angle + x * frequency) * amplitude;vertex(x, y);}endShape();angle += 0.05;}function mouseMoved() {amplitude = map(mouseY, 0, height, 50, 200);frequency = map(mouseX, 0, width, 0.01, 0.1);}
    </script>
    </body>
    </html>
    

    雙擊打開?p5_wave.html?

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

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

相關文章

linux環保監測4G邊緣網關:環境數據的可靠傳輸者

環保監測工控機&#xff0c;常被稱為“環境數據采集器”或“環保數據終端”&#xff0c;是一種專門用于環境監測領域的工業計算機。它具備強大的數據處理能力、穩定的運行性能和多種接口&#xff0c;能夠實時采集、處理和傳輸環境監測數據。這些數據包括空氣質量、水質、噪聲、…

k8s概念及k8s集群部署(Centos7)

Centos7部署k8s集群 部署之前&#xff0c;先簡單說下k8s是個啥&#xff1a; 一、k8s簡介&#xff1a; k8s&#xff0c;全稱&#xff1a;kubernetes&#xff0c;它可以看作是一個分布式系統支撐平臺。k8s的作用&#xff1a; 1、故障自愈&#xff1a; k8s這個玩意可以監控容器…

HTML 文本格式化

HTML 文本格式化 在構建網頁的過程中&#xff0c;文本的格式化是一個至關重要的環節。HTML&#xff08;HyperText Markup Language&#xff09;提供了豐富的標簽和屬性來幫助我們實現各種文本格式化的需求。本文將詳細介紹HTML中常見的文本格式化方法&#xff0c;包括字體、顏…

Manus AI Agent 技術解讀:架構、機制與競品對比

目錄 1. Manus 是什么&#xff1f; 1.1 研發背景 1.2 技術特點 1.3 工具調用能力 1.4 主要應用場景 2. Manus 一夜爆火的原因何在&#xff1f; 2.1 技術突破帶來的震撼 2.2 完整交付的產品體驗 2.3 生態與開源策略 3. Manus 與其他 AI Agent 的對比分析 3.1 技術架構…

【學習思維模型】

學習思維模型 一、理解類模型二、記憶類模型三、解決問題類模型四、結構化學習模型五、效率與習慣類模型六、高階思維模型七、實踐建議八、新增學習思維模型**1. 波利亞問題解決四步法****2. 主動回憶(Active Recall)****3. 魚骨圖(因果圖/Ishikawa Diagram)****4. MECE原則…

PCIE接口

PCIE接口 PIC接口介紹PIC總線結構PCI總線特點PCI總線的主要性能PIC的歷程 PCIE接口介紹PCIe接口總線位寬PCIE速率GT/s和Gbps區別PCIE帶寬計算 PCIE架構PCIe體系結構端到端的差分數據傳遞PCIe總線的層次結構事務層數據鏈路層物理層PCIe層級結構及功能框圖 PCIe鏈路初始化PCIe鏈路…

大語言模型(LLM)和嵌入模型的統一調用接口

ChatModelFactory、EmbeddingModelFactory 講解代碼&#xff1a;import os from dotenv import load_dotenv, find_dotenv_ load_dotenv(find_dotenv())from langchain_openai import ChatOpenAI, OpenAIEmbeddings, AzureChatOpenAI, AzureOpenAIEmbeddingsclass ChatModelF…

在Linux開發板中使用.NET實現音頻開發

本文將以Linux開發板為基礎&#xff0c;使用ALSA音頻框架和C#語言&#xff0c;演示如何實現基礎的音頻錄制與播放功能。 1. 背景 音頻處理是嵌入式開發中常見的需求&#xff0c;無論是語音交互、環境監測還是多媒體應用都離不開音頻模塊的支持。在Linux系統中&#xff0c;ALSA…

Windows控制臺函數:控制臺輸出函數WriteConsoleA()

目錄 什么是 WriteConsoleA&#xff1f; 函數簽名 參數詳解 返回值 一個最簡單的例子 跟 ReadConsoleA 對比 再試一個有趣的例子 為什么傳地址給 lpNumberOfCharsWritten&#xff1f; 注意事項 什么是 WriteConsoleA&#xff1f; WriteConsoleA 是一個 Windows API 函…

【貪心算法】將數組和減半的最小操作數

1.題目解析 2208. 將數組和減半的最少操作次數 - 力扣&#xff08;LeetCode&#xff09; 2.講解算法原理 使用當前數組中最大的數將它減半&#xff0c;&#xff0c;直到數組和減小到一半為止&#xff0c;從而快速達到目的 重點是找到最大數&#xff0c;可以采用大根堆快速達到…

Prompt engineering設計原則

目錄 一、清晰具體的prompt1. 使用分隔符2. 結構化的輸出&#xff08;JSON&#xff09;3. 要求模型檢查是否滿足條件4. 提供少量案例 二、給模型時間去思考1.指定完成任務所需的步驟2. 指導模型在下結論之前找出一個自己的解法 一、清晰具體的prompt 一個合理的prompt設計決定…

Vue 過濾器 filter(s) 的使用

即過濾器是用來格式化數據的一個函數。過濾器不會修改原始數據&#xff0c;它的作用是過濾數據&#xff0c;就是對數據進行加工處理并返回處理后的數據&#xff0c;比如做一些數據格式上的修改&#xff0c;狀態轉換等。 過濾器分為兩種 組件內的過濾器(組件內有效) 全局過濾器…

ESP8266UDP透傳

1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 響應 : OK 2. PC 連?入 ESP8266 softAP 就是連接wifi 3.查詢ESP8266設備的IP地址 ATCIFSR 響應: CIFSR: APIP, "192.168.4.1" CIFSR: APMAC, "1a: fe: 34: a5:8d: c6" CIFSR: STAIP, "192.…

高效運行 QwQ-32B + 錯誤修復

文章目錄 QwQ-32B 錯誤修復?? 官方推薦設置&#x1f44d; 推薦的 llama.cpp 設置&#x1f4d6; 教程&#xff1a;運行和修復的 QwQ-32B1、對于 llama.cpp 及使用 llama.cpp 的引擎&#xff1a;2、下載模型 測試3、測試/評估4、嘗試不使用我們的修復方案&#xff1a; &#x…

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). )

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). ) 題目大意&#xff1a; 在這個交互式問題中&#xff0c;你需要通過查詢系統&#xff0c;逐步找出隱藏的位字符串 S。給定一個偶數 n&#xff0c;表示目標位字符串 S 的長度&#xff0c;你需要通…

Leetcode 刷題記錄 06 —— 矩陣

本系列為筆者的 Leetcode 刷題記錄&#xff0c;順序為 Hot 100 題官方順序&#xff0c;根據標簽命名&#xff0c;記錄筆者總結的做題思路&#xff0c;附部分代碼解釋和疑問解答。 目錄 01 矩陣置零 方法一&#xff1a;標記數組 方法二&#xff1a;兩個標記變量 02 螺旋矩陣…

Java【網絡原理】(3)網絡編程續

目錄 1.前言 2.正文 2.1ServerSocket類 2.2Socket類 2.3Tcp回顯服務器 2.3.1TcpEchoServer 2.3.2TcpEchoClient 3.小結 1.前言 哈嘍大家好&#xff0c;今天繼續進行計算機網絡的初階學習&#xff0c;今天學習的是tcp回顯服務器的實現&#xff0c;正文開始 2.正文 在…

C++11新特性 8.final關鍵字、override關鍵字

一.final 用法&#xff1a; 1.修飾函數 只能修飾虛函數&#xff0c;阻止子類重寫這個函數&#xff0c;final關鍵字寫在函數名的后面。 即該虛函數不可以再被重寫。 注意&#xff1a;一般不會在基類中使用&#xff0c;不然沒有意義&#xff0c;因為只能修飾虛函數。 2.修飾…

Python實現網絡通信:Socket模塊與TCP/IP協議全解析

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

click house擴容方案

《ClickHouse擴容方案解析》 當我們談論數據庫的時候&#xff0c;尤其是像ClickHouse這樣專為處理大規模數據分析而設計的列式存儲數據庫時&#xff0c;擴容是一個不可避免的話題。隨著數據量的增長和查詢復雜度的提升&#xff0c;原有的硬件資源可能不足以支撐高效的查詢響應…