Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Struktogramm und Algorithmus für Bauingeniuersinformatik » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Struktogramm und Algorithmus für Bauingeniuersinformatik
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Whitey
unregistriert
Struktogramm und Algorithmus für Bauingeniuersinformatik Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo Freunde,

Ein guter Freund hat mich gebeten für ihn eine Aufgabe für sein Studium zu erledigen. Ich kann Java schreiben, habe es mir selbst bei gebracht. Leider kann ich mit der unten stehenden Aufgabe nichts anfangen.

"Überlegen Sie sich einen Algorithmus, mit dem der Winkel zwischen dem Kranausleger und einem beliebigen Findling auf dem Baufeld berechnet werden kann. Beachten Sie dabei eventuelle Periodeninkonsistenzen bei den Winkelfunktionen (Periode tan: ?, cos, sin: 2?). Erklären Sie diesen Algorithmus in Worten und stellen Sie Ihn in einem Struktogramm dar."

Kann mir jemand helfen?

Vielen Dank.

Meine Ideen:
Leider bisher völlig im dunkeln...
23.04.2015 15:14
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

RE: Struktogramm und Algorithmus für Bauingeniuersinformatik Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo!

Ich glaube, so kann Dir wahrscheinlich keiner wirklich helfen. Ist da eine Skizze mit bei?
Welche Angaben hast Du denn überhaupt? Koordinaten von Kran? Koordinaten der Findlinge? In welchem Koordinatensystem?
Um welchen Winkel geht es überhaupt? Um den, den sich der Kran inklusive Ausleger drehen sollte, um an den Findling zu kommen? Ich meine, schon die Beschreibung "der Winkel zwischen dem Kranausleger und einem beliebigen Findling" ist ja Quatsch: Der Findling ist ja an einem Punkt auf dem Boden wahrscheinlich und der Ausleger ist irgendwo waagerecht in der Luft. Wo soll da ein Winkel zwischen diesen beiden Objekten sein?

Das mit den Perioden: Winkelfunktionen sind ja im Allgemeinen periodisch, sprich der Funktionswert ist der gleiche für verschiedene Winkel. Du kannst also gerade bei den Umkehrfunktionen arcsin und so nicht sicher wissen, welcher Winkel es wirklich war. Du bekommst nur einen raus, aber es hätten ja noch andere Winkel sein können, die auf denselben Sinus-Wert kommen.
z. B. ist sin(x) = sin(180°-x); z. B. sin(60°) = sin(120°); so ist z. B. arcsin(sin(60°)) = 60°, aber auch arcsin(sin(120°)) = 60°; Du musst also noch zusätzliche Informationen nutzen, um entscheiden zu können, ob der Winkel jetzt eher größer oder kleiner 90° war z. B..

Allerdings ist das jetzt alles nur ein Beispiel. Weil ich noch nicht weiß, wie "der Input" überhaupt aussehen soll, und auch nicht, was genau das Ergebnis sein soll, kann ich auch nicht sagen, wie man es überhaupt rechnen sollte. Und dementsprechend dann auch nicht, wie man mit den Periodizitäts-Problemen von den Winkelfunktionen umgeht.

Gruß
Marco

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von as_string: 23.04.2015 16:26.

23.04.2015 16:25 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Whitey
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich denke xy Achse werden mit dem Schnittpunkt am Standort des Krans auf dem Baugelände abgelegt und der Findling ist beliebig platziert, dann entweder in Sektor 1,2,3 oder 4. Der Input soll wohl die Koordinate des Findlings sein und der Output der Winkel, wobei der Ausleger sich natürlich in die Richtung drehen soll, die näher am Findling dran ist.

Aber ich verzweifle daran wirklich. Es ist für mich in einem unschaffbaren Bereich.

Danke schonmal für deine Überlegungen, das kann ich alles sehr gut nachvollziehen.

Gruß,

Whitey
23.04.2015 17:30
Whitey
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hier ein Bild.

Whitey hat dieses Bild (verkleinerte Version) angehängt:
Unbenannt.png

23.04.2015 20:38
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Verstehe ich das richtig, dass der Kran an (450/400) ist und du ihn so drehen willst, dass er ein Objekt von z.B. (500/50) aufnehmen kann?
[latex]\Delta x = 50, \Delta y = 350[/latex]
Dann einfach den Winkel berechnen über [latex]\varphi = \arctan\left(\frac{\Delta y}{\Delta x}\right)[/latex]
Das funktioniert für den ersten und vierten Quadranten. Ansonsten musst du eben noch umrechnen.

__________________
Syntax Highlighting fürs Board (Link)
24.04.2015 17:02 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ehrlich gesagt, habe ich es immer noch nicht ganz verstanden, was gesucht ist... Der Kran hat ja sicher schon eine Drehung. Soll dann berechnet werden, ob er sich "am Besten" nach links oder nach rechts dreht und um welchen Winkel dann?

