X und Y Schritte automatisch einstellen (Funktionsgraph)

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    X und Y Schritte automatisch einstellen (Funktionsgraph)

    Hi,

    habe nun fast meinen Funktionsgraph für meinen Taschenrechner fertig, benötige nur noch Hilfe bei einer kleinen Sache:

    Ich habe nun x PointD Strukturen (sind genau wie Point strukturen nur statt Integer haben Sie Double Properties), diese geben den X und Y Punkt (bspweise 1/2 für x1 und y2 aufm Funktionsgraph) auf meinem Funktionsgraph an und ich benötige nun eine Formel mit der Ich jedesmal so große Abstände habe, dass alle Werte auf dem Funktionsgraphen angezeigt werden können und gleichzeitig nicht so große dass nur noch ein kleiner Fleck von der Funktionkurve zu sehen ist.
    Habe es erstmal versucht, alle X Koordinaten der Strukturen aus der Liste zusammen zu addieren und durch die anzahl zu teilen (halt arithmetisches mittel), doch bei Aufgaben die bspweise sowohl negative X Werte als auch positive haben, werden die Abstände viel zu klein.

    Es werden immer jeweils 16 Zahlen in der X (8 negative, 8 positive) und 16 Zahlen in der Y (8 negative, 8 positive) Achse angezeigt und ich benötige nun eine Funktion die mir einen Schrittabstand (wie step bei der for schleife) zurückgibt und dabei berücksichtigt, dass alle Punkte in der PointD Struktur drauf abgebildet werden aber die Abstände trotzdem nicht zu groß werden.

    Hätte jemand eine andere Idee?

    RushDen schrieb:

    dass alle Werte auf dem Funktionsgraphen angezeigt werden können
    Bestimme Min und Max und skaliere das entsprechend Deinem Control.
    Das ganze heißt Dreisatz.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dann ists aber blöd, weil wenn Ich die Schrittweite auf die größte Zahl (also ohne Vorzeichen zu berücksichtigen) / 8 (weil 0 ist in der Mitte) einstelle, dann kommt bei Beispielweise diesen x Werten in der Funktion:

    1
    2
    3
    4

    beim Graphen X Werte wie 0,96 bei raus (und runden will ich nicht, weils die ergebnisse verfälschen kann).

    Das ist dann die Stelle:

    Dim avgY = allPoints.Select(Function(item) item.Y).Max / 8
    Dim avgx = allPoints.Select(Function(item) item.X).Max / 8
    Dim minX = allPoints.Select(Function(item) item.X).Min / 8
    Dim minY = allPoints.Select(Function(item) item.Y).Min / 8
    ...
    If Math.Abs(minX) > avgx Then .XLineStep = minX Else .XLineStep = avgx
    If Math.Abs(minY) > avgY Then .YLineStep = minY Else .YLineStep = avgY

    allPoints befinden sich alle Punkte relativ zu den Achsen der Funktionsgraphen.
    XLineStep ist die Schrittweite für die X Achse des Funktionsgraphen
    und YLineStep die für die Y Achse

    RushDen schrieb:

    und runden will ich nicht
    Jegliche (Vektor-)Bildinformation wird zur Darstellung auf ganze Pixel gerundet.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist aber eine Koordinate zum Funktionsgraphen, also bspweise x = 2; y = 2 wäre die Position 2 auf dem Funktionsgraphen (das wird dann zu bildkoordinaten umgerechnet),
    wenn ich das jetzt von bspweise 2,5 auf 3 runden würde, würden da größere abweichungen kommen auch beim umrechnen, weil das ergebniss auch angepasst werden müsste.

    Habe das Problem aber schon gelöst, ich update gleich den Taschenrechner Thread dort ist das dann zu sehen.