move first semester to first semester

This commit is contained in:
Motiejus Jakštys
2020-04-08 22:49:30 +03:00
parent db18a17f66
commit b97b04e9bb
93 changed files with 0 additions and 0 deletions

2
I/Karto/assignment4/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
teodolitinio_ejimo_resultatai.txt
KTZ004_2019_04_ats.txt

View File

@@ -0,0 +1,200 @@
Uzduotis Nr.
*******
Braize (Pavarde_Vardas):
*******_*******
=== Apskaiciuotos posukio tasku koordinates (LKS94 koord.sist. 0.00 tikslumu)===
Tasko Nr.11 koordinates
X = *******
Y = *******
Tasko Nr.2 koordinates
X = *******
Y = *******
Tasko Nr.19 koordinates
X = *******
Y = *******
Tasko Nr.3 koordinates
X = *******
Y = *******
Tasko Nr.24 koordinates
X = *******
Y = *******
Tasko Nr.12 koordinates
X = *******
Y = *******
Tasko Nr.13 koordinates
X = *******
Y = *******
Tasko Nr.14 koordinates
X = *******
Y = *******
Tasko Nr.15 koordinates
X = *******
Y = *******
Tasko Nr.16 koordinates
X = *******
Y = *******
Tasko Nr.17 koordinates
X = *******
Y = *******
Tasko Nr.10 koordinates
X = *******
Y = *******
Tasko Nr.18 koordinates
X = *******
Y = *******
Tasko Nr.9 koordinates
X = *******
Y = *******
Tasko Nr.8 koordinates
X = *******
Y = *******
Tasko Nr.23 koordinates
X = *******
Y = *******
Tasko Nr.22 koordinates
X = *******
Y = *******
Tasko Nr.7 koordinates
X = *******
Y = *******
Tasko Nr.6 koordinates
X = *******
Y = *******
Tasko Nr.21 koordinates
X = *******
Y = *******
Tasko Nr.5 koordinates
X = *******
Y = *******
Tasko Nr.20 koordinates
X = *******
Y = *******
Tasko Nr.1 koordinates
X = *******
Y = *******
Tasko Nr.4 koordinates
X = *******
Y = *******
=== Apskaiciuoti liniju stiliu kurimo parametrai (0.001 tikslumu) ===
=== Kelias A-03 ===
Plotis L1 (duotas)
*******
Visas kelio A-03 plotis
*******
Koeficientas L1 plocio atidejimui (+/-0.001)
*******
=== Kelias A-05 ===
Plotis L2 (duotas)
*******
Plotis L3 (duotas)
*******
Visas kelio A-05 plotis
*******
Koeficientas L2 plocio atidejimui (+/-0.001)
*******
Koeficientas L3 plocio atidejimui (+/-0.001)
*******
=== Kelias A-08 ===
Plotis L4 (duotas)
*******
Plotis L5 (duotas)
*******
Plotis L6 (duotas)
*******
Plotis L7 (duotas)
*******
Plotis L8 (duotas)
*******
Plotis L9 (duotas)
*******
Visas kelio A-08 plotis
*******
Koeficientas L4 plocio atidejimui (+/-0.001)
*******
Koeficientas L5 plocio atidejimui (+/-0.001)
*******
Koeficientas L6 plocio atidejimui (+/-0.001)
*******
Koeficientas L7 plocio atidejimui (+/-0.001)
*******
Koeficientas L8 plocio atidejimui (+/-0.001)
*******
Koeficientas L9 plocio atidejimui (+/-0.001)
*******
=== Griovys G-11 ===
Plotis L10 (duotas)
*******
Plotis L11 (duotas)
*******
Plotis L12 (duotas)
*******
Plotis L13 (duotas)
*******
Visas griovio G-11 plotis
*******
Koeficientas L10 plocio atidejimui (+/-0.001)
*******
Koeficientas L11 plocio atidejimui (+/-0.001)
*******
Koeficientas L12 plocio atidejimui (+/-0.001)
*******
Koeficientas L13 plocio atidejimui (+/-0.001)
*******
=== Apskaiciuoti keliu ir grioviu plociai BRAIZYMUI (0.001 tikslumu) ===
Kelio A-03 plotis
*******
Kelio A-05 plotis
*******
Kelio A-08 plotis
*******
Griovio G-11 plotis
*******
=== Apskaiciuota daugiakampio krastine D1 (0.001 tikslumu) ===
*******
=== Apskaiciuotas daugiakampio pasuk.kampas K1 (0.0001 laipsnio tikslumu) ===
*******
=== Apskaiciuotas atstumas iki uzliejimo zonos A1 (0.001 tikslumu) ===
*******
=============== Ismatuota brezinyje ================
=== Keliu ir grioviu asiu ilgiai (0.001 m tikslumu) ===
== Kelias A-03 ==
Asies 11-12-13-14-15-16-17-18 ilgis
*******
==Kelias A-05 ==
Asies 4-5-6-7-8-9-10 ilgis
*******
== Kelias A-08 ==
Asies 1-2-3 ilgis
*******
== Griovys G-11 ==
Asies 19-20-21-22-23-24 ilgis
*******
Visas keliu/Grioviu tinklo ilgis (pagal asis)
*******
=== Uzlietu zemenaudmenu plotai (0.001 m2 tikslumu) ===
Miskas
*******
Ariama
*******
Sodas
*******
Pieva
*******
Ganykla
*******
Krumai
*******
Kelias A-03
*******
Kelias A-05
*******
Kelias A-08
*******
Griovys G-11
*******
Visas prognozuojamo uzliejimo plotas (0.001 m2 tikslumu)
*******
Visas uzlietas plotas (0.001 m2 tikslumu)
*******
Plotas kuris liko neuzlietas (0.001 m2 tikslumu)
*******

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,137 @@
#!/usr/bin/env python3
from measure import *
print("""Uzduotis Nr.
KTZ004_2019_04
Braize (Pavarde_Vardas):
Motiejus_Jakstys
=== Apskaiciuotos posukio tasku koordinates (LKS94 koord.sist. 0.00 tikslumu)===""")
for v in vertices:
print("Tasko Nr.%d koordinates" % v.point)
print("X = %.2f" % v.coords.lksx)
print("Y = %.2f" % v.coords.lksy)
print("""=== Apskaiciuoti liniju stiliu kurimo parametrai (0.001 tikslumu) ===
=== Kelias A-03 ===
Plotis L1 (duotas)
%.3f""" % L1 + """
Visas kelio A-03 plotis
%.3f""" % L1 + """
Koeficientas L1 plocio atidejimui (+/-0.001)
+1.0
=== Kelias A-05 ===
Plotis L2 (duotas)
%.3f""" % L2 + """
Plotis L3 (duotas)
%.3f""" % L3 + """
Visas kelio A-05 plotis
%.3f""" % A05_plotis + """
Koeficientas L2 plocio atidejimui (+/-0.001)
%+.3f""" % (-L2/(L2+L3)) + """
Koeficientas L3 plocio atidejimui (+/-0.001)
%+.3f""" % (L3/(L2+L3)) + """
=== Kelias A-08 ===
Plotis L4 (duotas)
%.3f""" % L3 + """
Plotis L5 (duotas)
%.3f""" % L5 + """
Plotis L6 (duotas)
%.3f""" % L6 + """
Plotis L7 (duotas)
%.3f""" % L7 + """
Plotis L8 (duotas)
%.3f""" % L8 + """
Plotis L9 (duotas)
%.3f""" % L9 + """
Visas kelio A-08 plotis
%.3f""" % A08_plotis + """
Koeficientas L4 plocio atidejimui (+/-0.001)
%+.3f""" % (-L4/(L4+L5+L6+L7+L8+L9)) + """
Koeficientas L5 plocio atidejimui (+/-0.001)
%+.3f""" % (-L5/(L4+L5+L6+L7+L8+L9)) + """
Koeficientas L6 plocio atidejimui (+/-0.001)
%+.3f""" % (-L6/(L4+L5+L6+L7+L8+L9)) + """
Koeficientas L7 plocio atidejimui (+/-0.001)
%+.3f""" % (L7/(L4+L5+L6+L7+L8+L9)) + """
Koeficientas L8 plocio atidejimui (+/-0.001)
%+.3f""" % (L8/(L4+L5+L6+L7+L8+L9)) + """
Koeficientas L9 plocio atidejimui (+/-0.001)
%+.3f""" % (L9/(L4+L5+L6+L7+L8+L9)) + """
=== Griovys G-11 ===
Plotis L10 (duotas)
%.3f""" % L10 + """
Plotis L11 (duotas)
%.3f""" % L11 + """
Plotis L12 (duotas)
%.3f""" % L12 + """
Plotis L13 (duotas)
%.3f""" % L13 + """
Visas griovio G-11 plotis
%.3f""" % G11_plotis + """
Koeficientas L10 plocio atidejimui (+/-0.001)
%+.3f""" % (-L10/(L10+L11+L12+L13)) + """
Koeficientas L11 plocio atidejimui (+/-0.001)
%+.3f""" % (-L11/(L10+L11+L12+L13)) + """
Koeficientas L12 plocio atidejimui (+/-0.001)
%+.3f""" % (L12/(L10+L11+L12+L13)) + """
Koeficientas L13 plocio atidejimui (+/-0.001)
%+.3f""" % (L13/(L10+L11+L12+L13)) + """
=== Apskaiciuoti keliu ir grioviu plociai BRAIZYMUI (0.001 tikslumu) ===
Kelio A-03 plotis
%.3f""" % A03_plotis + """
Kelio A-05 plotis
%.3f""" % A05_plotis + """
Kelio A-08 plotis
%.3f""" % A08_plotis + """
Griovio G-11 plotis
%.3f""" % G11_plotis + """
=== Apskaiciuota daugiakampio krastine D1 (0.001 tikslumu) ===
%.3f""" % D1 + """
=== Apskaiciuotas daugiakampio pasuk.kampas K1 (0.0001 laipsnio tikslumu) ===
%.4f""" % K1 + """
=== Apskaiciuotas atstumas iki uzliejimo zonos A1 (0.001 tikslumu) ===
%.3f""" % A1 + """
=============== Ismatuota brezinyje ================
=== Keliu ir grioviu asiu ilgiai (0.001 m tikslumu) ===
== Kelias A-03 ==
Asies 11-12-13-14-15-16-17-18 ilgis
%.3f""" % keliu_ilgiai['A-03'] + """
==Kelias A-05 ==
Asies 4-5-6-7-8-9-10 ilgis
%.3f""" % keliu_ilgiai['A-05'] + """
== Kelias A-08 ==
Asies 1-2-3 ilgis
%.3f""" % keliu_ilgiai['A-08'] + """
== Griovys G-11 ==
Asies 19-20-21-22-23-24 ilgis
%.3f""" % keliu_ilgiai['G-11'] + """
Visas keliu/Grioviu tinklo ilgis (pagal asis)
%.3f""" % sum(keliu_ilgiai.values()) + """
=== Uzlietu zemenaudmenu plotai (0.001 m2 tikslumu) ===
Miskas
24413.152
Ariama
2797.416
Sodas
3224.118
Pieva
0.000
Ganykla
1653.369
Krumai
1998.581
Kelias A-03
5271.599
Kelias A-05
3019.468
Kelias A-08
0.000
Griovys G-11
3738.362
Visas prognozuojamo uzliejimo plotas (0.001 m2 tikslumu)
%.3f""" % heptagon_area + """
Visas uzlietas plotas (0.001 m2 tikslumu)
%.3f""" % circle_area + """
Plotas kuris liko neuzlietas (0.001 m2 tikslumu)
%.3f""" % (heptagon_area - circle_area))

