专业编程基础技术教程

网站首页 > 基础教程 正文

4.Python趣味数学笔记:向量运算

ccvgpt 2024-12-06 13:10:34 基础教程 2 ℃

如同对标量可以进行“数”运算一样,我们可以对向量进行运算,从而得到一个新的向量。不过,向量跟标量不同。标量只有大小,比如:质量、密度、温度等,而向量(物理学中称作矢量)既有大小,又有方向,比如:力、位移、速度等

到图中指定点,长度为K的线段(标量),会有多条,但是确定方向(与X坐标轴夹角)后,可以唯一确定一个向量。

4.Python趣味数学笔记:向量运算

本章以二维向量为例,将介绍基本向量运算:向量加减法,向量分量和长度,向量数乘。

向量加减法

我们小时候可能玩过FC射击类游戏《魂斗罗》,玩家控制游戏角色可以在屏幕上移动:前进、后退、上下跳、斜跳(不考虑下落)等。

1.我们以屏幕左下角作为原点,建立坐标系。

角色所在的位置记为向量v。假设向量v的坐标是:

2.我们控制角色向前移动一步

跟向量w相加即可:v+w=+=

向量加法满足平行四边形法则:


3.我们控制角色往左上方向斜跳(不考虑下落)一步

1)使用向量加法

跟向量w相加即可v+w=+=

向量加法满足平行四边形法则:

2)使用向量减法

跟向量w相减即可

v-w=-=v+(-w)=+=

从运算过程可以看出,v-w相当于v+(-w),依然满足平行四边形法则。

向量分量和长度

根据平行四边形法则,我们可以将某一个向量,分别沿X轴和Y轴进行分解,会产生两个向量分量。

比如:我们将向量w沿X轴和Y轴进行分解,会得到两个向量。

我们可以找到一个直角三角形,应用“勾股定理”计算向量w的长度。向量的长度也叫做向量的

向量数乘

向量的数乘运算,可以看作多次向量加法运算。比如:向量w,进行数乘运算:

3w=++= =

可以看出,向量的数乘运算,会将向量(包括:向量的分量)按给定的系数进行缩放。

解决问题

1.上一章我们绘制了一个正方形,运用向量运算可以将该正方形整体移动到右上角。

def add(*vectors):
    return (sum([vector[0] for vector in vectors]),
            sum([vector[1] for vector in vectors]))
#定义一组二维向量
two_dim_vectors=[(-2,2),(0,2),(2,2),(2,0),(2,-2),(0,-2),(-2,-2),(-2,0)]
move_vector=(1,1)
move_two_dim_vectors=[add(two_dim_vector,move_vector) for two_dim_vector in two_dim_vectors]
#绘制正方形
draw_objects(Points(two_dim_vectors,color=red),
             Lines(two_dim_vectors,color=red),
             Points(move_two_dim_vectors),
             Lines(move_two_dim_vectors)
             )

绘制效果图:

2.令u为向量。假定有另一个正整数坐标为向量v,且它与u的距离为13,那么如何从uv

直接求解比较困难,我们可以使用“穷举法”。假设以u为圆点画一个圆圆的半径为13,可得待搜索的值域范围:X轴为[-12,14],Y轴坐标为[-14,12]。

from math import sqrt
#向量减法
def subtract(v1,v2):
    return (v1[0]-v2[0],v1[1]-v2[1])
#向量的长度
def length(v1):
    return sqrt(v1[0]**2+v1[1]**2)
#计算向量距离:
def distance(v1,v2):
    return length(subtract(v1,v2))

#穷举法寻找
for n in range(-12,15):
    for m in range(-14,13):
        if distance((1,-1),(n,m)) == 13 and n>m>0:
            print((n,m))

输出结果:

(13, 4)

uv,可以先右移12个单元格,再上移5个单元格。

最近发表
标签列表