在数学和计算机图形学中,向量变换是一种非常基础且重要的概念。它允许我们改变图形的位置、大小和方向。本文将深入探讨三种基本的向量变换:平移、伸缩和旋转,帮助你理解这些变换的原理和应用。
平移(Translation)
平移是一种将图形在二维或三维空间中移动的变换。它不改变图形的大小或形状,只是改变其位置。在二维空间中,平移可以通过向量来实现。
向量表示
假设我们有一个点 ( P(x, y) ),想要将它平移到新的位置 ( P’(x’, y’) ),可以使用向量 ( \vec{v} = (x’ - x, y’ - y) ) 来表示这个平移。
示例
def translate_point(point, vector):
x, y = point
dx, dy = vector
return (x + dx, y + dy)
# 原点坐标
original_point = (1, 2)
# 平移向量
translation_vector = (3, 4)
# 平移后的点
new_point = translate_point(original_point, translation_vector)
print(new_point) # 输出: (4, 6)
伸缩(Scaling)
伸缩是一种改变图形大小但不改变其形状的变换。它可以通过乘以一个缩放因子来实现。
向量表示
假设我们有一个点 ( P(x, y) ),想要将其缩放到新的大小 ( P’(x’, y’) ),可以使用向量 ( \vec{s} = (s_x, s_y) ) 来表示这个伸缩,其中 ( s_x ) 和 ( s_y ) 分别是 x 轴和 y 轴的缩放因子。
示例
def scale_point(point, scale_vector):
x, y = point
sx, sy = scale_vector
return (x * sx, y * sy)
# 原点坐标
original_point = (1, 2)
# 伸缩向量
scale_vector = (2, 3)
# 伸缩后的点
scaled_point = scale_point(original_point, scale_vector)
print(scaled_point) # 输出: (2, 6)
旋转(Rotation)
旋转是一种将图形绕一个固定点旋转一定角度的变换。在二维空间中,旋转通常使用角度来描述。
向量表示
假设我们有一个点 ( P(x, y) ),想要将其绕原点旋转角度 ( \theta ),可以使用以下公式:
[ P’(x’, y’) = (x \cos(\theta) - y \sin(\theta), x \sin(\theta) + y \cos(\theta)) ]
示例
import math
def rotate_point(point, angle):
x, y = point
theta = math.radians(angle) # 将角度转换为弧度
cx, cy = math.cos(theta), math.sin(theta)
return (x * cx - y * cy, x * cy + y * cx)
# 原点坐标
original_point = (1, 2)
# 旋转角度
angle = 45
# 旋转后的点
rotated_point = rotate_point(original_point, angle)
print(rotated_point) # 输出: (0.7071, 1.4142)
通过以上三种基本的向量变换,我们可以实现各种复杂的图形变换。这些变换在计算机图形学、动画制作和图像处理等领域有着广泛的应用。希望这篇文章能帮助你更好地理解向量变换的奥秘。
