Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Abstand zweier Winkel berechnen

  1. #1
    Registriert seit
    13.03.2007
    Ort
    Nürnberg
    Beiträge
    559
    Danke
    56
    Erhielt 50 Danke für 45 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Da nun das eine Problem gelöst ist, kommt doch schon das nächste.

    Folgende Funktion stellt fest ob ein Winkel +90 oder -90 Grad vom ersten nicht überschreitet.
    Die Frage ist: geht das einfacher? (mit sin,cos..)
    Die Winkel sind 0.0 .. 360.0 Grad. Jede Kombination möglich.

    Vorzugsweise möchte ich wissen ob der Abstand weniger als (Grenzwert: 0..180) ist.
    Ob links oder rechts ist dabei egal.

    In diesen Code ist der Grenzwert: 90.0 Grad.

    Code:
    in    WinkelAlt    INT            
    in    WunkelJetzt    INT            
    out    isOK    BOOL
    
          L     #WinkelAlt
          L     L#90
          -D    
          T     #x1
    
          L     #WinkelAlt
          L     L#90
          +D    
          T     #x2
    
          L     #x1
          L     L#0
          >=D                               // 0...360
          SPB   Ue0
    
          L     #WinkelAlt
          L     L#90
          -D    
          L     L#360
          +D    
          T     #x1
          SPA   ck2
    
    Ue0:  L     #x2
          L     L#360
          <=D   
          SPB   ck                          // bis 360
    
          L     #WinkelAlt
          L     L#90
          +D    
          L     L#360
          -D    
          T     #x2
    
          L     #WinkelAlt
          L     L#90
          -D    
          T     #x1
    
    ck2:  O(    
          L     #WunkelJetzt
          L     #x1
          >=D   
          )     
          O(    
          L     #WunkelJetzt
          L     #x2
          <=D   
          )     
          =     #isOK
          BEA   
    
    ck:   U(    
          L     #WunkelJetzt
          L     #x1
          >=D   
          )     
          U(    
          L     #WunkelJetzt
          L     #x2
          <=D   
          )     
          =     #isOK
          BE
    BTW: der Wetterochs.de hat mal eine Formel gepostet mit der ein Abstand zweier Punkte auf einer Kugel berechnet wird. EIN SUPER SUPER MONSTER an cos sin quadrat wurzel hoch 3 ......
    4 Zeilen Lang !
    Kabelsalat ist Gesund
    (vom CCC abgekupfert)

    Prognosen sind schwierig,
    besonders wenn sie die Zukunft betreffen.
    (Ursprung nicht wirklich bekannt)


    Zitieren Zitieren Abstand zweier Winkel berechnen  

  2. #2
    Registriert seit
    13.03.2007
    Ort
    Nürnberg
    Beiträge
    559
    Danke
    56
    Erhielt 50 Danke für 45 Beiträge

    Standard

    es scheint dieses funktioniert:

    ' abs( { [ abs(a - b) + 180 ] % 360 } - 180 )
    Kabelsalat ist Gesund
    (vom CCC abgekupfert)

    Prognosen sind schwierig,
    besonders wenn sie die Zukunft betreffen.
    (Ursprung nicht wirklich bekannt)


    Zitieren Zitieren Lösung zum Probelm  

  3. #3
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Hallo Senator,

    was verstehst du denn unter "Abstand zweier Winkel"? Du willst das Winkelmaß in "Grad" als Ergebnis? Und dabei das kleinere Ergebnis der beiden möglichen Lösungen?

    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  4. #4
    Registriert seit
    13.03.2007
    Ort
    Nürnberg
    Beiträge
    559
    Danke
    56
    Erhielt 50 Danke für 45 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Hallo Senator,

    was verstehst du denn unter "Abstand zweier Winkel"? Du willst das Winkelmaß in "Grad" als Ergebnis? Und dabei das kleinere Ergebnis der beiden möglichen Lösungen?

    Gruß, Onkel
    na da selbe wie:
    x1 = 10; x2 = 30; abstand = ABS( x1 - x2 );

    Aber mit Winkel !

    Bsp 1.
    eine Welle steht bei 45 Grad; x1 = 45;
    dann bei 120 Grad; X2 = 120;
    also ist sie 120 - 45 = 75 Grad wo anders.

    Bsp 2.
    eine Welle steht bei 350 Grad; x1 = 350;
    dann bei 220 Grad; X2 = 220;
    also ist sie 350 - 220 = 130 Grad wo anders.

    Bsp 3.
    eine Welle steht bei 350 Grad; x1 = 350;
    dann bei 20 Grad; X2 = 20;
    also ist sie f(350;20) = 30 Grad wo anders.

    Differenz der beiden Winkel; die (bei mir) 0..360 sein können
    Kabelsalat ist Gesund
    (vom CCC abgekupfert)

    Prognosen sind schwierig,
    besonders wenn sie die Zukunft betreffen.
    (Ursprung nicht wirklich bekannt)



  5. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Code:
    FUNCTION "Winkelabstand" : VOID
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      WinkelAlt : INT ;           //0-360°
      WinkelJetzt : INT ;         //0-360°
      Grenzwert : INT ;           //0-180°
    END_VAR
    
    VAR_OUTPUT
      Abstand : INT ;             //0-180°
      IsOK : BOOL ;    
    END_VAR
    
    
    BEGIN
    
    NETWORK
    TITLE =Winkelabstand
           L     #WinkelAlt; 
           L     #WinkelJetzt; 
           <I    ;                //Größerer Winkel in Akku1?
           SPBNB _001; 
           TAK   ;                //Größeren Winkel in Akku1
    _001:  -I    ;                //Differenz
           L     180; 
           TAK   ;                //Differenz zurück in Akku1
           <I    ;                //wenn Differenz größer als 180, dann
           SPBNB _002; 
           L     360; 
           TAK   ; 
           -I    ;                //Differenz von 360 abziehen
    _002:  T     #Abstand;        //Ergebnis speichern
           L     #Grenzwert; 
           <=I   ;                //Innerhalb Grenzwert?
           =     #IsOK; 
    
    END_FUNCTION
    Geändert von hucki (14.08.2012 um 18:50 Uhr) Grund: Kommentar korrigiert

  6. #6
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Aha, dann habe ich es trotz deiner Vorlagen doch richtig gedeutet.
    Dann berechne doch einfach die absolute Differenz, wie du es schon tust. Wenn diese Differenz >180 ist, dann subtrahiere das Ergebnis von 360. Ein Kreis ist immer rund und hat 360° .

    Code:
    y := ABS(a-b)
    if y > 180 then
       y := 360 - y
    end_if
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  7. #7
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Zitat Zitat von Senator42 Beitrag anzeigen
    ..Bsp 3.
    eine Welle steht bei 350 Grad; x1 = 350;
    dann bei 20 Grad; X2 = 20;
    also ist sie f(350;20) = 30 Grad wo anders.

    Differenz der beiden Winkel; die (bei mir) 0..360 sein können
    Schätze, ich lag wohl doch nicht richtig. Du suchst die Winkeländerung über der Zeit bzw. über der Drehbewegung!?
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  8. #8
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Schätze, ich lag wohl doch nicht richtig. Du suchst die Winkeländerung über der Zeit bzw. über der Drehbewegung!?
    Ich denke doch. Ich hab' das auch so verstanden, dass die beiden Punkte auf dem Kreis nicht mehr als 90° auseinander liegen dürfen. Dem entsprechen zumindest alle Beispiele und wir haben ja auch beide das gleiche Ergebnis. Nur einmal in AWL und einmal in SCL.

  9. #9
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Zitat Zitat von Senator42 Beitrag anzeigen
    ..Differenz der beiden Winkel; die (bei mir) 0..360 sein können
    Die Frage zu formulieren ist in diesem Fall wahrscheinlich schwieriger als eine Lösung zu finden.
    Falls also die Differenz zwischen neuer und alter Position gesucht ist, dann vielleicht so:

    Code:
    y := b-a      // b: neue Position, a: alte Position
    if b<a then            // oder if y<0
      y := y + 360
    end_if
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  10. #10
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Senator42 Beitrag anzeigen
    ...
    Bsp 2.
    eine Welle steht bei 350 Grad; x1 = 350;
    dann bei 220 Grad; X2 = 220;
    also ist sie 350 - 220 = 130 Grad wo anders.
    ...
    @dagobert,
    ich denke immer noch, dass Deine erste Lösung die Richtige ist.
    Die Welle hat sich im zitierten Bsp. zwar um 230° bewegt, aber die Winkeldifferenz zur alten Position sind (-)130°.
    Und da das Plus oder Minus ihn nicht interessiert, ist m.M.n. Deine erste Formel die gesuchte Lösung:
    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    ...
    Code:
    y := ABS(a-b)
    if y > 180 then
       y := 360 - y
    end_if

Ähnliche Themen

  1. 270° Sub-D Winkel
    Von dondan im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 26.04.2011, 13:17
  2. 90°-Sub-D-Winkel? Woher bekommt man sowas?
    Von diabolo150973 im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 06.04.2009, 13:12
  3. PB Slave Abstand
    Von ssound1de im Forum Feldbusse
    Antworten: 3
    Letzter Beitrag: 24.02.2009, 06:51
  4. Abstand zwischen Schaltschränken
    Von HSThomas im Forum Schaltschrankbau
    Antworten: 4
    Letzter Beitrag: 08.03.2008, 21:38
  5. SUB-D Winkel 90°
    Von Markus im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 09.10.2005, 09:58

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •