欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[點晴永久免費OA]Math.js:一款 JavaScript 和 Node.js 最強數學庫

freeflydom
2023年12月28日 10:37 本文熱度 741

前段時間有個同學問了我一個需求:如何在一個橢圓上均勻放置任意多的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 找到了一個專業的擴展數據庫,它就是:Math.js

01:什么是 Math.js

Math.js 是一個適用于 JavaScript 和 Node.js 的擴展數學庫,支持符號計算,并提供了廣泛的功能,涵蓋數字、大數字、復數、分數、單位和矩陣等多種數據類型。它與JavaScript內置數學庫兼容,適用于各類ES6兼容的JavaScript引擎,如Node.js、Chrome、Firefox、Safari和Edge等。

Math.js的主要特性包括:

  • 支持多種數據類型,包括數字、大數字、復數、分數、單位、字符串、數組和矩陣。

  • 與JavaScript內置數學庫兼容。

  • 強大的表達式解析器和符號計算支持。

  • 內置豐富的函數和常量。

  • 可作為命令行應用程序使用。

  • 可在任何JavaScript引擎上運行。

  • 易于擴展且完全開源。

目前,Math.js在GitHub上采用MIT許可協議開源,擁有超過13.7k的星標、1.3k的分支、63.8k的項目依賴量以及來自200多位貢獻者的代碼貢獻。是一個備受推崇的優質前端開源項目。

02:為什么需要 Math.js

Math.js的目標在于提供一個環境,讓開發者能夠使用混合數據類型進行計算,比如將普通數字與復數或BigNumber相乘,以及對矩陣中的各種數據進行處理。它還允許輕松添加新的數據類型,比如BigInt。

Math.js采用了兩個核心解決方案:

  1. 類型化函數(Typed functions):所有函數都利用typed-function創建,這使得動態創建和擴展單個函數以及自動對函數輸入進行類型轉換變得更加簡單。比如,可以通過支持兩個BigInt相乘來擴展乘法函數。如果定義了從BigInt到數字的轉換,typed-function會自動允許BigInt與數字相乘。

  2. 依賴注入(Dependency injection):當有一個支持BigInt的multiply函數時,由于依賴注入,其他在底層使用multiply的函數也將自動支持BigInt,反之亦然。如果只需要簡單的數字支持,不需要過重的multiply(支持BigNumbers、矩陣等),可以使用僅用于數字的輕量級multiply實現,并將其注入到prod和其他函數中。

在底層,mathjs采用了不可變函數的不可變工廠函數。核心函數math.create(...)用于創建一個新實例,包含從傳遞的所有工廠函數創建的函數。mathjs實例是創建函數的集合。它還包含像math.import這樣的函數,允許使用新函數擴展實例,然后可以在表達式解析器中使用。

03:如何使用 Math.js

Math.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的靈活性,無論是進行基本數學運算、處理單位轉換還是進行復雜的矩陣計算,都能輕松應對。而鏈式操作則允許你連續調用多個函數,簡潔地處理多步計算。


作者:程序員Sunday
鏈接:https://juejin.cn/post/7315630639797125139
來源:稀土掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。



該文章在 2023/12/28 10:37:16 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved