loxodroma.py
author hh
Mon, 18 May 2020 08:48:51 +0200
changeset 0 bb616224c02a
permissions -rwxr-xr-x
--
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
hh
parents:
diff changeset
     1
#!/usr/bin/python3
hh
parents:
diff changeset
     2
# coding=utf8
hh
parents:
diff changeset
     3
hh
parents:
diff changeset
     4
import sys, math
hh
parents:
diff changeset
     5
from kml import *
hh
parents:
diff changeset
     6
hh
parents:
diff changeset
     7
fn = "loxodroma"
hh
parents:
diff changeset
     8
hh
parents:
diff changeset
     9
long = 0				# výchozí geodetická délka - stupně
hh
parents:
diff changeset
    10
longStep = 5
hh
parents:
diff changeset
    11
maxSteps = 9999
hh
parents:
diff changeset
    12
lat = 87				# výchozí geodetická šířka - stupně
hh
parents:
diff changeset
    13
minPoleDiff = 1			# minimální vzdálenost od pólu - stupně
hh
parents:
diff changeset
    14
R = 6378 * 1000			# zemský poloměr v metrech
hh
parents:
diff changeset
    15
azim = 105
hh
parents:
diff changeset
    16
tilt = 60
hh
parents:
diff changeset
    17
range = 4800 * 1000		# metry
hh
parents:
diff changeset
    18
speed = 1000 * 1000		# m/s		rychlost přesunu pohledu
hh
parents:
diff changeset
    19
durMin = 0.1			# secs		minimální doba kroku
hh
parents:
diff changeset
    20
durMax = 1				# secs		maximální doba kroku
hh
parents:
diff changeset
    21
hh
parents:
diff changeset
    22
def loxClong():
hh
parents:
diff changeset
    23
	azimR = math.radians(azim)
hh
parents:
diff changeset
    24
	latR = math.radians(lat)
hh
parents:
diff changeset
    25
	longStepR = math.radians(longStep)
hh
parents:
diff changeset
    26
	latNR = math.asin(math.tanh(longStepR / math.tan(azimR) + math.atanh(math.sin(latR))))
hh
parents:
diff changeset
    27
	latN = math.degrees(latNR)
hh
parents:
diff changeset
    28
	longN = canonGeodetic(long + longStep)
hh
parents:
diff changeset
    29
	move = R * math.fabs(latNR - latR) / math.cos(azimR)	# délka posunu na povrchu koule v metrech
hh
parents:
diff changeset
    30
	dur = math.fabs(move) / speed		# doba přeletu
hh
parents:
diff changeset
    31
	if(dur < durMin): dur = durMin
hh
parents:
diff changeset
    32
	elif(dur > durMax): dur = durMax
hh
parents:
diff changeset
    33
	return (longN, latN, dur, move)
hh
parents:
diff changeset
    34
hh
parents:
diff changeset
    35
def list():
hh
parents:
diff changeset
    36
	global long, lat
hh
parents:
diff changeset
    37
	k = 0
hh
parents:
diff changeset
    38
	while((90 - math.fabs(lat)) >= minPoleDiff and k < maxSteps):
hh
parents:
diff changeset
    39
		(longN, latN, dur, move) = loxClong()
hh
parents:
diff changeset
    40
		print('{}\t{}\t{}\t{}'.format(k,longN,latN, move))
hh
parents:
diff changeset
    41
		long = longN
hh
parents:
diff changeset
    42
		lat = latN
hh
parents:
diff changeset
    43
		k = k + 1
hh
parents:
diff changeset
    44
hh
parents:
diff changeset
    45
def run():
hh
parents:
diff changeset
    46
	global long, lat
hh
parents:
diff changeset
    47
	k = 0
hh
parents:
diff changeset
    48
hh
parents:
diff changeset
    49
	FlyTo.head(5, False)
hh
parents:
diff changeset
    50
	LookAt.run(long, lat, 0, azim, tilt, range)
hh
parents:
diff changeset
    51
	FlyTo.tail()
hh
parents:
diff changeset
    52
hh
parents:
diff changeset
    53
	while((90 - math.fabs(lat)) >= minPoleDiff and k < maxSteps):
hh
parents:
diff changeset
    54
		(longN, latN, dur, move) = loxClong()
hh
parents:
diff changeset
    55
		FlyTo.head(dur, True)
hh
parents:
diff changeset
    56
		comm('k={}, long={}, lat={}, longN={}, latN={}, move={}'.format(str(k), str(long), str(lat), str(longN), str(latN), str(move)))
hh
parents:
diff changeset
    57
		k = k + 1
hh
parents:
diff changeset
    58
		LookAt.run(longN, latN, 0, azim, tilt, range)
hh
parents:
diff changeset
    59
		FlyTo.tail()
hh
parents:
diff changeset
    60
		long = longN
hh
parents:
diff changeset
    61
		lat = latN
hh
parents:
diff changeset
    62
hh
parents:
diff changeset
    63
# list()
hh
parents:
diff changeset
    64
tourProlog(fn)
hh
parents:
diff changeset
    65
run()
hh
parents:
diff changeset
    66
tourEpilog()