📜  如何找到向量的两个部分 2 C++ - TypeScript (1)

📅  最后修改于: 2023-12-03 15:09:09.223000             🧑  作者: Mango

如何找到向量的两个部分

在数学中,向量通常可以分成两个部分:大小和方向。对于三维向量,还有一个额外的分量表示向量在Z轴上的投影。在C++和TypeScript中,我们可以用类来表示向量并获取它们的两个部分。

C++实现

以下是一个简单的C++类,表示一个二维向量:

class Vector2D {
public:
    float x, y;

    Vector2D(float x_, float y_) : x(x_), y(y_) {}

    float magnitude() const { return sqrt(x*x + y*y); }

    Vector2D normalized() const {
        float m = magnitude();
        if (m == 0) return Vector2D(0, 0);
        return Vector2D(x/m, y/m);
    }

    float dot(const Vector2D& other) const { return x*other.x + y*other.y; }

    Vector2D operator+(const Vector2D& other) const { return Vector2D(x+other.x, y+other.y); }

    Vector2D operator-(const Vector2D& other) const { return Vector2D(x-other.x, y-other.y); }

    Vector2D operator*(float s) const { return Vector2D(x*s, y*s); }

    Vector2D operator/(float s) const { return Vector2D(x/s, y/s); }
};

其中magnitude()方法返回向量的大小,normalized()方法返回一个长度为1的单位向量,dot()方法返回向量的点积,而各种运算符重载允许我们对两个向量进行加减乘除等运算。

要找到向量的两个部分,我们可以使用以下代码:

Vector2D v(3, 4);
Vector2D direction = v.normalized();
float magnitude = v.magnitude();

在上面的示例中,我们首先创建一个向量(3, 4),然后将其单位化以获取其方向(0.6, 0.8),最后获取其大小。

TypeScript实现

在TypeScript中,我们可以使用以下类来表示二维向量:

class Vector2D {
    constructor(public x: number, public y: number) {}

    get magnitude(): number { return Math.sqrt(this.x*this.x + this.y*this.y); }

    get normalized(): Vector2D {
        const m = this.magnitude;
        if (m === 0) return new Vector2D(0, 0);
        return new Vector2D(this.x/m, this.y/m);
    }

    dot(other: Vector2D): number { return this.x*other.x + this.y*other.y; }

    add(other: Vector2D): Vector2D { return new Vector2D(this.x+other.x, this.y+other.y); }

    subtract(other: Vector2D): Vector2D { return new Vector2D(this.x-other.x, this.y-other.y); }

    multiply(s: number): Vector2D { return new Vector2D(this.x*s, this.y*s); }

    divide(s: number): Vector2D { return new Vector2D(this.x/s, this.y/s); }
}

在这里,我们定义了与C++中相同的方法来表示向量的大小、单位向量和点积,但是我们使用getter语法糖而不是函数来访问这些方法。

要找到向量的两个部分,我们可以使用以下代码:

const v = new Vector2D(3, 4);
const direction = v.normalized;
const magnitude = v.magnitude;

在上面的示例中,我们首先创建一个向量(3, 4),然后将其单位化以获取其方向(0.6, 0.8),最后获取其大小。

结论

无论是在C++中还是TypeScript中,都可以使用类来表示向量并获取向量的两个部分:大小和方向。代码示例演示了如何实现这些类并使用它们来获取向量的两个部分。