能够在 JavaScript 中理解和实现数学是非常有用的。在处理高度可视化和交互式应用程序时尤其如此,JavaScript 非常适合。但是,如果没有数学背景,可能很难理解这一切以及它如何转化为代码。
在这篇文章中,我将解释一些最常见的数学概念及其符号。我还将提供示例,以便您了解如何在 JavaScript 中实现这些概念。在本文结束时,您应该对这些符号的含义以及如何将它们转换为代码有了更好的理解。
点和十字符号
点和十字符号在数学中很常见,但它们的用途因上下文而异。
标量乘法
这两个符号都可以表示标量的简单乘法。以下是等价的:
通常,在 JavaScript 中,星号用于乘法:
const result = 9 * 8;
乘号通常仅用于避免歧义。例如,这里完全省略:
如果变量是标量,代码将如下所示;
const result = 5 * k * j;
向量乘法
对于向量乘法,通常使用开点∘。该符号代表Hadamard 产品。
在 JavaScript 中,它可以这样实现:
function multiply(a, b) {
return [a[0] * b[0], a[1] * b[1]];
}
function multiplyScalar(a, scalar) {
return [a[0] * scalar, a[1] * scalar];
}
const s = 5;
const k = [1, 2];
const j = [2, 3];
const v = multiply(k, j);
const result = multiplyScalar(v, s);
// [ 10, 30 ]
点积
点符号·可以表示两个向量的点积。有时这被称为标量积,因为它评估为标量。
代码可能如下所示:
function dot(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}
const k = [0, 1, 0];
const j = [1, 0, 0];
const result = dot(k, j);
// 0
的结果0意味着向量是垂直的。
交叉产品
叉号×可以表示两个向量的叉积。
在代码中,它看起来像这样:
function cross(a, b) {
const ax = a[0],
ay = a[1],
az = a[2],
bx = b[0],
by = b[1],
bz = b[2];
const rx = ay * bz - az * by;
const ry = az * bx - ax * bz;
const rz = ax * by - ay * bx;
return [rx, ry, rz];
}
const k = [0, 1, 0];
const j = [1, 0, 0];
const result = cross(k, j);
// [ 0, 0, -1 ]
西格玛
sigma 符号 Σ 用于求和。基本上,总结数字。
在这里,i=1表示从 sigma 上方的数字开始1和结束100。这些分别是下限和上限。Σ 右侧的i告诉我们求和的内容。在代码中,这可以采用以下形式:
let sum = 0;
for (let i = 1; i <= 100; i++) {
sum += i;
}
// 5050
这是另一个稍微复杂一点的例子:
和代码:
let sum = 0;
for (let i = 1; i <= 100; i++) {
sum += 2 * i + 1;
}
// 10200
Sigma 也可以嵌套,首先计算最右边的 sigma,除非表达式使用括号改变顺序。
在代码中:
let sum = 0;
for (let i = 1; i <= 2; i++) {
for (let j = 4; j <= 6; j++) {
sum += 3 * i * j;
}
}
// 135
资本Pi
大写的 Pi 或“Big Pi”与 sigma 非常相似,只是它使用乘法而不是求和来查找一系列值的乘积。
这是一个例子:
在代码中,它可能如下所示:
let value = 1;
for (let i = 1; i <= 7; i++) {
value *= i;
}
// 5040
酒吧
条形图是另一种根据上下文可能意味着不同事物的条形图。以下是三种常见用途:绝对值、欧几里得范数和行列式。这些都描述了物体的长度。
绝对值
这意味着 的绝对值x。在 JavaScript 中,它看起来像这样:
const x = -4;
const result = Math.abs(x);
// 4
欧几里得范数
欧几里得范数与向量有关,它也被称为向量的“大小”或“长度”。
下面是一个使用数组[x, y, z]来表示 3D 向量的示例:
function length(vector) {
const x = vector[0];
const y = vector[1];
const z = vector[2];
return Math.sqrt(x * x + y * y + z * z);
}
const result = length([0, 6, -8]);
// 10
行列式
这是一个计算 2x2 矩阵行列式的示例,由平面数组表示。
function determinant(a) {
return a[0] * a[3] - a[2] * a[1];
}
const result = determinant([1, 0, 0, 1]);
// 1
帽子
“帽子”符号在几何中常用来表示单位向量。例如,这里是 的单位向量a:
在笛卡尔空间中,单位向量的长度通常为 1。这意味着向量的每个部分都将在 -1.0 到 1.0 的范围内。以下示例将 3D 向量“归一化”为单位向量:
function normalize(vector) {
const x = vector[0];
const y = vector[1];
const z = vector[2];
const squaredLength = x * x + y * y + z * z;
if (squaredLength > 0) {
const length = Math.sqrt(squaredLength);
return [x / length, y / length, z / length];
}
return vector;
}
const result = normalize([0, 8, -6]);
// [ 0, 0.8, -0.6 ]
元素
在集合论中,符号 ∈ 和 ∋ 的“元素”通常用于描述某事物是否是集合的元素。例如:
这里有一组 numbers A { 3, 9, 14 },它说 3 是该集合的“元素”。
一个简单的实现可能如下所示:
const A = [3, 9, 14];
const result = A.indexOf(3) >= 0;
// true
向后的∋是一样的,但是顺序改变了:
您还可以像这样使用“不是元素”符号∉和∌:
功能
函数是数学的核心部分,它们很自然地转化为代码。
函数是一种描述输入变量发生情况以获取输出结果的方式。例如,下面是一个函数:
这个函数可以被赋予一个通常ƒ会使用的名称,但也可以是A(x)其他名称。
在代码中,你可以给它一个更有意义的名字,像这样square写:
function square(x) {
return Math.pow(x, 2);
}
函数也可以有多个参数。这些在数学中被称为参数,函数采用的参数数量被称为函数的元数。
在代码中:
function length(x, y) {
return Math.sqrt(x * x + y * y);
}
分段函数
函数可以被认为具有三个主要部分:输入、关系和输出。关系是输入与输出的关系。有些函数会根据输入值使用不同的关系。以下函数 ƒ 根据输入值在两个“子函数”之间进行选择。
if这与代码中的/非常相似else。
function f(x) {
if (x >= 1) {
return (Math.pow(x, 2) - x) / x;
}
return 0;
}
常用功能
有些函数在数学中很普遍。parseInt对于开发人员来说,这些类似于JavaScript中的内置函数。
一个例子是 sgn 函数。这是符号或符号函数。使用分段函数表示法,它看起来像这样:
在代码中,它可能如下所示:
function sgn(x) {
if (x < 0) return -1;
if (x > 0) return 1;
return 0;
}
地板和天花板
特殊括号⌊x⌋和⌈x⌉分别代表 floor 和 ceil 函数。
在代码中:
Math.floor(x);
Math.ceil(x);
当两个符号混合⌊x⌉时,它通常表示一个四舍五入到最接近整数的函数:
在代码中:
Math.round(x);
最后的想法
这是一个需要探索的大话题,本文只是触及了皮毛。如果您想了解更多信息,一个很好的起点是数学即代码存储库,它是本文的灵感来源。
运行上述代码示例的一种便捷方法是通过RunJS应用程序。RunJS 是一个适用于 Mac、Windows 和 Linux 的 JavaScript 游乐场。它运行您的代码并为您提供实时反馈以及许多其他强大的功能。试试看。