diff -r 000000000000 -r bb616224c02a loxodroma.py --- /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()