mbcp/docs/api/mp_math/vector.md
2024-08-28 10:52:17 +08:00

5.3 KiB
Raw Blame History

title order icon category
mbcp.mp\nmath.vector 1 laptop-code API

class Vector3

def __init__(self, x: float, y: float, z: float) -> None

3维向量

Args:

x: x轴分量

y: y轴分量

z: z轴分量
源代码
def __init__(self, x: float, y: float, z: float):
    """
        3维向量
        Args:
            x: x轴分量
            y: y轴分量
            z: z轴分量
        """
    self.x = x
    self.y = y
    self.z = z

def approx(self, other: 'Vector3', epsilon: float) -> bool

 判断两个向量是否近似相等。

Args:

other:

epsilon:

Returns:

是否近似相等
源代码
def approx(self, other: 'Vector3', epsilon: float=APPROX) -> bool:
    """
        判断两个向量是否近似相等。
        Args:
            other:
            epsilon:

        Returns:
            是否近似相等
        """
    return all([abs(self.x - other.x) < epsilon, abs(self.y - other.y) < epsilon, abs(self.z - other.z) < epsilon])

def cal_angle(self, other: 'Vector3') -> 'AnyAngle'

 计算两个向量之间的夹角。

Args:

other: 另一个向量

Returns:

夹角
源代码
def cal_angle(self, other: 'Vector3') -> 'AnyAngle':
    """
        计算两个向量之间的夹角。
        Args:
            other: 另一个向量
        Returns:
            夹角
        """
    return AnyAngle(math.acos(self @ other / (self.length * other.length)), is_radian=True)

def cross(self, other: 'Vector3') -> 'Vector3'

 向量积 叉乘v1 cross v2 -> v3

叉乘为0则两向量平行。

其余结果的模为平行四边形的面积。

返回如下行列式的结果:

i j k

x1 y1 z1

x2 y2 z2

Args:

other:

Returns:

行列式的结果
源代码
def cross(self, other: 'Vector3') -> 'Vector3':
    """
        向量积 叉乘v1 cross v2 -> v3

        叉乘为0则两向量平行。
        其余结果的模为平行四边形的面积。

        返回如下行列式的结果:

        ``i  j  k``

        ``x1 y1 z1``

        ``x2 y2 z2``

        Args:
            other:
        Returns:
            行列式的结果
        """
    return Vector3(self.y * other.z - self.z * other.y, self.z * other.x - self.x * other.z, self.x * other.y - self.y * other.x)

def is_approx_parallel(self, other: 'Vector3', epsilon: float) -> bool

 判断两个向量是否近似平行。

Args:

other: 另一个向量

epsilon: 允许的误差

Returns:

是否近似平行
源代码
def is_approx_parallel(self, other: 'Vector3', epsilon: float=APPROX) -> bool:
    """
        判断两个向量是否近似平行。
        Args:
            other: 另一个向量
            epsilon: 允许的误差
        Returns:
            是否近似平行
        """
    return self.cross(other).length < epsilon

def is_parallel(self, other: 'Vector3') -> bool

 判断两个向量是否平行。

Args:

other: 另一个向量

Returns:

是否平行
源代码
def is_parallel(self, other: 'Vector3') -> bool:
    """
        判断两个向量是否平行。
        Args:
            other: 另一个向量
        Returns:
            是否平行
        """
    return self.cross(other).approx(zero_vector3)

def normalize(self) -> None

 将向量归一化。

自体归一化,不返回值。

源代码
def normalize(self):
    """
        将向量归一化。

        自体归一化,不返回值。
        """
    length = self.length
    self.x /= length
    self.y /= length
    self.z /= length

@property

def np_array(self: Any) -> 'np.ndarray'

返回numpy数组

Returns:

源代码
@property
def np_array(self) -> 'np.ndarray':
    """
        返回numpy数组
        Returns:
        """
    return np.array([self.x, self.y, self.z])

@property

def length(self: Any) -> float

 向量的模。

Returns:

源代码
@property
def length(self) -> float:
    """
        向量的模。
        Returns:
        """
    return math.sqrt(self.x ** 2 + self.y ** 2 + self.z ** 2)

@property

def unit(self: Any) -> 'Vector3'

 获取该向量的单位向量。

Returns:

单位向量
源代码
@property
def unit(self) -> 'Vector3':
    """
        获取该向量的单位向量。
        Returns:
            单位向量
        """
    return self / self.length

var zero_vector3 = Vector3(0, 0, 0)

var x_axis = Vector3(1, 0, 0)

var y_axis = Vector3(0, 1, 0)

var z_axis = Vector3(0, 0, 1)

var length = self.length