|
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() |