强基初中数学&学Python——第五十一课 坐标应用之二:方向和距离确定坐标

    除了纵横坐标可以确定一个位置外,知道方向和距离也可以确定一个位置。

    例题:如下图,一艘船在A处遇险后向相距35 n mile 位于B处的救生船报警,救生船的导航系统需要输入以它的当前位置为原点、正东和正北分别为x轴和y轴的正向的目标坐标。请用海龟画图确定A点位置坐标(结果保留小数点后3位)。

分析:坐标原点和方向已作规定,只要估算画布的大小。有一个锐角是60度的直角三角型三边数量关系如下图:

,短直角边长是斜边的二分之一,长直角边长不超过斜边的十分之九。由于要在上面写字,图片区域采用画布的70%,数量采用向上50取整。画布计算如下:

宽=35*0.9/70%=45;
高=35*0.5/70%=25。

采用10像素表示1个坐标单位,因此画布大小是450x250,窗口大小采用画布大小的1.8倍(坐标数不重合)。

Python源程序代码(图片):



Python源程序代码(源码):
见附录1。

绘制出的精美图片:


答:遇险船A点坐标是(-30.311,-17.500) n mile。

用函数轨迹模块(附录2)和海龟画图完成下面练习题:

1、如下图,一艘货轮与灯塔相距40 n mile ,以灯塔为原点、正东和正北分别为x轴和y轴的正向,用海龟画图确定货轮位置坐标(结果保留小数点后2位)。


2、如下图,在一次活动中,位于A处的1班准备前往相距5km的B处与2班会合。以2班B处为原点、正东和正北分别为x轴和y轴的正向,用海龟画图确定1班A处位置坐标(结果保留小数点后4位)。

附录1: #方向和距离确定坐标
import sys 
sys.path.append("/5xstar/pyfiles")  #预制自定义模块(py文件)存放根目录
import turtle as t  #导入海龟画图
t.setup(450*1.8,250*1.8)  #窗口大小,画布放大1.8倍
t.screensize(450,250)  
t.shape("circle")  
t.shapesize(0.25,0.25) #印章时是四分之一大小
from mymath.rcs import * #导入函数轨迹模块
xUnt = (1,10)  #数值与像素数值比例1:10,实际坐标是像素数的十分之一
yUnt = (1,10) 
wc = (-360,-220,90,30) #自定义坐标元组(左下角x坐标, 左下角y坐标, 右上角x坐标, 右上角y坐标)
build(t,xUnt,yUnt,wc) #画平面直角坐标系
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
from decimal import Decimal  #从精确数模块导入精确数类
def indication(name,pos,dx=5,dy=5,algn=None):  #标定位置函数
    '''
    @name 位置名称
    @pos 位置坐标
    @dx 写字位置x增加值
    @dy 写字位置y增加值
    @align 写字方向:center,left,right
    '''
    t.setpos(pos)
    t.stamp()
    t.setpos(pos[0]+dx,pos[1]+dy)
    if algn == None: #Decimal(pos[0]/10).quantize(Decimal('0.000'))表示x坐标除以10转为精确数,然后输出小数点后有3位数字的字符串
        t.write("%s(%s,%s)" % (name,Decimal(pos[0]/10).quantize(Decimal('0.000')), Decimal(pos[1]/10).quantize(Decimal('0.000'))), font=workFont)
    else:
        t.write("%s(%s,%s)" % (name, Decimal(pos[0]/10).quantize(Decimal('0.000')), Decimal(pos[1]/10).quantize(Decimal('0.000'))), align=algn, font=workFont)
        
_dy=-workFont[1]-markFont[1]-5  #标定救生船 B点位置(原点)
indication("B",(0,0),dy=_dy)
t.sety(_dy-workFont[1]-5)
t.write("(救生船)", font=workFont)
t.setpos(0,0)   #标定遇险船 A点的位置
t.down() 
t.setheading(-150) #把方向定为南偏西60度
t.forward(330)     #前进33 n mile
pos=t.pos()       #缓存当前位置
heading=t.heading() #缓存当前方向
t.right(90)          #向右转90度,这样园心在左边,与A点同侧
t.circle(20,60)       #半径20,这一圆心与A点重合,画弧60度
t.up()               
postemp=t.pos()    
t.setx(postemp[0]+5)  
t.write("60", font=workFont) #打印角度值
t.setpos(pos)          #恢复海龟位置
t.setheading(heading)  #恢复海龟方向
t.down()              
t.forward(20)         #前进剩下的2 n mile
pos=t.pos()          
t.up()                
_dy=-workFont[1]-5   #写字的y坐标偏移
indication("A",pos,dy=_dy) #标记A的坐标
_dy-=workFont[1]+5   #第二行字的y坐标偏移
t.sety(pos[1]+_dy)   
t.write("(遇险船)", font=workFont)  
t.setpos(pos)   #画剩下的竖线
t.setheading(90)
t.down()
t.forward(100)
t.ht()  #隐藏画笔
t.mainloop()  #点击文件打开时,保持图片不关闭

粤ICP备11092478号