From 89c2914eee2d3574e35f545fbb55eb2dc7ac29e2 Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Sun, 14 Jun 2026 22:38:46 +0200 Subject: [PATCH 1/2] Add kitestats.jl --- examples/kitestats.jl | 51 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 examples/kitestats.jl diff --git a/examples/kitestats.jl b/examples/kitestats.jl new file mode 100644 index 0000000..4df86e7 --- /dev/null +++ b/examples/kitestats.jl @@ -0,0 +1,51 @@ +# Copyright (c) 2025 Bart van de Lint, Uwe Fechner +# SPDX-License-Identifier: MPL-2.0 + +# Compute bounding box dimensions and projected area of an OBJ file. + +using VortexStepMethod: read_faces +using LinearAlgebra: cross + +choice = "ram_air_kite" +file = joinpath(@__DIR__, "..", "data", lowercase(choice), choice * "_body.obj") +file = normpath(file) # Normalize path for better error messages + +@assert isfile(file) "File not found: $file" + +println("File: $file") + +vertices, faces = read_faces(file) + +xs = [v[1] for v in vertices] +ys = [v[2] for v in vertices] +zs = [v[3] for v in vertices] + +xmin, xmax = minimum(xs), maximum(xs) +ymin, ymax = minimum(ys), maximum(ys) +zmin, zmax = minimum(zs), maximum(zs) + +println(" x range: $xmin to $xmax") +println(" y range: $ymin to $ymax") +println(" z range: $zmin to $zmax") +println() +println(" Width (x): $(xmax - xmin)") +println(" Height (y): $(ymax - ymin)") +println(" Depth (z): $(zmax - zmin)") + +println() +println("="^60) +println("Planform area (view from above, projected onto xy-plane)") +println("="^60) + +let + area = 0.0 + for face in faces + v1, v2, v3 = vertices[face[1]], vertices[face[2]], vertices[face[3]] + n = cross(v2 - v1, v3 - v1) + # Only count faces pointing upward (positive z) + if n[3] > 0 + area += n[3] / 2 + end + end + println(" Planform area (xy-projection): $area") +end \ No newline at end of file From 08690c330dd199ea2483e45ad959d98685ee861a Mon Sep 17 00:00:00 2001 From: Uwe Fechner Date: Wed, 1 Jul 2026 21:26:05 +0100 Subject: [PATCH 2/2] Adjust plot --- examples/steering_test_ram_air.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/steering_test_ram_air.jl b/examples/steering_test_ram_air.jl index 5461281..fd8095a 100644 --- a/examples/steering_test_ram_air.jl +++ b/examples/steering_test_ram_air.jl @@ -331,6 +331,7 @@ function plot_turnrate_law(c1, c2, time, v_app, psi, beta, psi_dot, steering) p1 = plot(time, steering, est_steering; ylabels=["rel_steering [-]", "est_rel_steering [-]"], ylims=[(-1.2, 1.2), (-1.2, 1.2)], + legendsize=16, fig="steering vs est_steering") display(p1) end @@ -360,7 +361,7 @@ if PLOT sl = lg.syslog steering = sl.var_01 ./ MAX_STEERING steering_setpoint_logged = sl.var_02 ./ MAX_STEERING - p=plotx(sl.time, rad2deg.(sl.elevation), rad2deg.(sl.azimuth), rad2deg.(sl.heading), steering, steering_setpoint_logged; ylabels=["elevation [°]", "azimuth [°]", "heading [°]", "rel_steering [-]", "rel_setpoint [-]"], fig="elevation and azimuth") + p=plotx(sl.time, rad2deg.(sl.elevation), rad2deg.(sl.azimuth), rad2deg.(sl.heading), steering, steering_setpoint_logged; ylabels=["elevation [°]", "azimuth [°]", "heading [°]", "rel_steering [-]", "rel_setpoint [-]"], legendsize=12,fig="elevation and azimuth") display(p) end