强基初中数学&学Python——第五十五课 坐标应用之六:用经纬度表示地理位置

    “强基初中数学&学Python班”正在招六、七、八年级学生,有意者请关注后私信报名!
    更多课程,请复制本公众号网址http://www.5xstar.com在浏览器中打开。

    在第五十课,我们用直角坐标表示小范围的地理位置,但要表示整个地球表面的地理位置,就束手无策了。因为地球表面近视为球面,但直角坐标系只适用于平面。

    我们知道,半圆弧绕它的直径转一周是一个球面,因此要标定这个球面的位置,得回到那个半圆弧中。请看下图(作图代码附录1):

由图可知,纬度实际就是弧上点的半径与赤道半径的圆心角。

    由上面的论述,可知经度就是旋转的旋转角。除了南北极,每一个纬度圆的经度位置都相同的,但为了有一个数值,就规定英国格林威治天文台的那一点为经度0°,向东(与地球自转方向相反)为东经,最大180°,为东半球;向西(与地球自转方向相同)为西经,最大180°,为西半球。东经0°和西经0°是同一条经线;东经180°和西经180°也是同一条经线,理论上这条经线就是国际日期变更线。看下图(作图代码附录2):

练习题:

    1、0°和180°经线构成一个圆,东经90°和西经90°也构成一个圆,问东经60°和西经多少度构成一个圆?

    2、两点的圆弧连线长度比较如下图(作图代码附录3):

可见大圆弧的连线较短。北京大约在东经116°北纬40°,西班牙马德里大约在西经4°和北纬40°,请问北京飞马德里的航班是怎样飞才能使路程最短?请选择:
A、一直向正西方向飞。
B、一直向正东方向飞。
C、先向正北方向飞到北极后,沿着西经4°经线向正南方向飞。
D、先向正南方向飞到南极后,沿着西经4°经线向正北方向飞。
E、先向西北方向飞,然后过渡到向西南方向飞。
F、先向西南方向飞,然后过渡到向西北方向飞。
请说明你的理由。

附录1:

#纬度的实质
import turtle as t  #导入海龟画图
t.setup(550,550)
t.screensize(500,500)  
t.title("纬度的实质")
t.up()
t.shape("classic")
t.setpos(-250,0)
for i in range(-250,250,10):
    if i % 20 == 0:
        t.down()
    else:
        t.up()
    t.setx(i)
t.seth(0)
t.stamp()
t.up()
t.setpos(0,-250)
for i in range(-250,250,10):
    if i % 20 == 0:
        t.down()
    else:
        t.up()
    t.sety(i)
t.seth(90)
t.stamp()
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,dx=2,dy=2,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()

#画半圆弧
r = 6*20  #半径
t.pencolor("red")
t.setpos(0,-r)
t.dot(5)
indication("南极(南纬90°)",t.pos(),dy=-30,align="center")  #打名称坐标
t.down()
t.seth(0)
t.circle(r, 45)
pos1=t.pos()
t.dot(5)
indication("南纬45°",pos1,dy=-30)
t.circle(r, 45)
t.pencolor("black")
t.dot(5)
indication("赤道(纬度0°)",t.pos(),dx=5)
t.pencolor("blue")
t.circle(r, 45)
pos2=t.pos()
t.dot(5)
indication("北纬45°",pos2)
t.circle(r, 45)
t.dot(5)
indication("北极(北纬90°)",t.pos(),align="center")
t.up()
for ax in range(0,90,10):
    if ax % 20 == 0:
        t.down()
    else:
        t.up()
    t.circle(r, 10)
t.pencolor("red")
for ax in range(0,90,10):
    if ax % 20 == 0:
        t.down()
    else:
        t.up()
    t.circle(r, 10)

t.up()
t.pencolor("black")
t.setpos(0,0)
t.dot(5)

t.pencolor("blue")  #画纬度倾角
t.seth(45)
for rx in range(0, r, 10):
    if rx % 20 == 0:
        t.down()
    else:
        t.up()
    t.forward(10)

t.up()
t.setpos(20,0)
t.seth(90)
t.down()
t.circle(20,45)
indication("45°",t.pos(),dx=10,dy=-10)
t.up()
t.setpos(-r,0)
indication("北半球",t.pos(),dx=-5,align="right")
t.up()

t.pencolor("red")
t.setpos(0,0)
t.seth(-45)
for rx in range(0,r,10):
    if rx % 20 == 0:
        t.down()
    else:
        t.up()
    t.forward(10)

