📜  带有 switch 语句的 vector2 - C# (1)

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

带有 switch 语句的 Vector2 - C#

在游戏开发中,Vector2 是常用的二维向量类型,其中包含了常见的向量运算。本文将介绍怎样通过 switch 语句来实现 Vector2 中的向量运算。

(注:以下代码基于 C# 语言)

前置知识

在不了解 switch 语句的人看来,我们先简单介绍一下 switch 语句。

switch 语句用于根据一个变量的值,执行不同的代码块。语法如下:

switch (expression)
{
    case value1:
        // 在 expression 等于 value1 时执行的代码块
        break;
    case value2:
        // 在 expression 等于 value2 时执行的代码块
        break;
    case value3:
        // 在 expression 等于 value3 时执行的代码块
        break;
    default:
        // 在 expression 不等于任何一个 case 时执行的代码块
        break;
}
Vector2 中的运算

Vector2 包含常见的向量运算,例如加减乘除、点积、叉积等等。我们将实现这些操作并通过 switch 语句进行控制。

给出 Vector2 的结构体定义:

struct Vector2
{
    public float x;
    public float y;

    public Vector2(float x, float y)
    {
        this.x = x;
        this.y = y;
    }

    public static Vector2 operator +(Vector2 v1, Vector2 v2)
    {
        return new Vector2(v1.x + v2.x, v1.y + v2.y);
    }

    public static Vector2 operator -(Vector2 v1, Vector2 v2)
    {
        return new Vector2(v1.x - v2.x, v1.y - v2.y);
    }

    public static Vector2 operator *(Vector2 v1, float f)
    {
        return new Vector2(v1.x * f, v1.y * f);
    }

    public static Vector2 operator *(float f, Vector2 v1)
    {
        return new Vector2(v1.x * f, v1.y * f);
    }

    public static Vector2 operator /(Vector2 v1, float f)
    {
        return new Vector2(v1.x / f, v1.y / f);
    }

    public float Magnitude()
    {
        return (float)Math.Sqrt(x * x + y * y);
    }

    public static float Dot(Vector2 v1, Vector2 v2)
    {
        return v1.x * v2.x + v1.y * v2.y;
    }

    public static float Cross(Vector2 v1, Vector2 v2)
    {
        return v1.x * v2.y - v2.x * v1.y;
    }

    public static Vector2 Normalize(Vector2 v)
    {
        float magnitude = v.Magnitude();
        if (magnitude == 0f)
        {
            return Vector2.zero;
        }
        return v / magnitude;
    }

    public static readonly Vector2 zero = new Vector2(0f, 0f);
    public static readonly Vector2 one = new Vector2(1f, 1f);
    public static readonly Vector2 up = new Vector2(0f, 1f);
    public static readonly Vector2 right = new Vector2(1f, 0f);
}
使用 switch 语句实现

接着我们就可以使用 switch 语句来控制向量运算了。

public Vector2 Operate(Vector2 v1, Vector2 v2, string op)
{
    switch (op)
    {
        case "+":
            return v1 + v2;
        case "-":
            return v1 - v2;
        case "*":
            // 在此假定 * 右边是一个 float 值
            return v1 * float.Parse(v2.ToString());
        case "/":
            // 同上,/ 右边是一个 float 值
            return v1 / float.Parse(v2.ToString());
        case "magnitude":
            return Vector2.Normalize(v1) * float.Parse(v1.Magnitude().ToString());
        case "dot":
            return Vector2.one * Vector2.Dot(v1, v2);
        case "cross":
            return Vector2.up * Vector2.Cross(v1, v2);
        default:
            Debug.Log("不支持的运算符");
            return Vector2.zero;
    }
}

以上就是基于 switch 语句实现 Vector2 向量运算的代码片段。

总结

switch 语句广泛应用于根据一定条件进行分支操作的场景中,代码控制简单。我们通过 switch 语句实现了 Vector2 中的向量运算。