C :: Aufgabe #307 :: Lösung #1

1 Lösung Lösung öffentlich
#307

Landeablage Fallschirmspringer

Fortgeschrittener - C von JKooP - 16.11.2020 um 12:34 Uhr
Fallschirmspringer versuchen stets ihre vorgegebene Landezone (rot) zu treffen. Dennoch kommt es häufiger vor, dass aufgrund von unvorhergesehenen Einflüssen wie Scher- und Bodenwinde diese auch mal verfehlt wird (blau, orange, grün). Landeablagen, die radial einen Wert größer als 100m haben müssen dokumentiert werden. Dabei werden die Entfernung und die Richtung zum Soll- Ziel ermittelt. Die Koordinate (UTM) der Soll-Landezone ist bekannt.
Der Ist- Landepunkt wird mit einem GPS- Modul als Koordinate im UTM- Verfahren (WGS-84) ermittelt. Die Skizze im Anhang soll dies verdeutlichen.

Beispielkoordinate:

Ost: 374200
3: 100km- Quadrat
74200: Angabe in Meter -> 74200m (für Berechnung wichtig)

Nord: 5500150
55: 100km- Quadrat
00150: Angabe in Meter -> 150m (für Berechnung wichtig)

UTM: 374200 5500150


Beispiel zur Berechnung:

Soll- Koordinate: [Ost: 383000, Nord: 5500010]
Ist- Koordinate: [Ost: 383320, Nord: 5500220]

Wie groß sind die Landeablage in Meter und die Richtungsablage in Grad zu geografisch Nord?
Schreibe ein Programm, mit dem es möglich ist, jegliche Ablage in beliebige Richtung zu bestimmen.
#1
vote_ok
von JKooP (18090 Punkte) - 10.01.2021 um 12:26 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define _USE_MATH_DEFINES
#include <math.h>

typedef struct __Coordinate__ {
	int E;
	int N;
}Coordinate;

struct PairOfCoordinates{
	Coordinate Target;
	Coordinate Actual;
}pair;

double get_distance() {
	return sqrt(pow(abs(pair.Target.E - pair.Actual.E), 2) + pow(abs(pair.Target.N - pair.Actual.N), 2));
}

int get_quadrant() {
	bool e = pair.Actual.E > pair.Target.E;
	bool n = pair.Actual.N > pair.Target.N;

	if (e == true && n == true) return 90;
	else if (e == true && n == false) return 180;
	else if (e == false && n == false) return 270;
	else return 360;
}

double get_angle() {
	return get_quadrant() - atan2(abs(pair.Target.N - pair.Actual.N), abs(pair.Target.E - pair.Actual.E)) * 180 / M_PI;
}

void main()
{
	Coordinate target = { 383000, 5500010 };
	Coordinate actual = { 383320, 5500220 };
	pair.Target = target;
	pair.Actual = actual;

	printf("Die Ablage betraegt %.1f m und %.1f Grad.\n", get_distance(), get_angle());
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1800432

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.