t.up()
t.setpos(20,0)
t.seth(-90)
t.down()
t.circle(-20,45)
indication("45°",t.pos(),dx=10,dy=-10)
t.up()
t.setpos(-r,0)
indication("南半球",t.pos(),dx=-5,dy=-25,align="right")
t.up()

t.ht()
t.mainloop()

附录2:

#经度的实质:人为划分
import turtle as t  #导入海龟画图
t.setup(600,600)
t.screensize(560,560)  
t.title("经度的实质:人为划分")
t.up()
t.shape("classic")
t.setpos(-280,0)
for i in range(-280,280,10):
    if i % 20 == 0:
        t.down()
    else:
        t.up()
    t.setx(i)
t.seth(0)
t.stamp()
t.up()
t.setpos(0,-280)
for i in range(-280,280,10):
    if i % 20 == 0:
        t.down()
    else:
        t.up()
    t.sety(i)
t.seth(90)
t.stamp()
t.up()
workFont=("宋体", 12, "bold") #标位置字体:12号,宋体,黑体
#标定位置
def indication(name,pos,dx=2,dy=2,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()

#画东经
r = 6*20  #半径
t.setpos(-r,0)
t.dot(5)
indication("格林威治(东西经0°)",t.pos(),dx=-5,align="right")  #打名称坐标
t.pencolor("red")
t.fillcolor("red")
t.down()
t.seth(-90)
t.circle(r, 135)
pos1=t.pos()
t.dot(5)
indication("东经135°",pos1,dx=5,dy=-10)
t.circle(r, 45)
t.stamp()
t.pencolor("black")
t.dot(5)
indication("变更线(东西经180°)",t.pos(),dx=5)

#画西经
t.pencolor("blue")
t.fillcolor("blue")
t.seth(-90)
t.stamp()
t.seth(90)
t.circle(r, 45)
pos2=t.pos()
t.dot(5)
indication("西经135°",pos2)
t.circle(r, 135)

t.up()
t.pencolor("black")
t.setpos(0,0)
t.dot(5)

t.pencolor("blue")  #画西经旋转角
t.seth(45)
for rx in range(0, r, 10):
    if rx % 20 == 0:
        t.down()
    else:
        t.up()
    t.forward(10)

t.up()
t.setpos(-20,0)
t.seth(90)
t.down()
t.circle(-20,135)
indication("135°",t.pos(),dx=-12,align="right")
t.up()
t.setpos(0,r)
indication("西半球",t.pos(),dx=0,dy=5,align="center")
t.up()

t.pencolor("red")  #画东经旋转角
t.setpos(0,0)
t.seth(-45)
for rx in range(0,r,10):
    if rx % 20 == 0:
        t.down()
    else:
        t.up()
    t.forward(10)

t.up()
t.setpos(-20,0)
t.seth(-90)
t.down()
t.circle(20,135)
indication("135°",t.pos(),dx=-12,dy=-25,align="right")
t.up()
t.setpos(0,-r)
indication("东半球",t.pos(),dx=0,dy=-25,align="center")
t.up()

t.ht()
t.mainloop()

附录3:

#两点的圆弧连线长度比较
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=2,dy=2,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("red")
t.fillcolor("red")
R = 7*20  #半径
t.setpos(0,0)
t.dot(5)
indication("大圆心",t.pos(),dx=0,dy=-25,align="center")  #打名称坐标
t.down()
t.seth(30)
for rx in range(0, R, 10):
    if rx % 20 == 0:
        t.down()
    else:
        t.up()
    t.forward(10)
t.dot(5)
pos=t.pos()
indication("A",pos)
t.left(90)
t.circle(R, 120)
t.dot(5)
indication("B",t.pos(),dx=-5,align="right")
t.up()
t.setpos(0,0)
t.down()
t.seth(150)
for rx in range(0, R, 10):
    if rx % 20 == 0:
        t.down()
    else:
        t.up()
    t.forward(10)
t.left(90)
for rx in range(0, 240, 10):
    if rx % 20 == 0:
        t.down()
    else:
        t.up()
    t.circle(R, 10)
t.up()

#画小圆弧
d=R*3**0.5 #小圆直径
t.pencolor("blue")
t.fillcolor("blue")
t.setpos(pos)
t.down()
t.seth(180)
for rx in range(0, 2*R, 10):
    if rx >= d-11:
        break
    if rx % 20 == 0:
        t.down()
    else:
        t.up()
    t.forward(10)
t.up()
t.setx(0)
t.dot(5)
indication("小圆心",t.pos(),dx=0,dy=-25,align="center")
t.up()
t.setpos(pos)
t.down()
t.seth(90)
t.circle(d/2, 180)
t.ht()
t.mainloop()

粤ICP备11092478号