1

aus Tabelle einen spezifischen Wert ermitteln

hallo liebes Forum! 
folgende Frage hätte ich an euch: 

ich habe eine Tabelle mit der Koordinate X und der Abweichung dX dieser Koordinate X zu einem Punkt P. Die Tabelle kann zB wie in dem Screenshot aussehen: 

Die Fragestellung wäre nun wie folgt:
1. suche für alle negativen dX Werte jene Koordinate X, wo dX ein Maximum ist  
2. suche für alle positiven dX Werte jene Koordinate X, wo dX ein Minimum ist

Die im Bild grün markierten Koordinaten wären die Richtigen, also im Falle des linken Bildes: X=1 und X=5, im rechten wäre es: X=1 und X=4. 

Ich habe eine Lösung, aber die ist zu umständlich, da muss es doch einen kurzen Weg geben. 

Danke für eure Inputs! 

liebe Grüße 

Michael

7 Antworten

null
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Michael. Ob diese Lösung weniger umständlich ist, mußt Du entscheiden.

    let minDX := min((select TABELLE)[dX > 0].dX);
    let maxDX := max((select TABELLE)[dX < 0].dX);
    let maxX := first((select TABELLE)[dX = maxDX].X);
    let minX := first((select TABELLE)[dX = minDX].X);
    "Maximum negative Zahlen bei " + maxX + " Minimum positve Zahlen bei " + minX;
    
      • m2apla gmbh
      • Etienne_Scherrer
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko Um die Performance ein wenig zu optimieren würde es sich lohnen das Select nur einmal auszuführen und dann nur noch die Bedingungen zu ändern:

      let selection := (select TABELLE);
      let minDX := min(selection[dX > 0].dX);
      let maxDX := max(selection[dX < 0].dX);
      let maxX := first(selectiondX = maxDX].X);
      let minX := first(selection[dX = minDX].X);
      "Maximum negative Zahlen bei " + maxX + " Minimum positve Zahlen bei " + minX;
      
      • mirko3
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Etienne Scherrer Danke Dir. Schöne Optimierung und sicher hilfreich bei großen Datenmengen.

      • 46wcxg
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko hallo Mirko, vielen Dank! Funktioniert und ist in der Tat effizienter und vor allem schöner! Ich hatte die Tabelle nach Vorzeichen in 2 Arrays aufgeteilt und dann mit if ... den größeren/kleineren Wert gesucht.... 
      Danke dir! 

      • 46wcxg
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Etienne Scherrer hallo Etienne, danke für deine Verbesserung! Tolle Lösung von Mirco und dir! Freu mich sehr! 

    • Maurice
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo,

    das sieht nach Matheunterricht Hinführung zum Ableitungsbegriff aus.

    Frage inhaltlicher Art: nach dem dargestellten Code wird ja der erste X-Wert mit der kleinsten Abweichung ausgegeben. Kann es nicht sinnvoll sein, sich das Array aller X-Werte mit der kleinsten Abweichung ausgegeben zu lassen?

      • 46wcxg
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Maurice 😀 nein, kein Matheunterricht mit Hinführen zur Differentialrechnung... 

      Mathematischer Hintergrund ist zu prüfen, ob ein Punkt innerhalb eines Polygons liegt, das von 4 Geraden (bestimmt durch 4 Punkte) gebildet wird.
      Dazu berechne ich die Schnittpunkte einer horizontalen und vertikalen Geraden durch den zu prüfenden Punkt P(xy) mit den 4 Geraden.  Die horizontale Gerade schneidet die 4 Geraden in 4 Punkten, detto die vertikale. Wenn der Punkt P(xy) innerhalb des Polygons liegt, dann hat er einen minimalen positiven und einen max. negativen Abstand zu den Schnittpunkten. Liegt er außerhalb, sind alle Differenzpunkte entweder negativ oder positiv und es gibt nur einen min/max. 
      Zu deiner Frage: ich suche nur jeweils 2 x und 2 y Werte, je einen links und einen rechts vom zu prüfenden Punkt P(xy), bzw einen oberhalb und einen unterhalb. 
      Prüfung: wenn P(x) > minX und P(x) > maxX  und P(y) > minY und P(y) < maxY dann liegt er im Polygon.
      Daher brauche ich nicht das ganze Array, ich brauch diese 4 Werte. 
      LG