--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/loxodroma.py Mon May 18 08:48:51 2020 +0200
@@ -0,0 +1,66 @@
+#!/usr/bin/python3
+# coding=utf8
+
+import sys, math
+from kml import *
+
+fn = "loxodroma"
+
+long = 0 # výchozí geodetická délka - stupně
+longStep = 5
+maxSteps = 9999
+lat = 87 # výchozí geodetická šířka - stupně
+minPoleDiff = 1 # minimální vzdálenost od pólu - stupně
+R = 6378 * 1000 # zemský poloměr v metrech
+azim = 105
+tilt = 60
+range = 4800 * 1000 # metry
+speed = 1000 * 1000 # m/s rychlost přesunu pohledu
+durMin = 0.1 # secs minimální doba kroku
+durMax = 1 # secs maximální doba kroku
+
+def loxClong():
+ azimR = math.radians(azim)
+ latR = math.radians(lat)
+ longStepR = math.radians(longStep)
+ latNR = math.asin(math.tanh(longStepR / math.tan(azimR) + math.atanh(math.sin(latR))))
+ latN = math.degrees(latNR)
+ longN = canonGeodetic(long + longStep)
+ move = R * math.fabs(latNR - latR) / math.cos(azimR) # délka posunu na povrchu koule v metrech
+ dur = math.fabs(move) / speed # doba přeletu
+ if(dur < durMin): dur = durMin
+ elif(dur > durMax): dur = durMax
+ return (longN, latN, dur, move)
+
+def list():
+ global long, lat
+ k = 0
+ while((90 - math.fabs(lat)) >= minPoleDiff and k < maxSteps):
+ (longN, latN, dur, move) = loxClong()
+ print('{}\t{}\t{}\t{}'.format(k,longN,latN, move))
+ long = longN
+ lat = latN
+ k = k + 1
+
+def run():
+ global long, lat
+ k = 0
+
+ FlyTo.head(5, False)
+ LookAt.run(long, lat, 0, azim, tilt, range)
+ FlyTo.tail()
+
+ while((90 - math.fabs(lat)) >= minPoleDiff and k < maxSteps):
+ (longN, latN, dur, move) = loxClong()
+ FlyTo.head(dur, True)
+ comm('k={}, long={}, lat={}, longN={}, latN={}, move={}'.format(str(k), str(long), str(lat), str(longN), str(latN), str(move)))
+ k = k + 1
+ LookAt.run(longN, latN, 0, azim, tilt, range)
+ FlyTo.tail()
+ long = longN
+ lat = latN
+
+# list()
+tourProlog(fn)
+run()
+tourEpilog()