task 1 and 2
This commit is contained in:
71
III/Ovodas/task2_5.py
Executable file
71
III/Ovodas/task2_5.py
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
from shapely.geometry import LineString, box
|
||||
|
||||
from task2_1 import (
|
||||
loksodroma as cilindr_loksodroma,
|
||||
ortodroma as cilindr_ortodroma,
|
||||
yx as cilindr_yx
|
||||
)
|
||||
from task2_2 import (
|
||||
loksodroma as kugine_loksodroma,
|
||||
ortodroma as kugine_ortodroma
|
||||
)
|
||||
from task2_4 import loksodromos_ilgis, ortodromos_ilgis
|
||||
from consts import M, maxlambda
|
||||
|
||||
# mastelių koeficientų lentelė
|
||||
mLentele = (
|
||||
((10, 16), 0.897),
|
||||
((16, 22), 0.919),
|
||||
((22, 28), 0.952),
|
||||
((28, 34), 1.000),
|
||||
((34, 40), 1.065),
|
||||
((40, 46), 1.152),
|
||||
((46, 52), 1.270),
|
||||
)
|
||||
|
||||
# Kūginė projekcija: loksodroma
|
||||
apsk_kugine_loksodroma = LineString(kugine_loksodroma).length * M / 1000
|
||||
proc_kugine_loksodroma = 100*(loksodromos_ilgis-apsk_kugine_loksodroma)/loksodromos_ilgis
|
||||
# Kūginė projekcija: ortodroma
|
||||
apsk_kugine_ortodroma = LineString(kugine_ortodroma).length * M / 1000
|
||||
proc_kugine_ortodroma = 100*(ortodromos_ilgis-apsk_kugine_ortodroma)/apsk_kugine_ortodroma
|
||||
|
||||
|
||||
# Merkatoriaus projekcija (cilindrinė)
|
||||
def apsk_cilindr(linija):
|
||||
"""Apskaičiuoti duotos linijos ilgį cilindrinėje projekcijoje.
|
||||
|
||||
Liniją padalina į dalis pagal mLentele koordinates, ir
|
||||
sudeda kiekvieno segmento ilgį padauginus iš koeficiento.
|
||||
"""
|
||||
ls = LineString(linija)
|
||||
total = 0
|
||||
for (phifrom, phito), coeff in mLentele:
|
||||
# stačiakampis, apribojantis liniją
|
||||
poly = box(*cilindr_yx(phifrom, 0), *cilindr_yx(phito, maxlambda))
|
||||
# stačiakampio ir linijos sankirta -- gauname tik liniją, kurios ilgį
|
||||
# reikia priskaičiuoti
|
||||
subline = ls.intersection(poly)
|
||||
# pridedame santykinį linijos ilgį prie sumos
|
||||
total += subline.length * coeff
|
||||
return total * M / 1000
|
||||
|
||||
|
||||
matav_cilindr_ortodroma = apsk_cilindr(cilindr_ortodroma)
|
||||
proc_cilindr_ortodroma = 100*(ortodromos_ilgis-matav_cilindr_ortodroma)/ortodromos_ilgis
|
||||
matav_cilindr_loksodroma = apsk_cilindr(cilindr_loksodroma)
|
||||
proc_cilindr_loksodroma = 100*(loksodromos_ilgis-matav_cilindr_loksodroma)/loksodromos_ilgis
|
||||
|
||||
|
||||
tpl = """Sferinės loksodromos ilgis (m): {loksodromos_ilgis:.0f}
|
||||
Sferinės ortodromos ilgis (m): {ortodromos_ilgis:.0f}
|
||||
|
||||
Apskaičiuotas kūginės loksodromos ilgis (m): {apsk_kugine_loksodroma:.0f} paklaida: {proc_kugine_loksodroma:+.2f}%
|
||||
Apskaičiuotas kūginės ortodromos ilgis (m): {apsk_kugine_ortodroma:.0f} paklaida: {proc_kugine_ortodroma:+.2f}%
|
||||
Apskaičiuotas cilindrinės loksodromos ilgis (m): {matav_cilindr_loksodroma:.0f} paklaida: {proc_cilindr_loksodroma:+.2f}%
|
||||
Apskaičiuotas cilindrinės ortodromos ilgis (m): {matav_cilindr_ortodroma:.0f} paklaida: {proc_cilindr_ortodroma:+.2f}%"""
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(tpl.format(**dict(locals())))
|
||||
Reference in New Issue
Block a user