Java Vector 操作

2024年9月10日 | 阅读 6 分钟

向量是同时具有大小和方向的数学实体。在计算机编程中,向量通常用于表示同时具有大小和方向的量,例如速度、力 displacement。Java 作为一种流行的面向对象编程语言,通过各种库和 API 内置支持向量运算,使得在 Java 中进行向量计算变得容易。

在本节中,我们将探讨 Java 中的向量运算,包括常见的向量运算,如加法、减法、标量乘法、点积、叉积和归一化。我们还将提供带有输出的示例程序,来说明如何在 Java 中实现这些向量运算。

Java 中的向量加法

向量加法是将两个向量合并以获得新向量的过程。在 Java 中,可以使用数组或向量库中的类轻松执行向量加法,例如 `java.util` 包中的 `Vector` 类或 Apache Commons Math 库中的 `Vector3D` 类。

这是一个使用 Apache Commons Math 库中的 `Vector3D` 类演示向量加法的示例程序

VectorAdditionExample.java

输出

Vector1: (2.0, 3.0, 4.0)
Vector2: (1.0, -2.0, 3.0)
Sum: (3.0, 1.0, 7.0)

使用 Apache Commons Math 库中的 `Vector3D` 类计算两个向量之间角度的另一个 Java 示例

VectorAngleExample.java

输出

Vector1: (2.0, 3.0, 4.0)
Vector2: (1.0, -2.0, 3.0)
Angle between vectors: 1.282817000215245 radians
Angle between vectors: 73.44404571404407 degrees

Java 中的向量减法

向量减法是查找两个向量之间差的过程。在 Java 中,可以使用数组或向量库执行向量减法,与向量加法类似。这是一个使用 Apache Commons Math 库中的 `Vector3D` 类演示向量减法的示例程序

VectorSubtractionExample.java

输出

Vector1: (2.0, 3.0, 4.0)
Vector2: (1.0, -2.0, 3.0)
Difference: (1.0, 5.0, 1.0)

使用 Apache Commons Math 库中的 `Vector3D` 类减去两个向量的另一个 Java 示例

VectorSubtractionExample.java

输出

Vector1: (2.0, 3.0, 4.0)
Vector2: (1.0, -2.0, 3.0)
Difference between vectors: (1.0, 5.0, 1.0)

Java 中的向量标量乘法

向量的标量乘法是将向量与标量(常数值)相乘的过程。在 Java 中,可以使用数组或向量库轻松执行标量乘法。这是一个使用 Apache Commons Math 库中的 `Vector3D` 类演示向量标量乘法的示例程序

ScalarMultiplicationExample.java

输出

Vector: (2.0, 3.0, 4.0)
Scalar: 3
Result: (6.0, 9.0, 12.0)

使用 Apache Commons Math 库中的 `Vector3D` 类进行向量标量乘法的另一个 Java 示例

VectorScalarMultiplicationExample.java

输出

Vector: (2.0, 3.0, 4.0)
Scalar: 2.5
Result of scalar multiplication: (5.0, 7.5, 10.0)

Java 中的向量点积

两个向量的点积是一个标量值,表示它们的模长与它们之间夹角的余弦的乘积。在 Java 中,可以使用数组或向量库轻松计算点积。这是一个使用 Apache Commons Math 库中的 `Vector3D` 类演示两个向量点积的示例程序

DotProductExample.java

输出

Vector1: (2.0, 3.0, 4.0)
Vector2: (1.0, -2.0, 3.0)
Dot Product: 13.0

不使用任何外部库计算两个向量点积的另一个 Java 示例

VectorDotProductExample.java

输出

Vector1: [2.0, 3.0, 4.0]
Vector2: [1.0, -2.0, 3.0]
Dot product of vectors: 14.0

Java 中的向量叉积

两个向量的叉积是一个垂直于两个输入向量的向量,其模长等于它们的模长与它们之间夹角的正弦的乘积。在 Java 中,可以使用数组或向量库轻松计算叉积。这是一个使用 Apache Commons Math 库中的 `Vector3D` 类演示两个向量叉积的示例程序

CrossProductExample.java

输出

Vector1: (2.0, 3.0, 4.0)
Vector2: (1.0, -2.0, 3.0)
Cross Product: (6.0, -5.0, -7.0)

Java 中的向量归一化

向量归一化是将向量转换为单位向量的过程,单位向量的模长为 1,但方向相同。在计算机图形学、物理模拟和机器学习算法等应用中,对向量进行归一化非常有用。在 Java 中,可以使用数组或向量库轻松执行向量归一化。这是一个使用 Apache Commons Math 库中的 `Vector3D` 类演示向量归一化的示例程序

VectorNormalizationExample.java

输出

Vector: (2.0, 3.0, 4.0)
Normalized Vector: (0.3713906763541037, 0.5570860145311556, 0.7427813527082074)

结论

向量运算在计算机科学、物理学、图形学和机器学习的许多领域都至关重要。Java 提供了多种执行向量运算的方法,包括使用数组或利用 Apache Commons Math 或 JAMA 等向量库。在本文中,我们使用 Apache Commons Math 库探讨了一些常见的向量运算,如向量加法、向量减法、标量乘法、点积、叉积和向量归一化。我们学习了如何创建向量、执行向量运算以及使用带有输出的示例程序获取结果。

向量运算在许多实际应用中起着至关重要的作用。例如,在计算机图形学中,向量运算用于在 3D 环境中表示和操作 3D 对象。在物理模拟中,向量运算用于模拟力、速度和加速度等物理量。在机器学习算法中,向量运算用于表示和操作高维空间中的数据点。理解向量运算并正确实现它们对于在各个领域开发健壮高效的应用程序至关重要。通过本文提供的知识和示例,您现在可以自信地在 Java 中执行向量运算,并在您的应用程序中利用它们来解决现实世界的问题。