Announcement

Collapse
No announcement yet.

Kleine Erklärung bitte zu Grafik

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kleine Erklärung bitte zu Grafik

    Also wir lesen aus einer Datei Daten ein und sollen diese dann mit Drawlines und PointF zeichen so und da man ja vorher nicht weiß wie groß die Picturebox ist muß das ja angepasst werden

    [highlight=vbnet]
    Private Sub einpassen(ByVal Daten() As PointF, ByVal xmax As Single, ByVal ymax As Single)
    Dim i As Integer

    faktorx = PictureBox1.Width / xmax
    faktory = PictureBox1.Height / ymax

    For Each point As PointF In Daten
    Daten(i).X = CSng(Daten(i).X * faktorx)
    Daten(i).Y = CSng((-1) * Daten(i).Y * faktory)
    i = i + 1
    Next

    End Sub
    [/highlight]

    Das klappt so aber ich versteh es nicht ganz

    Kann mir wer bitte den Teil ab "For Each..." mal verständlich erklären.

    Vielen Vielen Dank
    Zuletzt editiert von gfoidl; 12.05.2009, 20:14. Reason: Code-Formatierung! (hinzugefügt) -> besser lesbar

  • #2
    Hallo,

    der Prozedur (kann auch als Methode bezeichnet werden) werden als Argument eine Liste von Punkten und der maximale X- und Y-Wert übergeben.

    Als erstes werden in der Methode Skalierungsfaktoren berechnet. Diese werden dann verwendet um die Punkte auf die Größe der Picturebox umzurechnen.

    Die ForEach-Schleife durchläuft jeden Punkt in der Liste - kommt vom englischen und bedeutet sinngemäß "für jeden".

    Die Schleife in deinem Beispiel würde ich jedoch umschreiben. In deinem Beispiel wird mit ForEach über die Punkte iteriert und zusätzlich eine Zählvariable verwendet. In deinem Fall werden die Punkte verändert (skaliert) und deshalb funktioniert nachstehender Code nicht, weil die Iterationsvariable nicht geändert werden darf:
    [highlight=vbnet]
    For Each point As PointF In Daten
    point.X = CSng(point.X * faktorx)
    point.Y = CSng((-1) * point.Y * faktory)
    Next
    [/highlight]

    Korrekt muss die Schleife so formuliert werden:
    [highlight=vbnet]
    For i As Integer = 0 To daten.Length - 1
    daten(i).X = daten(i).X * faktorx
    * * daten(i).Y = daten(i).Y * faktory * -1
    Next
    [/highlight]
    Im obigen Code-Beispiel wird die Schleife genau so oft durchlaufen wie die Punkt-Liste lang ist. Dabei wird über Daten(i) auf den jeweiligen Punkt der Liste zugegriffen und der X- und Y-Wert des Punktes mit dem errechneten Faktor multipliziert -> Skalierung. Zusätzlich wird der Y-Wert mit -1 multipliziert und somit wird das Bild auf den Kopf gestellt.

    Hoffe ich konnte dir helfen.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      ok das mit den Daten.lenght - 1 habe ich schon vorher so deklariert daher klappt das richtig

      nur was ich grad nicht verstehe ist warum du das csng komplett rausgenommen hast?

      Comment


      • #4
        Die CSng-Funktion konvert zum Datentyp Single. Da wir nur mit Single-Datentypen rechnen ist dieser Schritt überflüssig (hyperliquid ). Deshalb hab ich das entfernt.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment

        Working...
        X