flightanalysis 0.1.22__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flightanalysis-0.1.22/flightanalysis.egg-info → flightanalysis-0.2.1}/PKG-INFO +1 -1
- flightanalysis-0.2.1/examples/schedules_construction/__init__.py +0 -0
- flightanalysis-0.2.1/examples/schedules_construction/create_all.py +21 -0
- flightanalysis-0.2.1/examples/schedules_construction/f3a_a25.py +247 -0
- flightanalysis-0.2.1/examples/schedules_construction/f3a_f25.py +265 -0
- flightanalysis-0.2.1/examples/schedules_construction/f3a_p23.py +231 -0
- flightanalysis-0.2.1/examples/schedules_construction/f3a_p25.py +222 -0
- flightanalysis-0.2.1/examples/schedules_construction/f3auk_Intermediate.py +201 -0
- flightanalysis-0.2.1/examples/schedules_construction/f3auk_clubman.py +207 -0
- flightanalysis-0.2.1/examples/schedules_construction/imac_unlimited_2024.py +139 -0
- flightanalysis-0.2.1/examples/schedules_construction/make_manoeuvre.py +56 -0
- flightanalysis-0.2.1/examples/scoring/__init__.py +28 -0
- flightanalysis-0.2.1/examples/scoring/analysis_reprocess.py +12 -0
- flightanalysis-0.2.1/examples/scoring/f3a_criteria_maker.py +41 -0
- flightanalysis-0.2.1/examples/scoring/judging.py +50 -0
- flightanalysis-0.2.1/examples/scoring/manoeuvres/__init__.py +0 -0
- flightanalysis-0.2.1/examples/scoring/manoeuvres/inter_analysis.py +19 -0
- flightanalysis-0.2.1/examples/scoring/manoeuvres/intra_analysis.py +26 -0
- flightanalysis-0.2.1/examples/scoring/manoeuvres/mans/__init__.py +0 -0
- flightanalysis-0.2.1/examples/scoring/manoeuvres/mans/extract_mans.py +28 -0
- flightanalysis-0.2.1/examples/scoring/manoeuvres/positioning_analysis.py +11 -0
- flightanalysis-0.2.1/examples/scoring/split_optimisation.py +50 -0
- flightanalysis-0.2.1/flightanalysis/__init__.py +6 -0
- flightanalysis-0.2.1/flightanalysis/analysis/__init__.py +3 -0
- flightanalysis-0.2.1/flightanalysis/analysis/el_analysis.py +33 -0
- flightanalysis-0.2.1/flightanalysis/analysis/man_analysis.py +275 -0
- flightanalysis-0.2.1/flightanalysis/analysis/sch_analysis.py +48 -0
- flightanalysis-0.2.1/flightanalysis/data/IMAC_Unlimited2024_schedule.json +2885 -0
- flightanalysis-0.2.1/flightanalysis/data/f3a_a25_schedule.json +2674 -0
- flightanalysis-0.1.22/flightanalysis/data/f25_schedule.json → flightanalysis-0.2.1/flightanalysis/data/f3a_f25_schedule.json +332 -300
- flightanalysis-0.1.22/flightanalysis/data/p23_schedule.json → flightanalysis-0.2.1/flightanalysis/data/f3a_p23_schedule.json +190 -271
- flightanalysis-0.1.22/flightanalysis/data/p25_schedule.json → flightanalysis-0.2.1/flightanalysis/data/f3a_p25_schedule.json +254 -336
- flightanalysis-0.2.1/flightanalysis/data/f3auk_clubman_schedule.json +2011 -0
- flightanalysis-0.2.1/flightanalysis/data/f3auk_inter_schedule.json +1806 -0
- flightanalysis-0.2.1/flightanalysis/definition/__init__.py +15 -0
- flightanalysis-0.2.1/flightanalysis/definition/builders/__init__.py +0 -0
- flightanalysis-0.2.1/flightanalysis/definition/builders/elbuilders.py +315 -0
- flightanalysis-0.2.1/flightanalysis/definition/builders/lines.py +0 -0
- flightanalysis-0.2.1/flightanalysis/definition/builders/manbuilder.py +302 -0
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/collectors.py +1 -2
- flightanalysis-0.1.22/flightanalysis/schedule/definition/element_definition.py → flightanalysis-0.2.1/flightanalysis/definition/eldef.py +31 -11
- flightanalysis-0.1.22/flightanalysis/schedule/definition/manoeuvre_definition.py → flightanalysis-0.2.1/flightanalysis/definition/mandef.py +38 -39
- flightanalysis-0.1.22/flightanalysis/schedule/definition/manoeuvre_info.py → flightanalysis-0.2.1/flightanalysis/definition/maninfo.py +31 -11
- flightanalysis-0.1.22/flightanalysis/schedule/definition/manoeuvre_parameters.py → flightanalysis-0.2.1/flightanalysis/definition/manparm.py +51 -38
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/funopp.py +1 -1
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/itemopp.py +3 -6
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/mathopp.py +2 -5
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/operation.py +7 -6
- flightanalysis-0.1.22/flightanalysis/schedule/definition/sched_def.py → flightanalysis-0.2.1/flightanalysis/definition/scheddef.py +62 -19
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/__init__.py +0 -3
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/autorotation.py +8 -6
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/element.py +62 -11
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/line.py +3 -12
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/loop.py +37 -20
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/nose_drop.py +12 -7
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/pitch_break.py +18 -11
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/recovery.py +9 -9
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/stall_turn.py +17 -11
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/manoeuvre.py +22 -8
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/schedule.py +1 -6
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/__init__.py +1 -1
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/__init__.py +2 -1
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/criteria.py +19 -5
- flightanalysis-0.2.1/flightanalysis/scoring/criteria/f3a_criteria.py +38 -0
- flightanalysis-0.2.1/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/inter/combination.py +13 -5
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/inter/comparison.py +3 -5
- flightanalysis-0.2.1/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
- flightanalysis-0.2.1/flightanalysis/scoring/criteria/intra/bounded.py +68 -0
- flightanalysis-0.2.1/flightanalysis/scoring/criteria/intra/continuous.py +89 -0
- flightanalysis-0.2.1/flightanalysis/scoring/criteria/intra/single.py +38 -0
- flightanalysis-0.2.1/flightanalysis/scoring/downgrade.py +46 -0
- flightanalysis-0.2.1/flightanalysis/scoring/measurement.py +232 -0
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/results.py +35 -7
- {flightanalysis-0.1.22 → flightanalysis-0.2.1/flightanalysis.egg-info}/PKG-INFO +1 -1
- flightanalysis-0.2.1/flightanalysis.egg-info/SOURCES.txt +89 -0
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/flightanalysis.egg-info/top_level.txt +1 -0
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/setup.cfg +4 -1
- flightanalysis-0.2.1/tests/test_criiteria.py +156 -0
- flightanalysis-0.1.22/flightanalysis/__init__.py +0 -8
- flightanalysis-0.1.22/flightanalysis/analysis/__init__.py +0 -2
- flightanalysis-0.1.22/flightanalysis/analysis/aircraft_analysis.py +0 -131
- flightanalysis-0.1.22/flightanalysis/analysis/manoeuvre_analysis.py +0 -332
- flightanalysis-0.1.22/flightanalysis/base/__init__.py +0 -5
- flightanalysis-0.1.22/flightanalysis/base/collection.py +0 -102
- flightanalysis-0.1.22/flightanalysis/base/constructs.py +0 -68
- flightanalysis-0.1.22/flightanalysis/base/numpy_encoder.py +0 -9
- flightanalysis-0.1.22/flightanalysis/base/table.py +0 -351
- flightanalysis-0.1.22/flightanalysis/controls/__init__.py +0 -1
- flightanalysis-0.1.22/flightanalysis/controls/controls.py +0 -66
- flightanalysis-0.1.22/flightanalysis/environment/__init__.py +0 -5
- flightanalysis-0.1.22/flightanalysis/environment/environment.py +0 -49
- flightanalysis-0.1.22/flightanalysis/environment/wind.py +0 -128
- flightanalysis-0.1.22/flightanalysis/flightline/__init__.py +0 -1
- flightanalysis-0.1.22/flightanalysis/flightline/box.py +0 -127
- flightanalysis-0.1.22/flightanalysis/model/__init__.py +0 -3
- flightanalysis-0.1.22/flightanalysis/model/coefficients.py +0 -24
- flightanalysis-0.1.22/flightanalysis/model/constants.py +0 -19
- flightanalysis-0.1.22/flightanalysis/model/flow.py +0 -47
- flightanalysis-0.1.22/flightanalysis/model/model.py +0 -28
- flightanalysis-0.1.22/flightanalysis/schedule/__init__.py +0 -4
- flightanalysis-0.1.22/flightanalysis/schedule/definition/__init__.py +0 -23
- flightanalysis-0.1.22/flightanalysis/schedule/definition/element_builders.py +0 -184
- flightanalysis-0.1.22/flightanalysis/schedule/definition/manoeuvre_builder.py +0 -169
- flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/f3a_criteria.py +0 -34
- flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/intra/continuous.py +0 -58
- flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/intra/single.py +0 -24
- flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/single.py +0 -26
- flightanalysis-0.1.22/flightanalysis/schedule/scoring/downgrade.py +0 -108
- flightanalysis-0.1.22/flightanalysis/schedule/scoring/measurement.py +0 -160
- flightanalysis-0.1.22/flightanalysis/state/__init__.py +0 -3
- flightanalysis-0.1.22/flightanalysis/state/state.py +0 -538
- flightanalysis-0.1.22/flightanalysis.egg-info/SOURCES.txt +0 -82
- flightanalysis-0.1.22/tests/test_controls.py +0 -18
- flightanalysis-0.1.22/tests/test_criiteria.py +0 -61
- flightanalysis-0.1.22/tests/test_fc_json.py +0 -72
- flightanalysis-0.1.22/tests/test_flightline.py +0 -209
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/LICENSE +0 -0
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/MANIFEST.in +0 -0
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/README.md +0 -0
- {flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/inter → flightanalysis-0.2.1/examples}/__init__.py +0 -0
- {flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/intra → flightanalysis-0.2.1/examples/data}/__init__.py +0 -0
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/flightanalysis/data/__init__.py +0 -0
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/__init__.py +0 -0
- {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/exponential.py +0 -0
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/flightanalysis.egg-info/dependency_links.txt +0 -0
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/setup.py +0 -0
- {flightanalysis-0.1.22 → flightanalysis-0.2.1}/tests/test_data.py +0 -0
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from .f3a_p23 import p23_def
|
|
2
|
+
from .f3a_a25 import a25_def
|
|
3
|
+
from .f3a_p25 import p25_def
|
|
4
|
+
from .f3a_f25 import f25_def
|
|
5
|
+
from .imac_unlimited_2024 import sdef as imac_unl2024_def
|
|
6
|
+
from .f3auk_clubman import clubman_def as f3auk_club_def
|
|
7
|
+
from .f3auk_Intermediate import intermediate_def as f3auk_int_def
|
|
8
|
+
|
|
9
|
+
sdefs = {
|
|
10
|
+
'f3a_p23_schedule': p23_def,
|
|
11
|
+
'f3a_a25_schedule': a25_def,
|
|
12
|
+
'f3a_p25_schedule': p25_def,
|
|
13
|
+
'f3a_f25_schedule': f25_def,
|
|
14
|
+
'IMAC_Unlimited2024_schedule': imac_unl2024_def,
|
|
15
|
+
'f3auk_clubman_schedule': f3auk_club_def,
|
|
16
|
+
'f3auk_inter_schedule': f3auk_int_def
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
for sdef in sdefs:
|
|
21
|
+
sdef.to_json("flightanalysis/data/p23_schedule.json")
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
'''Author Vince Beesley 18/11/2023'''
|
|
2
|
+
|
|
3
|
+
from flightanalysis import *
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
c45 = np.cos(np.radians(45))
|
|
7
|
+
|
|
8
|
+
a25_def = SchedDef([
|
|
9
|
+
f3amb.create(ManInfo
|
|
10
|
+
(
|
|
11
|
+
"Triangle", "trgle", k=3, position=Position.CENTRE,
|
|
12
|
+
start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.UPRIGHT),
|
|
13
|
+
end=BoxLocation(Height.TOP)
|
|
14
|
+
),[
|
|
15
|
+
MBTags.CENTRE,
|
|
16
|
+
f3amb.loop(-np.pi/4),
|
|
17
|
+
f3amb.line(),
|
|
18
|
+
f3amb.loop(-np.pi*3/4),
|
|
19
|
+
centred(f3amb.roll(2*np.pi, line_length=str(2 * c45 * f3amb.mps.line_length))),
|
|
20
|
+
f3amb.loop(-np.pi*3/4),
|
|
21
|
+
f3amb.line(),
|
|
22
|
+
f3amb.loop(-np.pi/4),
|
|
23
|
+
MBTags.CENTRE
|
|
24
|
+
],line_length=150),
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
f3amb.create(ManInfo(
|
|
28
|
+
"half square", "hSqL", k=2, position=Position.END,
|
|
29
|
+
start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.UPRIGHT),
|
|
30
|
+
end=BoxLocation(Height.BTM)
|
|
31
|
+
),[
|
|
32
|
+
f3amb.loop(-np.pi/2),
|
|
33
|
+
f3amb.roll(np.pi),
|
|
34
|
+
f3amb.loop(np.pi/2)]),
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
f3amb.create(
|
|
38
|
+
ManInfo(
|
|
39
|
+
"Square on Corner", "sqL", k=4, position=Position.CENTRE,
|
|
40
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
|
|
41
|
+
end=BoxLocation(Height.BTM)
|
|
42
|
+
),
|
|
43
|
+
[
|
|
44
|
+
MBTags.CENTRE,
|
|
45
|
+
f3amb.loop(np.pi/4),
|
|
46
|
+
f3amb.line(),
|
|
47
|
+
f3amb.loop(np.pi/2),
|
|
48
|
+
f3amb.roll("1/2"),
|
|
49
|
+
centred(f3amb.loop(-np.pi/2)),
|
|
50
|
+
f3amb.roll("1/2"),
|
|
51
|
+
f3amb.loop(np.pi/2),
|
|
52
|
+
f3amb.line(),
|
|
53
|
+
f3amb.loop(np.pi/4),
|
|
54
|
+
MBTags.CENTRE],
|
|
55
|
+
line_length=80),
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
f3amb.create(ManInfo(
|
|
59
|
+
"Figure P", "fig9", k=3, position=Position.END,
|
|
60
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
|
|
61
|
+
end=BoxLocation(Height.MID)
|
|
62
|
+
),[
|
|
63
|
+
f3amb.loop(np.pi/2),
|
|
64
|
+
f3amb.roll("1/2"),
|
|
65
|
+
f3amb.loop(np.pi*3/2)]),
|
|
66
|
+
|
|
67
|
+
f3amb.create(ManInfo(
|
|
68
|
+
"4 Quarter Rolls", "rollC", k=4, position=Position.CENTRE,
|
|
69
|
+
start=BoxLocation(Height.MID, Direction.UPWIND, Orientation.UPRIGHT),
|
|
70
|
+
end=BoxLocation(Height.MID)
|
|
71
|
+
),[
|
|
72
|
+
centred(f3amb.roll('4x4', padded=False)),
|
|
73
|
+
]),
|
|
74
|
+
|
|
75
|
+
f3amb.create(ManInfo(
|
|
76
|
+
"Stall Turn", "stall", k=3, position=Position.END,
|
|
77
|
+
start=BoxLocation(Height.MID, Direction.UPWIND, Orientation.UPRIGHT),
|
|
78
|
+
end=BoxLocation(Height.BTM)
|
|
79
|
+
),[
|
|
80
|
+
f3amb.loop(np.pi/2),
|
|
81
|
+
f3amb.line(length=50),
|
|
82
|
+
f3amb.stallturn(),
|
|
83
|
+
f3amb.roll("1/2", line_length=180),
|
|
84
|
+
f3amb.loop(-np.pi/2)]),
|
|
85
|
+
|
|
86
|
+
f3amb.create(ManInfo(
|
|
87
|
+
"Double Immelman", "dImm", k=4, position=Position.CENTRE,
|
|
88
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.INVERTED),
|
|
89
|
+
end=BoxLocation(Height.BTM)
|
|
90
|
+
),[
|
|
91
|
+
f3amb.roll("1/2", padded=False),
|
|
92
|
+
f3amb.loop(np.pi),
|
|
93
|
+
f3amb.roll("1/2" , padded=False),
|
|
94
|
+
f3amb.line(length=80),
|
|
95
|
+
f3amb.loop(-np.pi),
|
|
96
|
+
f3amb.roll("1/2" , padded=False),
|
|
97
|
+
],
|
|
98
|
+
loop_radius=100),
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
f3amb.create(ManInfo(
|
|
102
|
+
"Humpty", "hB", k=2, position=Position.END,
|
|
103
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
|
|
104
|
+
end=BoxLocation(Height.BTM)
|
|
105
|
+
),[
|
|
106
|
+
f3amb.loop(np.pi/2),
|
|
107
|
+
f3amb.line(),
|
|
108
|
+
f3amb.loop(-np.pi),
|
|
109
|
+
f3amb.roll("1/2"),
|
|
110
|
+
f3amb.loop(np.pi/2)]),
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
f3amb.create(ManInfo(
|
|
114
|
+
"Outside Loop", "loop", k=3, position=Position.CENTRE,
|
|
115
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
|
|
116
|
+
end=BoxLocation(Height.BTM)
|
|
117
|
+
),[
|
|
118
|
+
f3amb.roll("1/2", padded=False),
|
|
119
|
+
f3amb.line(length='ee_pause'),
|
|
120
|
+
MBTags.CENTRE,
|
|
121
|
+
f3amb.loop(-2*np.pi),
|
|
122
|
+
MBTags.CENTRE,
|
|
123
|
+
f3amb.line(length='ee_pause'),
|
|
124
|
+
f3amb.roll("1/2", padded=False),
|
|
125
|
+
],
|
|
126
|
+
loop_radius=100,
|
|
127
|
+
|
|
128
|
+
),
|
|
129
|
+
|
|
130
|
+
f3amb.create(ManInfo(
|
|
131
|
+
"Half Square on Corner", "hSqL2", k=2, position=Position.END,
|
|
132
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
|
|
133
|
+
end=BoxLocation(Height.TOP)
|
|
134
|
+
),[
|
|
135
|
+
f3amb.loop(np.pi/4),
|
|
136
|
+
f3amb.line(),
|
|
137
|
+
f3amb.loop(np.pi/2),
|
|
138
|
+
f3amb.line(),
|
|
139
|
+
f3amb.loop(np.pi/4),
|
|
140
|
+
], line_length=130*c45),
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
f3amb.create(ManInfo(
|
|
144
|
+
"Cloverleaf", "hClov", k=5, position=Position.CENTRE,
|
|
145
|
+
start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
|
|
146
|
+
end=BoxLocation(Height.TOP)
|
|
147
|
+
),[
|
|
148
|
+
f3amb.loop(np.pi/2),
|
|
149
|
+
MBTags.CENTRE,
|
|
150
|
+
f3amb.line(),
|
|
151
|
+
f3amb.loop(3*np.pi/2),
|
|
152
|
+
centred(f3amb.line(length=str(f3amb.mps.loop_radius * 2))),
|
|
153
|
+
f3amb.loop(np.pi*3/2),
|
|
154
|
+
MBTags.CENTRE,
|
|
155
|
+
f3amb.line(),
|
|
156
|
+
f3amb.loop(np.pi/2),
|
|
157
|
+
]),
|
|
158
|
+
|
|
159
|
+
f3amb.create(ManInfo(
|
|
160
|
+
"Figure Et", "rEt", k=4, position=Position.END,
|
|
161
|
+
start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
|
|
162
|
+
end=BoxLocation(Height.TOP)
|
|
163
|
+
),[
|
|
164
|
+
f3amb.loop(np.pi/4),
|
|
165
|
+
f3amb.line(length=str(f3amb.mps.line_length / c45)),
|
|
166
|
+
f3amb.loop(np.pi*5/4),
|
|
167
|
+
f3amb.line(),
|
|
168
|
+
f3amb.loop(-np.pi/2),
|
|
169
|
+
]),
|
|
170
|
+
|
|
171
|
+
f3amb.create(ManInfo(
|
|
172
|
+
"Spin", "iSpin", k=3, position=Position.CENTRE,
|
|
173
|
+
start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.UPRIGHT),
|
|
174
|
+
end=BoxLocation(Height.BTM),
|
|
175
|
+
),[
|
|
176
|
+
MBTags.CENTRE,
|
|
177
|
+
f3amb.spin(r(2)),
|
|
178
|
+
f3amb.line(length=165),
|
|
179
|
+
f3amb.loop(np.pi/2),
|
|
180
|
+
|
|
181
|
+
]),
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
f3amb.create(ManInfo(
|
|
185
|
+
"Top Hat", "tHat", k=3, position=Position.END,
|
|
186
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
|
|
187
|
+
end=BoxLocation(Height.BTM)
|
|
188
|
+
),[
|
|
189
|
+
f3amb.loop(np.pi/2),
|
|
190
|
+
f3amb.roll("1/2"),
|
|
191
|
+
f3amb.loop(np.pi/2),
|
|
192
|
+
f3amb.line(length=50),
|
|
193
|
+
f3amb.loop(np.pi/2),
|
|
194
|
+
f3amb.line(),
|
|
195
|
+
f3amb.loop(np.pi/2)
|
|
196
|
+
]),
|
|
197
|
+
|
|
198
|
+
f3amb.create(ManInfo(
|
|
199
|
+
"Figure Z", "Z", k=4, position=Position.CENTRE,
|
|
200
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
|
|
201
|
+
end=BoxLocation(Height.TOP)
|
|
202
|
+
),[
|
|
203
|
+
f3amb.loop(3*np.pi/4),
|
|
204
|
+
centred(f3amb.roll(np.pi)),
|
|
205
|
+
f3amb.loop(3*np.pi/4),
|
|
206
|
+
], loop_radius=40,
|
|
207
|
+
),
|
|
208
|
+
|
|
209
|
+
f3amb.create(ManInfo(
|
|
210
|
+
"Comet", "Com", k=3, position=Position.END,
|
|
211
|
+
start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
|
|
212
|
+
end=BoxLocation(Height.BTM)
|
|
213
|
+
),[
|
|
214
|
+
f3amb.loop(np.pi/4),
|
|
215
|
+
f3amb.line(),
|
|
216
|
+
f3amb.loop(-3*np.pi/2),
|
|
217
|
+
f3amb.line(),
|
|
218
|
+
f3amb.loop(np.pi/4),
|
|
219
|
+
], line_length=(1/c45 + 1) * 50 + 30 - (1/c45 - 2) * 50, loop_radius=50),
|
|
220
|
+
|
|
221
|
+
f3amb.create(ManInfo(
|
|
222
|
+
"Figure S", "figS", k=5, position=Position.CENTRE,
|
|
223
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
|
|
224
|
+
end=BoxLocation(Height.TOP)
|
|
225
|
+
),[
|
|
226
|
+
MBTags.CENTRE,
|
|
227
|
+
f3amb.loop(np.pi),
|
|
228
|
+
MBTags.CENTRE,
|
|
229
|
+
f3amb.loop(-np.pi),
|
|
230
|
+
MBTags.CENTRE,
|
|
231
|
+
], )
|
|
232
|
+
|
|
233
|
+
]
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
if __name__ == "__main__":
|
|
238
|
+
|
|
239
|
+
# a25_def.plot().show()
|
|
240
|
+
|
|
241
|
+
# for mdef in a25_def:
|
|
242
|
+
# mdef.plot(depth=170, wind=1).show()
|
|
243
|
+
# import os
|
|
244
|
+
# a25_def.create_fcjs('a25', f'{os.environ['HOME']}/Desktop/templates/')
|
|
245
|
+
|
|
246
|
+
a25_def.to_json("flightanalysis/data/f3a_a25_schedule.json")
|
|
247
|
+
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
from flightanalysis.definition import *
|
|
2
|
+
from flightanalysis.elements import *
|
|
3
|
+
from flightanalysis.scoring.criteria import *
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
c45 = np.cos(np.radians(45))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
f25_def = SchedDef([
|
|
11
|
+
f3amb.create(ManInfo(
|
|
12
|
+
"Square on Corner", "sLoop", k=4, position=Position.CENTRE,
|
|
13
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
|
|
14
|
+
end=BoxLocation(Height.BTM)
|
|
15
|
+
),[
|
|
16
|
+
MBTags.CENTRE,
|
|
17
|
+
f3amb.loop(np.pi/4, rolls="roll_option[0]"),
|
|
18
|
+
f3amb.line(),
|
|
19
|
+
f3amb.loop("roll_option[1]", rolls=r(1/2), ke=True),
|
|
20
|
+
f3amb.line(),
|
|
21
|
+
centred(f3amb.loop("roll_option[2]", rolls=r(1/2), ke=True)),
|
|
22
|
+
f3amb.line(),
|
|
23
|
+
f3amb.loop("roll_option[3]", rolls=r(1/2), ke=True),
|
|
24
|
+
f3amb.line(),
|
|
25
|
+
f3amb.loop("roll_option[4]", rolls="roll_option[5]", ke=True),
|
|
26
|
+
MBTags.CENTRE
|
|
27
|
+
],
|
|
28
|
+
roll_option=ManParm("roll_option", Combination(desired=[
|
|
29
|
+
[r(1/4), -r(1/4), r(1/4), -r(1/4), r(1/8), -r(1/4)],
|
|
30
|
+
[-r(1/4), r(1/4), -r(1/4), r(1/4), -r(1/8), r(1/4)]
|
|
31
|
+
]), 0),
|
|
32
|
+
line_length=70
|
|
33
|
+
),
|
|
34
|
+
f3amb.create(ManInfo(
|
|
35
|
+
"Figure P", "fig9", k=3, position=Position.END,
|
|
36
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.INVERTED),
|
|
37
|
+
end=BoxLocation(Height.MID)
|
|
38
|
+
),[
|
|
39
|
+
f3amb.loop(-np.pi/2),
|
|
40
|
+
f3amb.roll([2*np.pi,-np.pi]),
|
|
41
|
+
f3amb.loop(-3*np.pi/2),
|
|
42
|
+
], full_roll_rate=np.pi, partial_roll_rate=np.pi ),
|
|
43
|
+
f3amb.create(ManInfo(
|
|
44
|
+
"Roll Combo", "rollC", k=4, position=Position.CENTRE,
|
|
45
|
+
start=BoxLocation(Height.MID, Direction.DOWNWIND, Orientation.INVERTED),
|
|
46
|
+
end=BoxLocation(Height.BTM)
|
|
47
|
+
),[
|
|
48
|
+
centred(f3amb.roll(
|
|
49
|
+
[np.pi/2, np.pi/2, -np.pi/2, -np.pi/2, -np.pi/2, -np.pi/2, np.pi/2, np.pi/2],
|
|
50
|
+
padded=False
|
|
51
|
+
))
|
|
52
|
+
], ),
|
|
53
|
+
f3amb.create(ManInfo(
|
|
54
|
+
"Half Loop", "hLoop", k=4, position=Position.END,
|
|
55
|
+
start=BoxLocation(Height.MID, Direction.DOWNWIND, Orientation.INVERTED),
|
|
56
|
+
end=BoxLocation(Height.TOP)
|
|
57
|
+
),[
|
|
58
|
+
f3amb.loop(-np.pi, rolls=np.pi)
|
|
59
|
+
], ),
|
|
60
|
+
f3amb.create(ManInfo(
|
|
61
|
+
"Humpty", "hB", k=5, position=Position.CENTRE,
|
|
62
|
+
start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.INVERTED),
|
|
63
|
+
end=BoxLocation(Height.BTM)
|
|
64
|
+
),[
|
|
65
|
+
f3amb.loop(np.pi/2),
|
|
66
|
+
f3amb.snap(r(1.5)),
|
|
67
|
+
centred(f3amb.loop(np.pi, rolls=np.pi)),
|
|
68
|
+
f3amb.roll(r(1.5)),
|
|
69
|
+
f3amb.loop(-np.pi/2)
|
|
70
|
+
], full_roll_rate=np.pi),
|
|
71
|
+
f3amb.create(ManInfo(
|
|
72
|
+
"Spins", "spin", k=3, position=Position.END,
|
|
73
|
+
start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.UPRIGHT),
|
|
74
|
+
end=BoxLocation(Height.BTM)
|
|
75
|
+
),[
|
|
76
|
+
f3amb.spin(r(3)),
|
|
77
|
+
f3amb.roll(r(0.5), line_length=147),
|
|
78
|
+
f3amb.loop(np.pi/2)
|
|
79
|
+
], ),
|
|
80
|
+
f3amb.create(ManInfo(
|
|
81
|
+
"Rolling Circle", "hCirc", k=5, position=Position.CENTRE,
|
|
82
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
|
|
83
|
+
end=BoxLocation(Height.BTM)
|
|
84
|
+
),[
|
|
85
|
+
MBTags.CENTRE,
|
|
86
|
+
f3amb.loop("roll_option[0]", rolls="roll_option[1]", ke=True),
|
|
87
|
+
centred(f3amb.loop("roll_option[2]", rolls="roll_option[3]", ke=True)),
|
|
88
|
+
f3amb.loop("roll_option[4]", rolls="roll_option[5]", ke=True),
|
|
89
|
+
MBTags.CENTRE
|
|
90
|
+
],
|
|
91
|
+
loop_radius=100,
|
|
92
|
+
roll_option=ManParm("roll_option", Combination(desired=[
|
|
93
|
+
[np.pi/2, np.pi, -np.pi, -np.pi, np.pi/2, np.pi],
|
|
94
|
+
[-np.pi/2, -np.pi, np.pi, np.pi, -np.pi/2, -np.pi]
|
|
95
|
+
]), 1),
|
|
96
|
+
),
|
|
97
|
+
f3amb.create(ManInfo(
|
|
98
|
+
"Shark Fin", "sFin", k=4, position=Position.END,
|
|
99
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.INVERTED),
|
|
100
|
+
end=BoxLocation(Height.BTM)
|
|
101
|
+
),[
|
|
102
|
+
f3amb.loop(-np.pi/2),
|
|
103
|
+
f3amb.roll('2/2'),
|
|
104
|
+
f3amb.loop(-3*np.pi/4),
|
|
105
|
+
f3amb.snap([r(1), r(-1)], line_length=str(f3amb.mps.line_length / c45 + 2*f3amb.mps.loop_radius)),
|
|
106
|
+
#L2 = (L1 + 2*R - 2*R(1-c45)) / c45
|
|
107
|
+
#L2 = (L1/c45 + 2*R)
|
|
108
|
+
f3amb.loop(np.pi/4)
|
|
109
|
+
], line_length=80, full_roll_rate=np.pi, loop_radius=40),
|
|
110
|
+
f3amb.create(ManInfo(
|
|
111
|
+
"Square Octagonal Loop", "sV8", k=5, position=Position.CENTRE,
|
|
112
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
|
|
113
|
+
end=BoxLocation(Height.BTM)
|
|
114
|
+
),[
|
|
115
|
+
f3amb.loop(np.pi/2),
|
|
116
|
+
f3amb.roll(r(0.5)),
|
|
117
|
+
f3amb.loop(-np.pi/2),
|
|
118
|
+
centred(f3amb.roll(2*np.pi)),
|
|
119
|
+
f3amb.loop(np.pi/2),
|
|
120
|
+
f3amb.roll("roll_option[0]"),
|
|
121
|
+
f3amb.loop("roll_option[1]", ke=True),
|
|
122
|
+
centred(f3amb.roll(2*np.pi)),
|
|
123
|
+
f3amb.loop("roll_option[2]", ke=True),
|
|
124
|
+
f3amb.roll("roll_option[3]"),
|
|
125
|
+
f3amb.loop(-np.pi/2),
|
|
126
|
+
centred(f3amb.roll(2*np.pi)),
|
|
127
|
+
f3amb.loop(np.pi/2),
|
|
128
|
+
f3amb.roll('1/2'),
|
|
129
|
+
f3amb.loop(-np.pi/2)
|
|
130
|
+
], line_length=60, full_roll_rate=3*np.pi/2, partial_roll_rate=3*np.pi/2, loop_radius=35,
|
|
131
|
+
roll_option=ManParm("roll_option", Combination(desired=[
|
|
132
|
+
[np.pi/2, -np.pi/2, -np.pi/2, np.pi/2],
|
|
133
|
+
[-np.pi/2, np.pi/2, np.pi/2, -np.pi/2]
|
|
134
|
+
]), 0),
|
|
135
|
+
),
|
|
136
|
+
f3amb.create(ManInfo(
|
|
137
|
+
"Humpty_2", "hB2", k=3, position=Position.END,
|
|
138
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.INVERTED),
|
|
139
|
+
end=BoxLocation(Height.BTM)
|
|
140
|
+
),[
|
|
141
|
+
f3amb.loop(-np.pi/2),
|
|
142
|
+
f3amb.roll('1/2'),
|
|
143
|
+
f3amb.loop(-np.pi),
|
|
144
|
+
f3amb.roll('3/2'),
|
|
145
|
+
f3amb.loop(np.pi/2),
|
|
146
|
+
], ),
|
|
147
|
+
f3amb.create(ManInfo(
|
|
148
|
+
"Triangular Loop", "keTrg", k=5, position=Position.CENTRE,
|
|
149
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
|
|
150
|
+
end=BoxLocation(Height.BTM)
|
|
151
|
+
),[
|
|
152
|
+
f3amb.loop(r(3/8), rolls="roll_option[0]"),
|
|
153
|
+
f3amb.roll(r(1/2)),
|
|
154
|
+
centred(f3amb.loop("roll_option[1]", rolls="top_roll_option[0]", ke=True)),
|
|
155
|
+
f3amb.roll(r(1/2)),
|
|
156
|
+
f3amb.loop("roll_option[2]", rolls="roll_option[3]", ke=True)
|
|
157
|
+
],
|
|
158
|
+
roll_option=ManParm("roll_option", Combination(desired=r([
|
|
159
|
+
[-1/4, -1/4, -3/8, -1/4],
|
|
160
|
+
[1/4, 1/4, 3/8, 1/4]
|
|
161
|
+
])), 0),
|
|
162
|
+
top_roll_option=ManParm("top_roll_option", Combination(desired=r([[-1/2], [1/2]])), 0),
|
|
163
|
+
),
|
|
164
|
+
f3amb.create(ManInfo(
|
|
165
|
+
"Half 8 Sided Loop", "h8L", k=3, position=Position.END,
|
|
166
|
+
start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
|
|
167
|
+
end=BoxLocation(Height.TOP)
|
|
168
|
+
),[
|
|
169
|
+
f3amb.loop(np.pi/4),
|
|
170
|
+
f3amb.roll("roll_option[0]"),
|
|
171
|
+
f3amb.loop("roll_option[1]", ke=True),
|
|
172
|
+
f3amb.line(),
|
|
173
|
+
f3amb.loop("roll_option[2]", ke=True),
|
|
174
|
+
f3amb.roll("roll_option[3]"),
|
|
175
|
+
f3amb.loop(np.pi/4)
|
|
176
|
+
], line_length=65, loop_radius=35,
|
|
177
|
+
roll_option=ManParm("roll_option", Combination(desired=[
|
|
178
|
+
[np.pi/2, -np.pi/4, -np.pi/4, -np.pi/2],
|
|
179
|
+
[-np.pi/2, np.pi/4, np.pi/4, np.pi/2]
|
|
180
|
+
]), 0),
|
|
181
|
+
),
|
|
182
|
+
f3amb.create(ManInfo(
|
|
183
|
+
"45 degree downline", "dl45", k=4, position=Position.CENTRE,
|
|
184
|
+
start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.INVERTED),
|
|
185
|
+
end=BoxLocation(Height.BTM)
|
|
186
|
+
),[
|
|
187
|
+
f3amb.loop(np.pi/4),
|
|
188
|
+
centred(f3amb.roll([r(1.25), -r(1.25)])),
|
|
189
|
+
f3amb.loop(-np.pi/4)
|
|
190
|
+
], full_roll_rate=np.pi, line_length=231/c45 - (2/c45-2)*55 ),
|
|
191
|
+
#231/c45 - (2/c45-2)*R)= L
|
|
192
|
+
f3amb.create(ManInfo(
|
|
193
|
+
"Half Square Loop", "hSLoop", k=3, position=Position.END,
|
|
194
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.INVERTED),
|
|
195
|
+
end=BoxLocation(Height.TOP)
|
|
196
|
+
),[
|
|
197
|
+
f3amb.loop(-np.pi/2),
|
|
198
|
+
f3amb.roll([2*np.pi, - np.pi]),
|
|
199
|
+
f3amb.loop(np.pi/2)
|
|
200
|
+
], full_roll_rate=np.pi, partial_roll_rate=np.pi ),
|
|
201
|
+
f3amb.create(ManInfo(
|
|
202
|
+
"Avalanche", "Aval", k=6, position=Position.CENTRE,
|
|
203
|
+
start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
|
|
204
|
+
end=BoxLocation(Height.TOP)
|
|
205
|
+
),[
|
|
206
|
+
MBTags.CENTRE,
|
|
207
|
+
f3amb.loop(np.pi/2, rolls="roll_option[0]"),
|
|
208
|
+
f3amb.loop("roll_option[1]", ke=True),
|
|
209
|
+
centred(f3amb.snap(r(1), padded=False)),
|
|
210
|
+
f3amb.loop("roll_option[2]", ke=True),
|
|
211
|
+
f3amb.loop("roll_option[3]", rolls="roll_option[4]", ke=True),
|
|
212
|
+
MBTags.CENTRE
|
|
213
|
+
], loop_radius=100,
|
|
214
|
+
roll_option=ManParm("roll_option", Combination(desired=[
|
|
215
|
+
[np.pi/2, -np.pi/2, -np.pi/2, -np.pi/2, -np.pi/2],
|
|
216
|
+
[-np.pi/2, np.pi/2, np.pi/2, np.pi/2, np.pi/2]
|
|
217
|
+
]), 0),
|
|
218
|
+
),
|
|
219
|
+
f3amb.create(ManInfo(
|
|
220
|
+
"Split S", "keS", k=4, position=Position.END,
|
|
221
|
+
start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
|
|
222
|
+
end=BoxLocation(Height.BTM)
|
|
223
|
+
),[
|
|
224
|
+
f3amb.roll("roll_option[0]", padded=False),
|
|
225
|
+
f3amb.loop("roll_option[1]", ke=True),
|
|
226
|
+
f3amb.roll("roll_option[2]", padded=False)
|
|
227
|
+
], loop_radius=122.5,
|
|
228
|
+
roll_option=ManParm("roll_option", Combination(desired=[
|
|
229
|
+
[np.pi/2, -np.pi, np.pi/2],
|
|
230
|
+
[-np.pi/2, np.pi, -np.pi/2],
|
|
231
|
+
]), 0),
|
|
232
|
+
),
|
|
233
|
+
f3amb.create(ManInfo(
|
|
234
|
+
"Stall Turn", "stall", k=5, position=Position.CENTRE,
|
|
235
|
+
start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.INVERTED),
|
|
236
|
+
end=BoxLocation(Height.BTM)
|
|
237
|
+
),[
|
|
238
|
+
f3amb.roll('1/2', padded=False),
|
|
239
|
+
f3amb.line(length="ee_pause"),
|
|
240
|
+
f3amb.loop(np.pi/2),
|
|
241
|
+
MBTags.CENTRE,
|
|
242
|
+
f3amb.roll("3x4"),
|
|
243
|
+
f3amb.stallturn(),
|
|
244
|
+
f3amb.snap(r(0.75)),
|
|
245
|
+
f3amb.loop(-np.pi/2),
|
|
246
|
+
f3amb.line(length="ee_pause"),
|
|
247
|
+
f3amb.roll('1/2', padded=False),
|
|
248
|
+
],
|
|
249
|
+
line_length=150,
|
|
250
|
+
partial_roll_rate=np.pi,
|
|
251
|
+
ee_pause=10,
|
|
252
|
+
#roll_option=need to thing about how to do this
|
|
253
|
+
)
|
|
254
|
+
])
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
if __name__ == "__main__":
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
#f25_def.plot().show()
|
|
262
|
+
# f25_def.create_fcj('F25', 'f25_template_fcj.json')
|
|
263
|
+
f25_def.to_json("flightanalysis/data/f3a_f25_schedule.json")
|
|
264
|
+
#import os
|
|
265
|
+
#f25_def.create_fcjs('f25', f'{os.environ['HOME']}/Desktop/templates/')
|