Stützpunkte Einzeichnen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Stützpunkte Einzeichnen

    Hey ho,
    hab da ein kleines Problem.
    Ich will Stützpunkte einzeichnen, Aber irgentwie wandern mir die teile immer weg :(
    Denke mal das es ein mathematisches Problem ist welches ich einfach nicht erkenne..

    Hier der Quellcode der das ganze machen soll:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. For iwiw = 1 To 10
    3. DataGridView1.Rows.Add()
    4. DataGridView1.Rows(iwiw - 1).Cells(0).Value = iwiw
    5. DataGridView1.Rows(iwiw - 1).Cells(1).Value = iwiw ^ 2
    6. Next
    7. Me.Refresh()
    8. If DataGridView1.RowCount > 1 Then
    9. Draw(DataGridView1.RowCount)
    10. End If
    11. End Sub
    12. Private Sub Draw(ByVal Stützpunkte As Integer)
    13. imagee = New Bitmap(PictureBox1.Width, PictureBox1.Height)
    14. Dim peon As New Pen(Brushes.Firebrick, 1)
    15. PenBlue.Width = 2
    16. gr = Graphics.FromImage(imagee)
    17. gr.DrawImage(imagee, 0, 0, imagee.Width, imagee.Height)
    18. gr.Clear(PictureBox1.BackColor)
    19. gr.FillRectangle(Brushes.WhiteSmoke, MainForm.ClientRectangle)
    20. gr.DrawRectangle(peon, 0, 0, PictureBox1.Size.Width - 1, PictureBox1.Size.Height - 1)
    21. Dim X As Double = 54
    22. Dim i2 As Integer = 0
    23. For j = DataGridView1.Rows.Count - 2 To 0 Step -1
    24. Wertex(9 - j) = Convert.ToDouble(VB.Replace(DataGridView1.Rows(j).Cells(0).Value.ToString, ".", ","))
    25. Wertey(9 - j) = Convert.ToDouble(VB.Replace(DataGridView1.Rows(j).Cells(1).Value.ToString, ".", ","))
    26. Next
    27. While i2 < 10
    28. gr.DrawString(Wertex(9 - i2).ToString, f, pinsel, New Point(Convert.ToInt32(X) - 34, PictureBox1.Height - 25))
    29. gr.DrawLine(Pens.Blue, New Point(Convert.ToInt32(X), PictureBox1.Height - 30), New Point(Convert.ToInt32(X), 1))
    30. i2 += 1
    31. X += (PictureBox1.Size.Width - 56) / 9
    32. End While
    33. X = PictureBox1.Size.Height - 2 - 50
    34. i2 = 0
    35. While i2 < 10
    36. gr.DrawString(Wertey(9 - i2).ToString, f, pinsel, New Point(5, Convert.ToInt32(X) - 17))
    37. gr.DrawLine(Pens.Blue, New Point(10, Convert.ToInt32(X)), New Point(PictureBox1.Width - 2, Convert.ToInt32(X)))
    38. i2 += 1
    39. X -= (PictureBox1.Size.Height - 80) / 9
    40. End While
    41. Dim Y As Double
    42. For i = 0 To 9
    43. X = ((Wertex(i) - Wertex(9)) / (Wertex(0) - Wertex(9))) * (PictureBox1.Width - 56)
    44. Y = ((Wertey(i) - Wertey(9)) / (Wertey(0) - Wertey(9))) * (PictureBox1.Height - 80)
    45. gr.DrawLine(Pens.Red, Convert.ToInt32(X) + 54, (PictureBox1.Height - 52) - Convert.ToInt32(Y) + 2, Convert.ToInt32(X) + 50, (PictureBox1.Height - 52) - (Convert.ToInt32(Y) + 3))
    46. Next
    47. imagee.Save(My.Application.Info.DirectoryPath & "\Temp.png", System.Drawing.Imaging.ImageFormat.Png)
    48. PictureBox1.Image = imagee
    49. End Sub


    Ist nicht perfect und sicher unnötige Sachen drin usw. ist ja auch noch nicht fertig, von daher bitte nur auf das Problem und nicht auf die schönheit eingehen :rolleyes:

    Anbei noch ein Bild was dabei ensteht. Hoffe das reicht an Infos und Quellcode sonst meckert halt :D
    Wie soll es denn aussehen, wenn es richtig funktioniert?
    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!

    Zim schrieb:

    hab da ein kleines Problem.
    Ich will Stützpunkte einzeichnen, Aber irgentwie wandern mir die teile immer weg :(

    Hmm. Auf dem Bild sehe ich keine Stützpunkte wandern. Sind ein bischen klein, ja, aber wandern tun sie nicht. Also was meinst du?

    Ach wenn du dich mit was aufwändigem erschlagen möchtest, guggemol Ownerdrawn ChartControl

    Ah - ich sehe grade, deine Y-Achse ist unkonventionell beschriftet - ist das iwie logarythmisch abgestuft?

    Eistee schrieb:

    Ich denke ermeint die Zahlen auf der X-Achse.
    Sehen irgendwie verschoben aus.
    Dem kann man abhelfen:

    VB.NET-Quellcode

    1. i2 = -1 ' dies hier rein
    2. While i2 < 10
    3. gr.DrawString(Wertex(9 - i2).ToString, f, pinsel, New Point(Convert.ToInt32(X) - 34, PictureBox1.Height - 25))
    4. gr.DrawLine(Pens.Blue, New Point(Convert.ToInt32(X), PictureBox1.Height - 30), New Point(Convert.ToInt32(X), 1))
    5. i2 += 1
    6. X += (PictureBox1.Size.Width - 56) / 9
    7. End While
    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!
    Also das Problem sind die Y-Werte. Die sollten eigentlich immer die Y-Linien treffen.

    Die x Werte sind ja von 0 bis 10 und die trifft er ja.
    Die y Werte sind von 1 bis 100 und die trifft er halt nicht.

    Der sollte also bei y bei 1, 4, 9, 16 usw landen.

    Die roten Striche sind die Stützpunkte. Und die sollen schief sein damit man diese besser sehen kann.

    Die Beschriftung entspricht den x und y Werten ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Zim“ ()

    Da musst Du halt die y-Positionen der y-Textwerte mit einem negativen Offset belegen.
    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!
    Ne nicht die Beschriftung die passt so.
    Die stützen später eine Berechnung/Kurve ;)
    Aber bevor ich das da einbauen kann muss ich Werte richtig einzeichnen können.
    Ja im mom ist das eine Diagonale, aber später halt nicht mehr. Mit der Diagonalen kann man halt gut Testen ob er richtig einzeichnet ;)

    VB.NET-Quellcode

    1. While i2 < 10
    2. gr.DrawString(Wertey(9 - i2).ToString, f, pinsel, New Point(5, Convert.ToInt32(X) - 7)) ' -17 -> -7
    3. gr.DrawLine(Pens.Blue, New Point(10, Convert.ToInt32(X)), New Point(PictureBox1.Width - 2, Convert.ToInt32(X)))
    4. i2 += 1
    5. X -= (PictureBox1.Size.Height - 80) / 9
    6. End While
    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!
    naja, die Y-Scala: 1, 4, 9, 16, ... ist das Quadrat der natürlichen Zahlen - ich bin mir nicht sicher, aber das könnte eine logarythmische Progression sein. Da muß man dann die Y-Werte der Punkte iwie skalieren.

    Aber ich halte mich da raus, weil mit DatagridViewZellen mag ich nicht rechnen.
    ^^ Ne wo es steht ist richtig blos es steht das falsche da ;)
    es muss von 0 bis 100 da stehe, also 0, 10, 20 ,...

    Hier nu gehts :)


    @ ErfinderDesRades
    Das ist zufall das es diese werte sind ich wollte einfach iwelche haben die einfach nicht 1 2 3 4 sind

    VB.NET-Quellcode

    1. DataGridView1.Rows(iwiw - 1).Cells(1).Value = iwiw ^ 2


    ;)