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