“强基初中数学&学Python班”正在招六、七、八年级学生,有意者请关注后私信报名!
更多课程,请复制本公众号网址http://www.5xstar.com在浏览器中打开。
例题1:如下图(作图代码附录1),河宽2千米,水的流速是30千米每小时,船从码头A出发,船头方向垂直于岸,刚好到达对岸下游1.5千米的码头B处,船在静水中的航行速度是多少千米每小时?实际航行的速度又是多少千米每小时?
分析:由于船头是垂直于岸的,那它将出发时是正向着对岸的那一块水域行驶的,假如河水是静止的,那河宽除以船的静水速度就是船渡河的时间t;但实际上河水是流动的,那河水在t的时间内流动了1.5千米;实际船也在t时间内到达B码头。
解:设船在静水中的航行速度是x千米每小时,实际航行的速度又是y千米每小时,码头A到码头B的直线距离是d,则:
d²=2²+1.5²
d²=6.25
d=2.5
2÷x=1.5÷30=2.5÷y
x=2×30÷1.5
x=40
y=2.5×30÷1.5
y=50
答:船在静水中的航行速度是40千米每小时,实际航行的速度是50千米每小时。
船(40千米每小时)与水(30千米每小时)的速度叠加,如果是顺流是70千米每小时,如果是逆流是10千米每小时。上面例题,两个速度的方向垂直,速度是50千米每小时。不难发现:
30²+40²=50²。
三个速度大小构成直角三角形。这说明速度的算术叠加(加或减)已经不适合这种情景,为了适应这种情景,引入“向量”的概念。
我们把一切既有大小也有方向的物理量(例如:速度、力等)统称为“向量”。数学中的向量忽略了客观世界中的向量的物理属性,只作为大小和方向的化身,也就是说,数学中研究的向量,除了大小和方向的属性外,没有别的属性了。
这样,向量的大小可以用一个数来表示;方向总是“空间”中的方向。空间是有“维度”的,一条线可以认为是一维空间;一个面是二维空间;我们生活的宇宙是三维空间。初中物理中要求我们掌握平面这个二维空间中的向量。
我们知道平面直角坐标系的纵横坐标轴是互相垂直的,是不是所有的平面坐标系都要求纵横坐标轴互相垂直呢?答案是否定的!任意一对非重叠相交直线,都可以作为平面坐标系。下图是相交角60°的平面坐标系(作图代码附录2):
可见,不是只有直角坐标系的数对与平面上的点一一对应,非直角坐标系也是一一对应的,但没有直角坐标系那么直观!也就是说,直角坐标系能最好地表现空间两个“维”的“垂直”关系。
例题2:在直角坐标系和非直角坐标系中标出:
(1)坐标(x, 3) 中的x取-3, -2, -1, 0, 1, 2, 3;
(2)坐标(3, y) 中的y取-3, -2, -1, 0, 1, 2, 3。
解:图下(代码附录3):
由上面例题可以看到:当坐标的纵坐标固定后,横坐标可以取任何实数值,并构成一条平行于横坐标的直线,我们可以认为横坐标的所有值是一个“维”;当坐标的横坐标固定后,纵坐标可以取任何实数值,并构成一条平行于纵坐标的直线,我们可以认为纵坐标的所有值也是一个“维”。不管用直角坐标系还是非直角坐标系,这两个“维”都是互相“垂直”的。也就是说,维度之间本来就是“垂直”的,不是因为用了直角坐标的缘故。笛卡尔平面直角坐标系把平面两个维度之间的抽象“垂直”关系形象化。
一般地,我们用一条线段一端点加上箭头来表示向量,线段长度表示向量的大小,箭头的方向表示向量的方向。
在例题1中,由于船头垂直与河岸,那船的本身速度(静水速度)向量就只能改变船的垂直方向的距离,水流只能改变水平方向的距离,它们的共同作用下就改变了船在平面上的位置了。由这例子容易看出垂直向量的合成规律:
在平面中,两个互相垂直的向量的合向量的大小等于这两个向量的矩形对角线长,方向指向对角。
例题3:如下图(作图代码附录4),船在静水中的速度是根号6千米/时,水流速度是根号3千米/时,船头与水流方向垂直,问船的实际速度大小是多少千米/时?
分析:由于船头与水流方向垂直,所以可以认为,水流速度和船在静水中的速度是一对互相垂直的向量,根据互相垂直向量的合成规律就可以算出船的实际速度。
解:设船的实际速度大小是x km/h,则:
x²=3+6=9
x=3
答:船的实际速度大小是3千米/时。
把垂直向量的合成规律反过来,就得到向量的垂直分解规律:
在平面中,任何一个非0向量都可以分解为任意多对相互垂直的向量;不在平面直角坐标系坐标轴上的向量,都可分解为分别在纵横坐标轴的两个向量。
例题4:如下图(作图代码附录5),向量c可分解为x轴上的向量a和y轴上的向量b。已知向量c的大小是50,向量a的大小是30,问向量b的大小是多少?
解:设向量b的大小是x,由向量的合成规律得:
x²+30²=50²
x²=1600
x=40
答:向量b的大小是40。
如下图(作图代码附录6):
根据向量可以分解为直角坐标系纵横轴上的两个向量,假设一个向量a可以分解为ax和ay向量,我们记作:
向量a=向量ax+向量ay;
另一个向量b可以分解为bx和by向量,我们记作:
向量b=向量bx+向量by。
由于向量ax和向量bx同在x轴上,它们的大小可以直接相加而成x轴向量:
x轴向量=向量ax+向量bx=向量(ax+bx);
向量ay和向量by同在y轴上,它们的大小也可以直接相加形成y轴向量:
y轴向量=向量ay+向量by=向量(ay+by);
x轴向量和y轴向量是两个互相垂直的向量,根据互相垂直的向量的合成,就可以得到合成向量的大小和方向。利用直角坐标系进行向量合成的规则:
在直角坐标系平面中,任意两个向量(起点都是原点)合成,先把它们分解为纵横坐标轴上的两对向量,然后分别相加就是合向量纵横坐标轴的两个分向量。
由上图可知,这个合向量就是两个向量首尾相接的三角形另一边。这就是任意一对向量合成的三角形法则(或平行四边形法则):
在平面中,任何一对向量合成,只要把第二个向量接在第一个向量尾部,由第一个向量的始点指向第二个向量的尾部的向量就是合成的向量。
例题5:现假如在例题1中,水流速度变为20千米每小时,不改变到达时间,问船要改变静水速度为多少千米每小时,方向偏向还是偏离B码头?
分析:原来船的静水速度40千米每小时与岸垂直,水流30千米每小时与岸平行,由于不改变到达时间,新的两个向量的合向量在平行于岸和垂直于岸的分量也必然是30千米每小时和40千米每小时。
解:河水速度减少了,这个必须要船的静水速度补上,作的向量图(作图代码附录7)如下:
设船静水速度是x千米每小时,则:
x²=(30-20)²+40²
x²=1700
x=10根号17
答:船要改变静水速度为10根号17千米每小时,方向偏向B码头。
练习题:现假如在例题1中,水流速度变为40千米每小时,不改变到达时间,问船要改变静水速度为多少千米每小时,方向偏向还是偏离B码头?
附录1:
#正交向量
import turtle as t #导入海龟画图
t.setup(500,500)
t.screensize(440,440)
t.title("正交向量")
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,dx=0,dy=0,align=None):
'''
@name 位置名称
@pos 位置坐标
@dx 写字位置x增加值
@dy 写字位置y增加值
@align 写字方向:center,left,right
'''
t.up()
t.setpos(pos[0]+dx,pos[1]+dy)
if align==None:
t.write(name, font=workFont)
else:
t.write(name, align=align, font=workFont)
t.setpos(pos)
t.down()
t.setpos(-220,180)
t.seth(0)
t.down()
t.forward(100)
t.dot(5)
posA2=t.pos()
indication("A的正对岸",posA2,dx=-5,dy=15,align="center")
t.forward(150)
t.dot(5)
posB=t.pos()
indication("B码头",t.pos(),dy=15,align="center")
t.forward(190)
t.up()
t.setpos(posA2)
t.down()
t.seth(90)
t.forward(10)
t.back(5)
t.left(90)
t.stamp()
t.seth(0)
for d in range(0,150,10):
if d % 20 == 0:
t.down()
else:
t.up()
t.forward(10)
t.stamp()
t.left(90)
t.forward(5)
t.back(10)
t.up()
t.forward(5)
t.left(90)
t.forward(75)
indication("1.5km",t.pos(),dy=5,align="center")
t.up()
t.setpos(-170,180)
t.seth(90)
t.stamp()
t.seth(-90)
for d in range(0,100,10):
if d % 20 == 0:
t.down()
else:
t.up()
t.forward(10)
indication("河宽",t.pos(),dx=-2,align="right")
indication("2km",t.pos(),dx=-2,dy=-25,align="right")
for d in range(0,100,10):
if d % 20 == 0:
t.down()
else:
t.up()
t.forward(10)
t.stamp()
pos=t.pos()
t.down()
t.setx(-220)
t.up()
t.setpos(pos)
t.down()
t.setx(-120)
t.dot(5)
pos=t.pos()
indication("A码头",t.pos(),dy=-25,align="center")
t.setx(220)
t.up()
t.pencolor("blue")
t.fillcolor("blue")
t.pensize(3)
t.setpos(100,50)
t.down()
t.seth(0)
t.forward(60)
t.stamp()
indication("河水流速",t.pos(),dx=2,dy=-10)
indication("30km/h",t.pos(),dx=2,dy=-35)
t.up()
t.setpos(pos)
t.seth(0)
for d in range(0,150,10):
if d % 20 == 0:
t.down()
else:
t.up()
t.forward(10)
t.stamp()
t.pencolor("red")
t.fillcolor("red")
t.up()
t.setpos(100,50)
t.left(90)
t.down()
t.forward(80)
t.stamp()
indication("静水船速",t.pos(),dx=5,dy=-25)
indication("?km/h",t.pos(),dx=5,dy=-50)
t.up()
t.setpos(pos)
t.seth(90)
for d in range(0,200,10):
if d % 20 == 0:
t.down()
else:
t.up()
t.forward(10)
t.stamp()
t.up()
t.setpos(pos)
import math
t.seth(math.atan2(2,1.5)*180/math.pi)
t.pencolor("#FF00FF")
t.fillcolor("#FF00FF")
t.down()
t.forward(125)
indication("实际船速",t.pos(),dx=15)
indication("?km/h",t.pos(),dx=15,dy=-25)
t.forward(125)
t.stamp()
t.ht()
t.mainloop()
附录2:
#非直角坐标系
import turtle as t #导入海龟画图
t.setup(500,500)
t.screensize(440,440)
t.title("非直角坐标系")
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,dx=0,dy=0,align=None):
'''
@name 位置名称
@pos 位置坐标
@dx 写字位置x增加值
@dy 写字位置y增加值
@align 写字方向:center,left,right
'''
t.up()
t.setpos(pos[0]+dx,pos[1]+dy)
if align==None:
t.write(name, font=workFont)
else:
t.write(name, align=align, font=workFont)
t.setpos(pos)
t.down()
#画横坐标
t.setpos(-220,0)
t.seth(0)
t.down()
t.setpos(50,0)
#标注P点横坐标值
indication("a",t.pos(),dy=2)
t.setx(100)
t.dot(5)
t.setx(220)
t.stamp()
indication("x",t.pos(),dx=-2,dy=-25,align="right")
t.up()
#标注原点
t.setx(0)
t.dot(5)
indication("o",t.pos(),dx=-5,dy=-15,align="right") #原点
t.up()
#标注角度
t.setpos(10,0)
t.seth(90)
t.down()
t.circle(10,60)
indication("60°",t.pos(),dx=8,dy=-8)
t.up()
#画纵下半坐标
t.down()
t.seth(-120)
t.forward(220)
t.up()
#画纵上半坐标
t.setpos(0,0)
t.down()
t.seth(60)
t.forward(50)
indication("b",t.pos(),dx=12)
t.forward(50)
t.dot(5)
pos=t.pos()
t.forward(120)
t.stamp()
indication("y",t.pos(),dx=-5,dy=-5,align="right")
t.up()
#画横坐标虚线
t.setpos(pos)
t.seth(0)
for d in range(0,100,10):
if d % 20 == 0:
t.down()
else:
t.up()
t.forward(10)
#标注P点
t.dot(5)
indication("P(a, b)",t.pos(),dx=5)
#画纵坐标值虚线
t.seth(-120)
for d in range(0,100,10):
if d % 20 == 0:
t.down()
else:
t.up()
t.forward(10)
t.ht()
t.mainloop()
附录3:
#一坐标值可变的坐标
import turtle as t #导入海龟画图
t.setup(500,1000)
t.screensize(440,880)
t.title("一坐标值可变的坐标")
t.shape("classic")
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,dx=0,dy=0,align=None):
'''
@name 位置名称
@pos 位置坐标
@dx 写字位置x增加值
@dy 写字位置y增加值
@align 写字方向:center,left,right
'''
t.up()
t.setpos(pos[0]+dx,pos[1]+dy)
if align==None:
t.write(name, font=workFont)
else:
t.write(name, align=align, font=workFont)
t.setpos(pos)
t.down()
#直角坐标系
#画横坐标
t.setpos(-220,220)
t.seth(0)
t.down()
for x in range(-200,220,50):
t.setx(x)
t.dot(3)
t.setx(220)
t.stamp()
indication("x",t.pos(),dx=-5,dy=-25)
t.up()
#画纵坐标
t.setpos(0,0)
t.seth(90)
t.down()
for y in range(20,440,50):
t.sety(y)
t.dot(3)
t.sety(440)
t.stamp()
indication("y",t.pos(),dx=-5,dy=-20,align="right")
t.up()
#打点(x, 3)
t.pencolor("blue")
t.fillcolor("blue")
t.setpos(-150,370)
t.dot(5)
indication("(-3,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(-100)
t.dot(5)
indication("(-2,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(-50)
t.dot(5)
indication("(-1,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(0)
t.dot(5)
indication("(0,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(50)
t.dot(5)
indication("(1,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(100)
t.dot(5)
indication("(2,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(150)
t.dot(5)
indication("(3,3)",t.pos(),dy=2,align="center")
t.up()
#打点(3, y)
t.pencolor("red")
t.fillcolor("red")
t.setpos(150,220-150)
t.dot(5)
indication("(3,-3)",t.pos(),dx=5,dy=-10)
t.up()
t.sety(220-100)
t.dot(5)
indication("(3,-2)",t.pos(),dx=5,dy=-10)
t.up()
t.sety(220-50)
t.dot(5)
indication("(3,-1)",t.pos(),dx=5,dy=-10)
t.up()
t.sety(220)
t.dot(5)
indication("(3,0)",t.pos(),dx=5,dy=-10)
t.up()
t.sety(220+50)
t.dot(5)
indication("(3,1)",t.pos(),dx=5,dy=-10)
t.up()
t.sety(220+100)
t.dot(5)
indication("(3,2)",t.pos(),dx=5,dy=-10)
t.up()
t.sety(220+150)
t.dot(5)
indication("(3,3)",t.pos(),dx=5,dy=-10)
t.up()
#非直角坐标系
t.pencolor("black")
t.fillcolor("black")
#画横坐标
t.setpos(-220,-220)
t.seth(0)
t.down()
for x in range(-200,200,50):
t.setx(x)
t.dot(3)
t.setx(220)
t.stamp()
indication("x",t.pos(),dx=-5,dy=-25)
t.up()
#画纵下半坐标
t.setx(0)
t.down()
t.seth(60)
for y in range(0,200,50):
t.back(50)
t.dot(3)
t.back(20)
t.up()
#画纵上半坐标
t.forward(220)
t.down()
for y in range(0,200,50):
t.forward(50)
t.dot(3)
t.forward(20)
t.stamp()
indication("y",t.pos(),dx=-10,dy=-15,align="right")
t.up()
#打点(x, 3)
t.pencolor("blue")
t.fillcolor("blue")
t.setpos(0,-220)
t.seth(60)
t.forward(150)
t.dot(5)
indication("(0,3)",t.pos(),dy=2,align="center")
t.up()
x=t.pos()[0]
t.setx(x-50)
t.dot(5)
indication("(-1,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(x-100)
t.dot(5)
indication("(-2,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(x-150)
t.dot(5)
indication("(-3,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(x+50)
t.dot(5)
indication("(1,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(x+100)
t.dot(5)
indication("(2,3)",t.pos(),dy=2,align="center")
t.up()
t.setx(x+150)
t.dot(5)
indication("(3,3)",t.pos(),dy=2,align="center")
t.up()
#打点(3, y)
t.pencolor("red")
t.fillcolor("red")
t.setpos(150,-220)
t.dot(5)
indication("(3,0)",t.pos(),dx=5,dy=-10)
t.up()
t.forward(50)
t.dot(5)
indication("(3,1)",t.pos(),dx=5,dy=-10)
t.up()
t.forward(50)
t.dot(5)
indication("(3,2)",t.pos(),dx=5,dy=-10)
t.up()
t.forward(50)
t.dot(5)
indication("(3,3)",t.pos(),dx=5,dy=-10)
t.up()
t.back(200)
t.dot(5)
indication("(3,-1)",t.pos(),dx=5,dy=-10)
t.up()
t.back(50)
t.dot(5)
indication("(3,-2)",t.pos(),dx=5,dy=-10)
t.up()
t.dot(5)
indication("(3,-3)",t.pos(),dx=5,dy=-10)
t.up()
t.ht()
t.mainloop()
附录4:
#垂直向量合成
import sys
sys.path.append("/5xstar/pyfiles") #预制自定义模块(py文件)存放根目录
from mymath.rooting import writeSqrt #导入根号书写函数
import turtle as t #导入海龟画图
t.setup(250,250)
t.screensize(200,200)
t.title("垂直向量合成")
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,value=None,dx=0,dy=0):
'''
@name 位置名称
@pos 位置坐标
@dx 写字位置x增加值
@dy 写字位置y增加值
@align 写字方向:center,left,right
'''
t.up()
t.setpos(pos[0]+dx,pos[1]+dy)
t.write(name, move=True,font=workFont)
if value!=None:
writeSqrt(t, value)
t.setpos(pos)
t.down()
#画水流速度
t.pencolor("blue")
t.fillcolor("blue")
t.setpos(-70,-70)
t.seth(0)
t.down()
t.fd(3**0.5*50)
t.stamp()
indication("水流速度(km/h):",(-70,-80),dx=10,dy=-25,value=3)
t.up()
#画船静水速度
t.pencolor("red")
t.fillcolor("red")
t.setpos(-70,-70)
t.seth(90)
t.down()
t.fd(6**0.5*50)
t.stamp()
indication("静水船速(km/h):",t.pos(),dx=-45,dy=10,value=6)
t.up()
#画船实际速度
t.pencolor("#FF00FF")
t.fillcolor("#FF00FF")
t.setpos(-70,-70)
import math
t.seth(math.atan2(6**0.5,3**0.5)*180/math.pi)
t.down()
t.fd(3*50)
t.stamp()
indication("实际船速(km/h):?",t.pos(),dx=-50,dy=-100)
t.up()
t.ht()
t.mainloop()
附录5:
#垂直向量分解
import turtle as t #导入海龟画图
t.setup(250,250)
t.screensize(200,200)
t.title("垂直向量分解")
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,align=None,dx=0,dy=0):
'''
@name 位置名称
@pos 位置坐标
@dx 写字位置x增加值
@dy 写字位置y增加值
@align 写字方向:center,left,right
'''
t.up()
t.setpos(pos[0]+dx,pos[1]+dy)
if align==None:
t.write(name, font=workFont)
else:
t.write(name, align=align,font=workFont)
t.setpos(pos)
t.down()
#垂直向量之一
t.pencolor("blue")
t.fillcolor("blue")
t.setpos(-70,-70)
t.seth(0)
t.down()
t.fd(3*30)
t.stamp()
indication("a大小=30",t.pos(),dx=5,dy=-10)
t.up()
#垂直向量之一
t.pencolor("red")
t.fillcolor("red")
t.setpos(-70,-70)
t.seth(90)
t.down()
t.fd(4*30)
t.stamp()
indication("b大小=?",t.pos(),dy=5,align="center")
t.up()
#原向量
t.pencolor("#FF00FF")
t.fillcolor("#FF00FF")
t.setpos(-70,-70)
import math
t.seth(math.atan2(4,3)*180/math.pi)
t.down()
t.fd(5*30)
t.stamp()
indication("c大小=50",t.pos(),dx=5,dy=5)
t.up()
t.ht()
t.mainloop()
附录6:
#任意向量合成原理
import turtle as t #导入海龟画图
t.setup(350,350)
t.screensize(220,220)
t.title("任意向量合成原理")
t.shape("classic")
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,align=None,dx=0,dy=0):
'''
@name 位置名称
@pos 位置坐标
@dx 写字位置x增加值
@dy 写字位置y增加值
@align 写字方向:center,left,right
'''
t.up()
t.setpos(pos[0]+dx,pos[1]+dy)
if align==None:
t.write(name, font=workFont)
else:
t.write(name, align=align,font=workFont)
t.setpos(pos)
t.down()
#x坐标轴
t.setpos(-110,-100)
t.seth(0)
t.down()
for x in range(-100,110,20):
t.setx(x)
t.dot(3)
t.setx(110)
t.stamp()
indication("x",t.pos(),dy=-20,align="right")
t.up()
#y坐标轴
t.setpos(-100,-110)
t.seth(90)
t.down()
for y in range(-100,110,20):
t.sety(y)
t.dot(3)
t.sety(110)
t.stamp()
indication("y",t.pos(),dx=-5,dy=-15,align="right")
t.up()
#向量之一
t.pencolor("red")
t.fillcolor("red")
t.pensize(2)
t.setpos(-100,-100)
t.seth(60)
t.down()
t.fd(4*30)
t.stamp()
pos=t.pos()
indication("向量a",pos,dy=2,align="center")
t.down()
t.pensize(1)
i=0
while pos[0]-10*i>-100:
t.setx(pos[0]-10*i)
if i % 2 == 0:
t.down()
else:
t.up()
i+=1
t.setx(-100)
t.dot(5)
indication("向量ay",t.pos(),dx=-5,dy=-50,align="right")
t.up()
t.setpos(pos)
t.down()
i=0
while pos[1]-10*i>-100:
t.sety(pos[1]-10*i)
if i % 2 == 0:
t.down()
else:
t.up()
i+=1
t.sety(-100)
t.dot(5)
indication("向量ax",t.pos(),dy=-30,dx=-30,align="center")
t.up()
#向量之二
t.pencolor("blue")
t.fillcolor("blue")
t.pensize(2)
t.seth(30)
t.setpos(pos)
t.down()
t.fd(3*30)
t.stamp()
pos=t.pos()
indication("向量b",pos,dy=2,align="center")
t.down()
t.pensize(1)
i=0
while pos[0]-10*i>-100:
t.setx(pos[0]-10*i)
if i % 2 == 0:
t.down()
else:
t.up()
i+=1
t.setx(-100)
t.dot(5)
indication("向量by",t.pos(),dx=-5,dy=-25,align="right")
t.up()
t.setpos(pos)
t.down()
i=0
while pos[1]-10*i>-100:
t.sety(pos[1]-10*i)
if i % 2 == 0:
t.down()
else:
t.up()
i+=1
t.sety(-100)
t.dot(5)
indication("向量bx",t.pos(),dy=-30,dx=-40,align="center")
t.up()
#合成c向量
t.pencolor("#FF00FF")
t.fillcolor("#FF00FF")
t.pensize(2)
t.setpos(pos)
import math
t.seth(math.atan2(pos[1],pos[0])*180/math.pi)
t.stamp()
indication("合成向量",t.pos(),dx=5,dy=-20)
t.down()
t.setpos(-100,-100)
t.up()
t.ht()
t.mainloop()
附录7:
#正交分向量不变
import math
import turtle as t #导入海龟画图
t.setup(400,400)
t.screensize(300,300)
t.title("正交分向量不变")
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,dx=0,dy=0,align=None):
'''
@name 位置名称
@pos 位置坐标
@dx 写字位置x增加值
@dy 写字位置y增加值
@align 写字方向:center,left,right
'''
t.up()
t.setpos(pos[0]+dx,pos[1]+dy)
if align==None:
t.write(name, font=workFont)
else:
t.write(name, align=align, font=workFont)
t.setpos(pos)
t.down()
t.pencolor("blue")
t.fillcolor("blue")
t.pensize(3)
pos=-80,-80
t.setpos(pos)
t.down()
t.seth(0)
t.forward(3*50)
t.stamp()
indication("原河水流速",t.pos(),dx=2,dy=-10)
indication("30km/h",t.pos(),dx=2,dy=-35)
t.up()
pos2=-30,120
t.setpos(pos2)
for x in range(-30,70,10):
if x % 20 == 0:
t.down()
else:
t.up()
t.setx(x)
t.setx(70)
t.stamp()
indication("河水流速20km/h",t.pos(),dx=-2,dy=2,align="right")
t.up()
t.pencolor("red")
t.fillcolor("red")
t.setpos(pos)
t.left(90)
t.down()
t.forward(4*50)
t.stamp()
indication("原静水船速",t.pos(),dx=5,dy=30,align="right")
indication("40km/h",t.pos(),dx=5,dy=5,align="right")
t.up()
t.setpos(pos)
t.down()
t.seth(math.atan2(4,1)*180/math.pi)
lth=(4**2+1**2)**0.5*50-10
i=0
while lth-10*i > 0:
if i % 2 == 0:
t.down()
else:
t.up()
t.fd(10)
i+=1
t.setpos(pos2)
t.stamp()
indication("静水船速",t.pos(),dx=5,dy=-25)
indication("?km/h",t.pos(),dx=5,dy=-50)
t.up()
t.setpos(pos)
t.seth(math.atan2(2,1.5)*180/math.pi)
t.pencolor("#FF00FF")
t.fillcolor("#FF00FF")
t.down()
t.forward(2.5*50)
indication("实际船速",t.pos(),dx=15)
indication("50km/h",t.pos(),dx=15,dy=-25)
t.forward(2.5*50)
t.stamp()
t.ht()
t.mainloop()