超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點(diǎn)晴永久免費(fèi)OA]Math.js:一款 JavaScript 和 Node.js 最強(qiáng)數(shù)學(xué)庫(kù)

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

前段時(shí)間有個(gè)同學(xué)問(wèn)了我一個(gè)需求:如何在一個(gè)橢圓上均勻放置任意多的DOM。需求效果如下

我一看這個(gè)需求,這不得用到"傳說(shuō)"中的初中數(shù)學(xué)了嗎?然后我“掐指一算”還真給忘完了...

沒(méi)得辦法,只能去翻了翻“初中課本”,找到了橢圓計(jì)算的方式,最終寫(xiě)了如下代碼:

<!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; // 長(zhǎng)軸

const b = 100; // 短軸

const iconRadius = 8; // 圖標(biāo)半徑

const numberOfIcons = 10; // 圖標(biāo)數(shù)量


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);


// 在計(jì)算的坐標(biāo)處繪制圓形圖標(biāo)

ctx.beginPath();

ctx.arc(x, y, iconRadius, 0, Math.PI * 2);

ctx.fill();

}

</script>

</body>


</html>


通過(guò)這樣的代碼實(shí)現(xiàn)了橢圓均勻分布的效果:

不過(guò),做過(guò)多年開(kāi)發(fā)的同學(xué)都知道,數(shù)學(xué)這種東西,真的挺容易忘的。所以說(shuō),我專(zhuān)門(mén)去翻了翻 Github 找到了一個(gè)專(zhuān)業(yè)的擴(kuò)展數(shù)據(jù)庫(kù),它就是:Math.js

01:什么是 Math.js

Math.js 是一個(gè)適用于 JavaScript 和 Node.js 的擴(kuò)展數(shù)學(xué)庫(kù),支持符號(hào)計(jì)算,并提供了廣泛的功能,涵蓋數(shù)字、大數(shù)字、復(fù)數(shù)、分?jǐn)?shù)、單位和矩陣等多種數(shù)據(jù)類(lèi)型。它與JavaScript內(nèi)置數(shù)學(xué)庫(kù)兼容,適用于各類(lèi)ES6兼容的JavaScript引擎,如Node.js、Chrome、Firefox、Safari和Edge等。

Math.js的主要特性包括:

  • 支持多種數(shù)據(jù)類(lèi)型,包括數(shù)字、大數(shù)字、復(fù)數(shù)、分?jǐn)?shù)、單位、字符串、數(shù)組和矩陣。

  • 與JavaScript內(nèi)置數(shù)學(xué)庫(kù)兼容。

  • 強(qiáng)大的表達(dá)式解析器和符號(hào)計(jì)算支持。

  • 內(nèi)置豐富的函數(shù)和常量。

  • 可作為命令行應(yīng)用程序使用。

  • 可在任何JavaScript引擎上運(yùn)行。

  • 易于擴(kuò)展且完全開(kāi)源。

目前,Math.js在GitHub上采用MIT許可協(xié)議開(kāi)源,擁有超過(guò)13.7k的星標(biāo)、1.3k的分支、63.8k的項(xiàng)目依賴(lài)量以及來(lái)自200多位貢獻(xiàn)者的代碼貢獻(xiàn)。是一個(gè)備受推崇的優(yōu)質(zhì)前端開(kāi)源項(xiàng)目。

02:為什么需要 Math.js

Math.js的目標(biāo)在于提供一個(gè)環(huán)境,讓開(kāi)發(fā)者能夠使用混合數(shù)據(jù)類(lèi)型進(jìn)行計(jì)算,比如將普通數(shù)字與復(fù)數(shù)或BigNumber相乘,以及對(duì)矩陣中的各種數(shù)據(jù)進(jìn)行處理。它還允許輕松添加新的數(shù)據(jù)類(lèi)型,比如BigInt。

Math.js采用了兩個(gè)核心解決方案:

  1. 類(lèi)型化函數(shù)(Typed functions):所有函數(shù)都利用typed-function創(chuàng)建,這使得動(dòng)態(tài)創(chuàng)建和擴(kuò)展單個(gè)函數(shù)以及自動(dòng)對(duì)函數(shù)輸入進(jìn)行類(lèi)型轉(zhuǎn)換變得更加簡(jiǎn)單。比如,可以通過(guò)支持兩個(gè)BigInt相乘來(lái)擴(kuò)展乘法函數(shù)。如果定義了從BigInt到數(shù)字的轉(zhuǎn)換,typed-function會(huì)自動(dòng)允許BigInt與數(shù)字相乘。

  2. 依賴(lài)注入(Dependency injection):當(dāng)有一個(gè)支持BigInt的multiply函數(shù)時(shí),由于依賴(lài)注入,其他在底層使用multiply的函數(shù)也將自動(dòng)支持BigInt,反之亦然。如果只需要簡(jiǎn)單的數(shù)字支持,不需要過(guò)重的multiply(支持BigNumbers、矩陣等),可以使用僅用于數(shù)字的輕量級(jí)multiply實(shí)現(xiàn),并將其注入到prod和其他函數(shù)中。

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

03:如何使用 Math.js

Math.js是一個(gè)多功能的庫(kù),可在Node.js和瀏覽器環(huán)境中使用。它類(lèi)似于JavaScript的內(nèi)置Math庫(kù),但更進(jìn)一步,支持表達(dá)式計(jì)算和鏈?zhǔn)讲僮鳌?/p>

// 使用函數(shù)和常量

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]]


// 表達(dá)式計(jì)算

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


// 鏈?zhǔn)讲僮?/span>

math.chain(3).add(4).multiply(2).done(); // 返回14


這些例子展示了Math.js的靈活性,無(wú)論是進(jìn)行基本數(shù)學(xué)運(yùn)算、處理單位轉(zhuǎn)換還是進(jìn)行復(fù)雜的矩陣計(jì)算,都能輕松應(yīng)對(duì)。而鏈?zhǔn)讲僮鲃t允許你連續(xù)調(diào)用多個(gè)函數(shù),簡(jiǎn)潔地處理多步計(jì)算。


作者:程序員Sunday
鏈接:https://juejin.cn/post/7315630639797125139
來(lái)源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。



該文章在 2023/12/28 10:37:16 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved