[點晴永久免費OA]Math.js:一款 JavaScript 和 Node.js 最強數學庫
當前位置:點晴教程→點晴OA辦公管理信息系統
→『 經驗分享&問題答疑 』
前段時間有個同學問了我一個需求:如何在一個橢圓上均勻放置任意多的DOM。需求效果如下 我一看這個需求,這不得用到"傳說"中的初中數學了嗎?然后我“掐指一算”還真給忘完了... 沒得辦法,只能去翻了翻“初中課本”,找到了橢圓計算的方式,最終寫了如下代碼: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Icons on Ellipse</title> <style> canvas { border: 1px solid black; } </style> </head> <body> <canvas id="myCanvas" width="400" height="400"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); const centerX = canvas.width / 2; const centerY = canvas.height / 2; const a = 150; // 長軸 const b = 100; // 短軸 const iconRadius = 8; // 圖標半徑 const numberOfIcons = 10; // 圖標數量 ctx.fillStyle = 'blue'; for (let i = 0; i < numberOfIcons; i++) { const angle = (Math.PI * 2) * (i / numberOfIcons); const x = centerX + a * Math.cos(angle); const y = centerY + b * Math.sin(angle); // 在計算的坐標處繪制圓形圖標 ctx.beginPath(); ctx.arc(x, y, iconRadius, 0, Math.PI * 2); ctx.fill(); } </script> </body> </html> 通過這樣的代碼實現了橢圓均勻分布的效果: 不過,做過多年開發的同學都知道,數學這種東西,真的挺容易忘的。所以說,我專門去翻了翻 Github 找到了一個專業的擴展數據庫,它就是: 01:什么是 Math.jsMath.js 是一個適用于 JavaScript 和 Node.js 的擴展數學庫,支持符號計算,并提供了廣泛的功能,涵蓋數字、大數字、復數、分數、單位和矩陣等多種數據類型。它與JavaScript內置數學庫兼容,適用于各類ES6兼容的JavaScript引擎,如Node.js、Chrome、Firefox、Safari和Edge等。 Math.js的主要特性包括:
目前,Math.js在GitHub上采用MIT許可協議開源,擁有超過13.7k的星標、1.3k的分支、63.8k的項目依賴量以及來自200多位貢獻者的代碼貢獻。是一個備受推崇的優質前端開源項目。 02:為什么需要 Math.jsMath.js的目標在于提供一個環境,讓開發者能夠使用混合數據類型進行計算,比如將普通數字與復數或BigNumber相乘,以及對矩陣中的各種數據進行處理。它還允許輕松添加新的數據類型,比如BigInt。 Math.js采用了兩個核心解決方案:
在底層,mathjs采用了不可變函數的不可變工廠函數。核心函數math.create(...)用于創建一個新實例,包含從傳遞的所有工廠函數創建的函數。mathjs實例是創建函數的集合。它還包含像math.import這樣的函數,允許使用新函數擴展實例,然后可以在表達式解析器中使用。 03:如何使用 Math.jsMath.js是一個多功能的庫,可在Node.js和瀏覽器環境中使用。它類似于JavaScript的內置Math庫,但更進一步,支持表達式計算和鏈式操作。 // 使用函數和常量 math.round(math.e, 3); // 得到2.718 math.atan2(3, -3) / math.pi; // 返回0.75 math.log(10000, 10); // 輸出4 math.sqrt(-4); // 返回2i math.pow( [ [-1, 2], [3, 1], ], 2 ); // 得到[[7, 0], [0, 7]] // 表達式計算 math.evaluate('12 / (2.3 + 0.7)'); // 返回4 math.evaluate('12.7 cm to inch'); // 輸出5 inch math.evaluate('sin(45 deg) ^ 2'); // 得到0.5 math.evaluate('9 / 3 + 2i'); // 返回3 + 2i math.evaluate('det([-1, 2; 3, 1])'); // 輸出-7 // 鏈式操作 math.chain(3).add(4).multiply(2).done(); // 返回14 這些例子展示了Math.js的靈活性,無論是進行基本數學運算、處理單位轉換還是進行復雜的矩陣計算,都能輕松應對。而鏈式操作則允許你連續調用多個函數,簡潔地處理多步計算。
該文章在 2023/12/28 10:37:16 編輯過 |
關鍵字查詢
相關文章
正在查詢... |