Ansonsten: Das Problem beim Arctan ist ja, dass der Bruch [latex]\frac{\Delta y}{\Delta x}[/latex] sehr groß wird, wenn [latex]\Delta x[/latex] klein ist, sprich, wenn man in die Nähe ±90° kommt. Und genau bei ±90° hätte man sogar eine "Division by zero", wenn man einfach nur stur die Formel anwenden würde.
Ich könnte mir vorstellen, dass da die numerische Genauigkeit darunter leidet, wenn man die Arctan Funktion mit sehr großen Werten "füttert".

Deshalb würde ich vorschlagen, dass man immer nur bis zu 45° geht. Wenn [latex]\Delta y > \Delta x[/latex], würde ich die beiden für die Berechnung vom arctan vertauschen. Dann musst Du allerdings wieder darauf achten, dass Du den Winkel natürlich in diesem Fall "nachkorrigieren" musst.

Dann ist die Frage, ob Du den Winkel im Berech von -180° bis +180° raus bekommen möchtest oder von 0° bis 360°. Ich gehe mal von -180° bis +180° aus, weil es eigentlich eher gebräuchlich ist, würde ich sagen.

Dann können wir uns eine Tabelle machen, was wir raus bekommen würden, wenn wir einfach nur arctan(y/x) anwenden würden für x>y und arctan(x/y) für x<y:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
      soll        |         ist         |  Argument | Korrektur
   0° -    45°    |       0° -   45°    |    y/x    |   OK
  45° -    90°    |      45° -    0°    |    x/y    |   90° - alpha
  90° -   135°    |       0° -  -45°    |    x/y    |   90° - alpha
 135° -   180°    |     -45° -    0°    |    y/x    | alpha + 180°
-180° -  -135°    |       0° -   45°    |    y/x    | alpha - 180°
-135° -   -90°    |      45° -    0°    |    x/y    |  -90° - alpha
 -90° -   -45°    |       0° -  -45°    |    x/y    |  -90° - alpha
 -45° -     0°    |     -45° -    0°    |    y/x    |   OK


Falls man C oder C++ verwendet, hat man eine Funktion atan2, die das schon alles so macht. Sie nimmt gleich zwei Argumente entgegen, die y und x entsprechen. Das scheint also ein häufig auftretender Fall zu sein, wenn das gleich in die C-Standard-Bibliothek aufgenommen wurde.
Ich weiß nicht aus dem Stehgreif, wie es in anderen Programmiersprachen ist.

Ich habe mal ein kleines C++-Programmchen gemacht, das die obige Tabelle umsetzt und einige Wert-Paare durch probiert. Außerdem vergleicht es das Resultat mit dem von atan2() zur Kontrolle:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
#include <iostream>
#include <math.h>

using namespace std;

double coords2angle(double, double);

void testCoords2angle(double, double);

int main() {
    testCoords2angle( 1,  0);
    testCoords2angle( 1,  1);
    testCoords2angle( 0,  1);
    testCoords2angle(-1,  1);
    testCoords2angle(-1,  0);
    testCoords2angle(-1, -1);
    testCoords2angle( 0, -1);
    testCoords2angle( 1, -1);
    testCoords2angle(-1,  2);
    testCoords2angle(-2,  1);
    testCoords2angle(-2, -1);
    testCoords2angle(-1, -2);
    testCoords2angle( 1, -2);
    testCoords2angle( 2, -1);
}

void testCoords2angle(double x, double y) {
    cout << "x: " << x << "; y: " << y << "; Winkel: " << coords2angle(x, y) * 180/M_PI << "; sollte laut atan2() sein: " << atan2(y, x) * 180/M_PI << endl;
}

double coords2angle(double x, double y) {
    double angle;
    if(fabs(y) > fabs(x)) {
        angle = ((y > .0) ? M_PI/2 : -M_PI/2) - atan(x/y);
    }
    else {
        angle = atan(y/x);
        if(x < .0)
            if(y >= .0)
                angle += M_PI;
            else
                angle -= M_PI;
    }

    return angle;
}


Die Ausgabe ist:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
x: 1; y: 0; Winkel: 0; sollte laut atan2() sein: 0
x: 1; y: 1; Winkel: 45; sollte laut atan2() sein: 45
x: 0; y: 1; Winkel: 90; sollte laut atan2() sein: 90
x: -1; y: 1; Winkel: 135; sollte laut atan2() sein: 135
x: -1; y: 0; Winkel: 180; sollte laut atan2() sein: 180
x: -1; y: -1; Winkel: -135; sollte laut atan2() sein: -135
x: 0; y: -1; Winkel: -90; sollte laut atan2() sein: -90
x: 1; y: -1; Winkel: -45; sollte laut atan2() sein: -45
x: -1; y: 2; Winkel: 116.565; sollte laut atan2() sein: 116.565
x: -2; y: 1; Winkel: 153.435; sollte laut atan2() sein: 153.435
x: -2; y: -1; Winkel: -153.435; sollte laut atan2() sein: -153.435
x: -1; y: -2; Winkel: -116.565; sollte laut atan2() sein: -116.565
x: 1; y: -2; Winkel: -63.4349; sollte laut atan2() sein: -63.4349
x: 2; y: -1; Winkel: -26.5651; sollte laut atan2() sein: -26.5651

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von as_string: 25.04.2015 14:12.

25.04.2015 14:11 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Struktogramm und Algorithmus für Bauingeniuersinformatik