Binary file not shown.

View File

@@ -0,0 +1,162 @@
Uzduoti parenge A.Bautrenas (Topografiniai zemelapiai)
2019.11.13 13:19:39(47979.51s) RND=2
Uzduotis Nr. KTZ004_2019_04
Jakstys_Motiejus (1915375)
=== Uzliejamu plotu analize == (NAV_SK=0.21 NAV_BR=0.25) ===
Atlikti iki: 2019.11.30 13:19:38
1. Pagal duotus duomenis apskaiciuoti keliu ir grioviu tinklo atraminiu tasku koordinates (ziur. 04uzd_schema.pdf).
Pastaba. Koordinates skaiciuojamos LKS94 koord. sistemoje, todel klojant taskus brezinyje BUTINA sukeiti koord.asis (skaiciuoti X,Y ivesti Y,X).
2. Susikurti braizymui reikalingus liniju (Multiline) stilius (Keliai = A-03,A-05,A-08, Griovys = G-11) (ziur. 04uzd_schema.pdf).
Pastaba. Sie objektai yra skirtingu kategoriju (Kat.),t.y kuo aukstesne kategorija tuo objektas svarbesnis. (1 Kat.(auksciausia)= A-08, 2 Kat.= A-05, 3 Kat.= A-03, 4 Kat.(zemiausia)= G-11)
3. Nubraizyti keliu ir grioviu tinkla pagal apskaiciuotas koordinates ir surasyti zemenaudas.
4. Nubraizyti prognozuojamos uzliejimo zonos riba (taisyklingas daugiakampis)
5. Apskaiciuoti faktinio uzliejimo teritorijos dydi (riba) ir ja nubraizyti (apskritimas)
6. Apskaiciuoti koordinaciu tinklo pradzia nuo tasko Nr.5 , nubraizyti koordinaciu tinkla ir surasyti koordinates M1:1000, t.y. kas 100 metru.
Pastaba. Koordinaciu sistema LKS94.
7. Ismatuoti uzlietu zemenaudu, keliu ir grioviu plotus
8. Surasyti gautus rezultatus i atsakymu sablona ir brezini
===== DUOMENYS BRAIZYMUI ====
---- I. Pataisos: ------
A= 6.094 B= -2.923 C= -13.462 N= 9.512
---- II. Teodolitinio ejimo duomenys: ------
Pradinio tasko koordinates
X11 = 6091968.055
Y11 = 485944.146
Pradinis direkcinis kampas
A11-2 = 70-16-17
Vidiniai (desininiai) poligono kampai (L-M-S):
11 = 103-03-03
2 = 218-27-42
19 = 211-44-30
3 = 67-26-49
24 = 67-33-06
12 = 279-03-59
13 = 278-54-55
14 = 119-27-45
15 = 160-50-28
16 = 207-42-31
17 = 206-18-01
10 = 90-55-10
18 = 100-18-10
9 = 148-30-56
8 = 285-20-57
23 = 29-44-22
22 = 276-33-49
7 = 82-07-47
6 = 104-15-46
21 = 234-17-37
5 = 283-30-57
20 = 152-15-58
1 = 101-20-01
4 = 150-15-41
Atkarpu ilgiai (m):
11-2 = 164.126
2-19 = 149.851
19-3 = 82.384
3-24 = 259.022
24-12 = 319.331
12-13 = 74.764
13-14 = 81.640
14-15 = 31.888
15-16 = 84.073
16-17 = 70.072
17-10 = 73.378
10-18 = 66.625
18-9 = 97.003
9-8 = 121.003
8-23 = 131.915
23-22 = 102.086
22-7 = 158.324
7-6 = 72.157
6-21 = 107.938
21-5 = 104.082
5-20 = 154.332
20-1 = 68.972
1-4 = 151.531
4-11 = 179.336
---- III. Duomenys TIK liniju stiliu SUKURIMUI (metrais): ------
1 pastaba. ATKREIPTI DEMESI, kad duomenys liniju stiliaus kurimui ir braizymui yra skirtingi, t.y. linijos braizomos ivedant kitus apskaiciuotus keliu ir grioviu plocius (ziur. IV punktas).
2 pastaba. Keliai ir Grioviai braizomi asiu numeracijos didejimo kryptimi, todel teigiami (+) juostu koeficientai bus i kaire nuo asies, o neigiami (-) - i desine.
=== Kelias A-03 ===
L1 = 16.321
=== Kelias A-05 ===
L2 = 9.109
L3 = 4.819
=== Kelias A-08 ===
L4 = 2.675
L5 = 2.059
L6 = 1.262
L7 = 4.170
L8 = 6.005
L9 = 6.453
=== Griovys G-11 ===
L10 = 4.882
L11 = 3.305
L12 = 2.210
L13 = 4.381
---- IV. Duomenys keliu ir grioviu tinklo BRAIZYMUI -----
PASTABA: Keliai ir grioviai braizomi pagal SIUOS PLOCIUS, o ne pagal tuos plocius, kurie buvo duoti MLine stiliu sukurimui!!!
Kelio A-03 plotis = 17.401 + A =
Kelio A-05 plotis = 13.705 + B =
Kelio A-08 plotis = 29.006 + C =
Griovio G-11 plotis = 14.776 + N =
----- IV. Duomenys uzliejamu zonu braizymui -----
Prognozuojamo uzliejimo zona, tai taisyklingas 9-kampis
9-kampio krastine D1= 174.667 + C =
Daugiakampio pradzia: Kelio A-05 asies taskas Nr. 6
Daugiakampio pasukimo kampas (K1) (0.0001 laipsnio tikslumu)
K1= 13.147 + B =
Tikroji uzliejimo zona, tai taisyklingas apskritimas, kurio centras TURI SUTAPTI su daugiakampio centru.
Atstumas iki tikrosios uzliejimo zonos (A1) (0.001 tikslumu)
A1 = 67.536 + B =
Pastabos:
1. Braizymui reikalingos schemos pateiktos rinkmenoje [04uzd_schema.pdf], o koordinaciu skaiciavimus surasyti rinkmenoje [Teodolitinio ejimo skaiciavimo blankas.doc] ir atsiusti kartu su breziniu ir atsakymu rinkmena.
2. Kelio/griovio asis - tai linija kurios tasku koordinates apskaiciuojamos.
3. Braizant butina kontroliuoti apskaiciuotu juostu plociu (L) atidejimo krypti (skaityti pastabas III dalyje).
4. Visi matmenys duoti metrais.
5. Kadangi zemenaudu uzrasu dydis keiciamas laisvai, todel visi zemenaudu pavadinimai turi buti surasyti (kad ir labai smulkiu sriftu). Tas pats zemenaudos pavadinimas (jei uzliejimo riba kerta naudmena) rasomas uzlietoje ir neuzlietoje zonose (pavyzdyje [04uzd_schema.pdf] klaida, t.y. gali buti nesurasyta).
6. Plotus, tsk.koordinates ir linijinius dydzius apskaiciuoti bei ismatuoti 0.001 tikslumu, o kampus apskaiciuoti ir atideti brezinyje 0.0001 laipsnio tikslumu.
7. Reikalavimai uzduoties atlikimui (rinkmenu pavadinimams, atsakymu sablono pildymui, atlikimo terminui,skaitmenu desimtaines dalies atskyrimui, sluoksniu pavadinimams, kood.tinklo spalvai, tasku pazymejimui ir t.t.)tokie patys kaip ir ankstesneje uzduotyje.
8. Zenklas '+/-' rodo, kad apskaiciuotas koeficientas butinai turi buti irasytas su skaiciaus zenklas, pvz. +0.258 arba -0.258. Zenklo '+' neirasymas (ten kur nurodyta) bus vertinamas kaip skaiciavimo klaida.
9. Keliu/grioviu sankryzos turi atitikti keliu kategorijas, t.y. zemesnes kategorijos kelias negali kirsti aukstesnes kategorijos objekto (04uzd_schema.pdf sankryzos gali buti pavaizduotos neteisingai)
10. Plotas, kuris susidaro kertantis dviem objektam (pvz. kelias su grioviu) priskiriamas AUKSTESNES kategorijos objektui.
11. Visos brezinio dalys (keliai, uzrasai ir t.t.) braizomos skirtingomis (laisvai pasirinktomis) spalvomis ir skirtinguose sluoksniuose.
12. Kelius/griovius sudarancios krastines braizomos tuo linijos tipu, kuris nurodytas schemoje Nr.3. Krastiniu spalvos parenkamos laisvai, o punktyro dydis (Linetype scale) parenkamas taip, kad punktyras butu gerai matomas brezinyje, t.y. nei per didelis, nei per mazas.
13. Skirtingos uzlietos zemenaudos (apskritime) (ariama,miskas ir t.t.) uzbruksniuojamos skirtingai (laisvai parinktu strichu ir atskiruose sluoksniuose), ziur. [04uzd_schema.pdf].
14. Neuzlietoje teritorijoje (teritorija tarp daugiakampio ir apskritimo) visos naudmenos bruksniuojamos vienodai.
15. Brezinyje butini sutartiniai naudmenu pazymejimai su apskaiciuotais plotais.
16. Brezini apibrezti remeliu, uzpildyti (realiais duomenimis) brezinio legenda (stampa) ir pasirasyti.
17. Brezinio remelio dydi parinkti taip, kad tilptu visas brezinys, o remelio matmenys butu standartiniai, t.y. A4, A3, A2, A1 arba A0 formato (pav.[04uzd_schema.pdf] remelio nera).
18. Jei nubraizius, pagal apskaiciuotus duomenis, keliu galai nekerta uzliejimo ribu, tai kelius reikia pratesti iki susikirtimo su riba.
19. Jei kokia nors naudmena arba kelias/griovys nepakliuva i uzliejimo zona - atsakymuose irasome 'nuli'.
20. Griovio galai uzapvalinami
Pabaiga: 2019.11.13 13:19:39
Ispejimas:
Jei si uzduotis skirta ne Jums, prasome ja perduoti adresatui arba grazinti siuntejui
ir istrinti is savo duomenu bazes.

View File

@@ -0,0 +1,8 @@
.PHONY: all
all: KTZ004_2019_04_ats.txt teodolitinio_ejimo_resultatai.txt
KTZ004_2019_04_ats.txt: KTZ004_2019_04_ats.py measure.py
./$< > $@
teodolitinio_ejimo_resultatai.txt: measure.py
./$< | column -t -s $$'\t' > $@

View File

@@ -0,0 +1,44 @@
4 užduotis
==========
Ši užduotis buvo brėžta dviem būdais:
- autocad.
- matplotlib.
Autocad sprendime kelių linijos persidengiančios, ne visos, ir keliai yra
"bepločiai", nes neturėjau tinkamo AutoCAD.
Matplotlib sprendime kelių linijos padarytos teisingai, keliai teisingai
susloksniuoti, tačiau brėžinys nėra pilnas.
Kaip pasileisti matplotlib sprendimą?
-------------------------------------
Jis interaktyvus. Reikia [Python][1], [Matplotlib][2], [Shapely][3], [Descartes][4]:
```
$ python ./draw.py
```
Peržiūra:
![matplotlib schema][schema2]
Sugeneruoti atsakymus
---------------------
`KTZ004_2019_04_ats.txt` ir `teodolitinio_ejimo_resultatai.txt` yra sugeneruoti
priklausomai nuo pradinių duomenų (duomenys `measure.py`). Kad sugeneruotumėte
šiuos failus, reikia [Python][1], [Shapely][2] ir [Make][5] (Make
neprivalomas, patikrinkite `Makefile`):
```
$ make
```
[1]: https://python.org/
[2]: https://matplotlib.org/3.1.1/users/installing.html
[3]: https://pypi.org/project/Shapely/
[4]: https://pypi.org/project/descartes/
[5]: https://www.gnu.org/software/make/
[schema2]: https://raw.githubusercontent.com/motiejus/stud/master/Karto/assignment4/schema2.png

87
I/Karto/assignment4/draw.py Executable file
View File

@@ -0,0 +1,87 @@
#!/usr/bin/env python3
from math import atan, pi
import numpy as np
import matplotlib.pyplot as plt
from collections import namedtuple
from shapely.geometry import LineString, asPolygon, Point as sPoint, asLineString
from descartes import PolygonPatch
from measure import *
# nubraižytos kelio linijos ir jų nubrėžti offset'ai iš dešinės į kairę.
kelias_l = namedtuple('kelias_l', ['line', 'offsets'])
N, E, S, W = (0,10), (10,0), (0,-10), (-10,0)
point_annotations = {
1: S, 2: E, 3: N, 4: W,
5: N, 6: S, 7: S, 8: N,
9: E, 10: N, 11: S, 12: N,
13: S, 14: W, 15: N, 16: N,
17: N, 18: E, 19: N, 20: S,
21: N, 22: S, 23: E, 24: N,
}
road_annotations = {'A-08':W, 'A-05':N, 'A-03':N, 'G-11':E}
# implementacija
fig, ax = plt.subplots()
ax.set_aspect('equal')
plt.grid(True)
# taškų anotacijos
for v in vertices:
ax.annotate(v.point, xy=v.xy, zorder=KAT0, textcoords='offset points',
fontsize='small', xytext=point_annotations[v.point])
keliai_l = {}
# kelių piešimas
for id, kelias in keliai.items():
# ašis
kelias_line = LineString([Points[i].xy for i in kelias.virsunes])
ax.plot(*kelias_line.xy, linewidth=2, dashes=kelias.dashes, color=kelias.spalva, zorder=kelias.kat)
# offset'ai
offset_multiplier = kelias.plotis/(kelias.juostos[0].plotis + kelias.juostos[-1].plotis)
offset_lines = []
for offset in kelias.juostos:
l = kelias_line.parallel_offset(offset.plotis*offset_multiplier, offset.kryptis, join_style=2)
offset_lines.append(l)
ax.plot(*l.xy, linewidth=.5, dashes=offset.dashes, color=offset.spalva, zorder=kelias.kat)
# kelio poligonas su plotu
kelias_poly = np.vstack((offset_lines[0].coords, offset_lines[-1].coords))
ax.add_patch(PolygonPatch(asPolygon(kelias_poly), fc='white', zorder=kelias.kat, linewidth=0))
keliai_l[id] = kelias_l(line=kelias_line, offsets=offset_lines)
# kelių anotacijos
for id, kelias in keliai_l.items():
linestart, lineend = np.array(kelias.offsets[-1].coords)[0:2]
delta = lineend - linestart
angle = atan(delta[1]/delta[0])*180/pi
offset = road_annotations[id]
ax.annotate(id, kelias.offsets[-1].coords[0], zorder=KAT0, textcoords='offset points',
fontsize='small', xytext=offset, rotation=angle)
# septynkampis
prev_dirang = float(K1)*pi/180
step = 5/7*pi
heptagon = [np.array(Points[6].xy)]
for i in range(1, 7):
dxy = np.array([float(D1)*cos(prev_dirang), float(D1)*sin(prev_dirang)])
heptagon.append(heptagon[i-1] + dxy)
prev_dirang += pi - step
ax.add_patch(PolygonPatch(asPolygon(heptagon), linewidth=2, fc='xkcd:white', ec='xkcd:magenta'))
# septynkampio centras
x0, y0 = Points[6].xy
x = x0 + float(D1)/(2*sin(pi/7))*sin(pi/7-float(K1)*pi/180)
y = y0 + float(D1)/(2*sin(pi/7))*cos(pi/7-float(K1)*pi/180)
center = sPoint(x, y)
# užlieta erdvė apskritimas
radius = float(D1)/2/sin(pi/7)-float(A1)
angles = np.linspace(0, 2*pi, num=360)
circle_y = y + np.sin(angles) * radius
circle_x = x + np.cos(angles) * radius
ax.plot(circle_x, circle_y)
if __name__ == '__main__':
plt.show()

274
I/Karto/assignment4/measure.py Executable file
View File

@@ -0,0 +1,274 @@
#!/usr/bin/env python3
"""
Execute like this:
./measure.py | column -t -s $'\t'
"""
from collections import namedtuple
from decimal import Decimal as Dec
from math import sin, cos, pi
from shapely.geometry import LineString, asPolygon, Point as sPoint
import numpy as np
class Deg(namedtuple('Deg', ['deg', 'mm', 'ss'])):
def __str__(self):
return "%03d-%02d-%04.1f" % (self.deg, self.mm, self.ss)
def hms(deg):
assert isinstance(deg, Dec)
pdeg, pmm = divmod(deg, 1)
pmm = pmm * Dec(60)
pmm, pss = divmod(pmm, 1)
pss = pss * Dec(60)
return Deg(pdeg, pmm, pss)
def normalize(ang):
while ang > 180:
ang -= 360
while ang <= -180:
ang += 360
return ang
def guess(inp):
if isinstance(inp, str) and '-' in inp:
deg, mm, ss = inp.split('-')
ddeg, dmm, dss = Dec(deg), Dec(mm), Dec(ss)
return ddeg + dmm/60 + dss/3600
else:
return Dec(instr)
class Point(namedtuple('Point', ['acadx', 'acady'])):
@property
def lksx(self):
return self.acady
@property
def lksy(self):
return self.acadx
class Vertex:
def __init__(self, point, length, angle, dirang=Dec(), coords = Point(Dec(), Dec())):
self.point = point
self.len = length
self.ang = angle
self.dirang = dirang
self.coords = coords
self.dx, self.dy = Dec(), Dec()
@property
def xy(self):
"""xy returns a tuple of lksx and lksy coordinates"""
return np.array([float(self.coords.lksx), float(self.coords.lksy)])
def heptagon(d1):
angles = np.linspace(0, 2*pi, num=8)
R = float(D1)/2/sin(pi/7)
heptagon_xy = (np.array([np.cos(angles), np.sin(angles)])*R).T
return asPolygon(heptagon_xy)
juosta = namedtuple('juosta', ['plotis', 'kryptis', 'dashes', 'spalva'])
kelias = namedtuple('kelias', ['virsunes', 'plotis', 'kat', 'dashes', 'spalva', 'juostos'])
# Kategorijos
KAT0, KAT1, KAT2, KAT3, KAT4 = range(5,0,-1)
A = Dec('6.094')
B = Dec('-2.923')
C = Dec('-13.462')
N = Dec('9.512')
L1 = Dec('16.321')
# === Kelias A-05 ===
L2 = Dec('9.109')
L3 = Dec('4.819')
# === Kelias A-08 ===
L4 = Dec('2.675')
L5 = Dec('2.059')
L6 = Dec('1.262')
L7 = Dec('4.170')
L8 = Dec('6.005')
L9 = Dec('6.453')
# === Griovys G-11 ===
L10 = Dec('4.882')
L11 = Dec('3.305')
L12 = Dec('2.210')
L13 = Dec('4.381')
A03_plotis = Dec('17.401') + A
A05_plotis = Dec('13.705') + B
A08_plotis = Dec('29.006') + C
G11_plotis = Dec('14.776') + N
# Directional coords + angle
X11 = Dec('6091968.055')
Y11 = Dec('485944.146')
A11_2 = guess('70-16-17')
vertices = [
# point len angle dirangle coords
Vertex(11, Dec('164.126'), guess('103-03-03'), A11_2, Point(X11, Y11)),
Vertex(2, Dec('149.851'), guess('218-27-42')),
Vertex(19, Dec('82.384' ), guess('211-44-30')),
Vertex(3, Dec('259.022'), guess('67-26-49' )),
Vertex(24, Dec('319.331'), guess('67-33-06' )),
Vertex(12, Dec('74.764' ), guess('279-03-59')),
Vertex(13, Dec('81.640' ), guess('278-54-55')),
Vertex(14, Dec('31.888' ), guess('119-27-45')),
Vertex(15, Dec('84.073' ), guess('160-50-28')),
Vertex(16, Dec('70.072' ), guess('207-42-31')),
Vertex(17, Dec('73.378' ), guess('206-18-01')),
Vertex(10, Dec('66.625' ), guess('90-55-10' )),
Vertex(18, Dec('97.003' ), guess('100-18-10')),
Vertex(9, Dec('121.003'), guess('148-30-56')),
Vertex(8, Dec('131.915'), guess('285-20-57')),
Vertex(23, Dec('102.086'), guess('29-44-22' )),
Vertex(22, Dec('158.324'), guess('276-33-49')),
Vertex(7, Dec('72.157' ), guess('82-07-47' )),
Vertex(6, Dec('107.938'), guess('104-15-46')),
Vertex(21, Dec('104.082'), guess('234-17-37')),
Vertex(5, Dec('154.332'), guess('283-30-57')),
Vertex(20, Dec('68.972' ), guess('152-15-58')),
Vertex(1, Dec('151.531'), guess('101-20-01')),
Vertex(4, Dec('179.336'), guess('150-15-41')),
]
for i, v in enumerate(vertices[1:]):
prev = vertices[i]
v.dirang = prev.dirang + 180 - v.ang
v.dx = Dec(float(prev.len) * cos(float(prev.dirang) * pi/180))
v.dy = Dec(float(prev.len) * sin(float(prev.dirang) * pi/180))
v.coords = Point(prev.coords.acadx + v.dx, prev.coords.acady + v.dy)
angle_sum = Dec(0)
for v in vertices:
angle_sum += v.ang
theoretical_angle_sum = Dec(int((len(vertices)-2)*180))
# 9-kampio krastine D1
D1 = Dec('174.667') + C
# Daugiakampio pasukimo kampas (K1)
K1 = Dec('13.147') + B
# Atstumas iki tikrosios uzliejimo zonos (A1) (0.001 tikslumu)
A1 = Dec('67.536') + B
circle_radius = float(D1)/2/sin(pi/7)-float(A1)
heptagon_area = heptagon(float(D1)).area
circle_area = sPoint(0,0).buffer(circle_radius).area
# Points is vertice map by id
Points = {}
for v in vertices:
Points[v.point] = v
CONTINUOUS = (1,0)
DASHDOTX2 = (10,3,2,3)
DASHED = (100,20)
keliai = {
'A-08': kelias(
virsunes=[1,2,3],
plotis=A08_plotis,
kat=KAT1,
dashes=DASHDOTX2,
spalva='xkcd:red',
juostos=(
juosta(L6+L5+L4, 'right', DASHED, 'xkcd:lightgreen'),
juosta(L6+L5, 'right', DASHED, 'xkcd:lightgreen'),
juosta(L6, 'right', CONTINUOUS, 'xkcd:black'),
juosta(L7, 'left', CONTINUOUS, 'xkcd:black'),
juosta(L7+L8, 'left', DASHED, 'xkcd:lightgreen'),
juosta(L7+L8+L9, 'left', DASHED, 'xkcd:lightgreen'),
),
),
'A-05': kelias(
virsunes=[4,5,6,7,8,9,10],
plotis=A05_plotis,
kat=KAT2,
dashes=DASHDOTX2,
spalva='xkcd:red',
juostos=(
juosta(L3, 'right', CONTINUOUS, 'xkcd:brown'),
juosta(L2, 'left', CONTINUOUS, 'xkcd:brown'),
),
),
'A-03': kelias(
virsunes=[11,12,13,14,15,16,17,18],
plotis=A03_plotis,
kat=KAT3,
dashes=CONTINUOUS,
spalva='xkcd:magenta',
juostos=(
juosta(L1, 'right', DASHED, 'xkcd:magenta'),
juosta(0, 'left', DASHED, 'xkcd:white'),
),
),
'G-11': kelias(
virsunes=[19,20,21,22,23,24],
plotis=G11_plotis,
kat=KAT4,
dashes=CONTINUOUS,
spalva='xkcd:red',
juostos=(
juosta(L10+L11, 'right', CONTINUOUS, 'xkcd:blue'),
juosta(L11, 'right', CONTINUOUS, 'xkcd:lightblue'),
juosta(L12, 'left', CONTINUOUS, 'xkcd:lightblue'),
juosta(L12+L13, 'left', CONTINUOUS, 'xkcd:blue'),
),
),
}
keliu_ilgiai = {}
for id, kelias in keliai.items():
keliu_ilgiai[id] = LineString([Points[i].xy for i in kelias.virsunes]).length
if __name__ == '__main__':
print("tšk. nr.\tišmatuotas kampas\tdirekcinis kampas\tilgis\tdx\tdy\tx\ty")
for i, v in enumerate(vertices):
print("\t".join([
"%d" % v.point,
"%s" % str(hms(v.ang)),
"%s" % str(hms(v.dirang)),
"%.3f" % v.len,
"%.3f" % v.dx,
"%.3f" % v.dy,
"%.3f" % v.coords.acadx,
"%.3f" % v.coords.acady,
]))
#acad coords for drawing
"""
nxt = vertices[0 if i == len(vertices) - 1 else i+1]
pts = "%d-%d" % (v.point, nxt.point)
draw = "@%.3f<%.4f" % (v.len, normalize(90 - v.dirang))
print("%5s: %19s acadcoords:(%.3f,%.3f)" % \
(pts, draw, v.coords.acadx, v.coords.acady))
"""
# debugging & while drawing
("""
Kelio A-03 plotis = 17.401 + A = %.3f""" % A03_plotis + """
Kelio A-05 plotis = 13.705 + B = %.3f""" % A05_plotis + """
Kelio A-08 plotis = 29.006 + C = %.3f""" % A08_plotis + """
Griovio G-11 plotis = 14.776 + N = %.3f""" % G11_plotis + """
Prognozuojamo uzliejimo zona, tai taisyklingas 9-kampis
9-kampio krastine D1 = %.3f""" % D1 + """
Daugiakampio pasukimo kampas (K1) (0.0001 laipsnio tikslumu)
K1 = %.4f""" % K1 + """
Tikroji uzliejimo zona, tai taisyklingas apskritimas, kurio centras TURI SUTAPTI su daugiakampio centru.
Atstumas iki tikrosios uzliejimo zonos (A1) (0.001 tikslumu)
A1 = %.3f""" % A1 + """
A-05:
x(l) = %.3f""" % (A05_plotis*L3/(L2+L3)) + """
x(r) = %.3f""" % (A05_plotis*L2/(L2+L3)) + """
A-08:
x(l) = %.3f""" % (A08_plotis*(L7+L8+L9)/(L7+L8+L9+L6+L5+L4)) + """
x(r) = %.3f""" % (A08_plotis*(L6+L5+L4)/(L7+L8+L9+L6+L5+L4)) + """
G-11:
x(l) = %.3f""" % (G11_plotis*(L12+L13)/(L10+L11+L12+L13)) + """
x(r) = %.3f""" % (G11_plotis*(L10+L11)/(L10+L11+L12+L13)) + """
""")

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 KiB