Parabel immer an gleicher stelle

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von optz.

    Parabel immer an gleicher stelle

    Hi,

    Ich habe mir den Code zum, Zeichnen einer Parabel von Hier geholt und minimal verändert. JEtzt sieht er so aus:

    VB.NET-Quellcode

    1. If RadioButton1.Checked Then
    2. f = CDbl(TextBox1.Text) * X ^ CDbl(TextBox2.Text) + CDbl(TextBox3.Text) * X + CDbl(Textbox4.Text)
    3. ElseIf RadioButton2.Checked Then
    4. f = CDbl(TextBox5.Text) * X ^ CDbl(TextBox6.Text) + CDbl(TextBox7.Text) * X + CDbl(TextBox8.Text)
    5. ElseIf RadioButton3.Checked Then
    6. f = CDbl(TextBox9.Text) * X ^ CDbl(TextBox10.Text) + CDbl(TextBox11.Text) * X + CDbl(TextBox12.Text)
    7. ElseIf RadioButton4.Checked Then
    8. f = CDbl(TextBox13.Text) * X ^ CDbl(TextBox14.Text) + CDbl(TextBox15.Text) * X + CDbl(TextBox16.Text)
    9. End If


    VB.NET-Quellcode

    1. Dim Zahl1 As Double = 0
    2. Dim Zahl2 As Double = 0
    3. Zahl1 = AutoX()
    4. Zahl2 = AutoY()
    5. Dim q As Double = Zahl1
    6. Do Until q >= Zahl2
    7. q = q + 1
    8. Loop
    9. q = Zahl1
    10. Dim x1, x2, y1, y2 As Double
    11. Dim a1, a2, b1, b2, c1, c2 As Double
    12. Do Until q > Zahl2
    13. x1 = q
    14. y1 = f(q)
    15. q = q + 1
    16. x2 = q
    17. y2 = f(q)
    18. a1 = 280 - x1
    19. a2 = 280 - x2
    20. b1 = 280 + x1
    21. b2 = 280 + x2
    22. c1 = 280 - y1
    23. c2 = 280 - y2
    24. Dim z As Graphics = PictureBox1.CreateGraphics
    25. z.DrawLine(Pens.Black, CSng(a1), CSng(c1), CSng(a2), CSng(c2))
    26. z.DrawLine(Pens.Black, CSng(b1), CSng(c1), CSng(b2), CSng(c2))
    27. Loop


    VB.NET-Quellcode

    1. Private Function AutoX() As Double
    2. Return -CDbl(TextBox3.Text) / 2
    3. End Function


    VB.NET-Quellcode

    1. Private Function AutoY() As Double
    2. Dim x As Double = CDbl(TextBox3.Text) / 2
    3. x = x ^ 2
    4. Return (CDbl(Textbox4.Text) - x)
    5. End Function


    Leider wird die Parabel immer an der gleichen stelle in der Picturebox gezeichnet.
    Woran liegt das ?

    MfG
    optz

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

    optz schrieb:

    VB.NET-Quellcode

    1. Dim z As Graphics = PictureBox1.CreateGraphics
    1. Gemalt wird im Paint-Event, angestoßen wird das Malen bei Änderung eines Parameters mit PictureBox1.Invalidate().
    2. Trenne mal GUI und Daten. Mach Dir eine Prozedur, in der aus den Textboxen die Parameter rausgeholt werden.
    und
    3. Sieh Dir zunächst mal die numerischen Werte Deiner Lösung an:

    VB.NET-Quellcode

    1. Debig.WriteLine("x = {0}, y = {1}", xValue, yValue)
    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!
    Hab ich gemacht:
    Er malt trotzdem immer an der selben stelle.
    Ich habe mal die einfachte Parabel (F(x) = x²) genommen. Theoretich ist ja der Seitelpunkt bei (0|0). Dieser wird auch errechnet aber die Parabel wird trotzdem irgendwo gezeichnet.
    Ich habe mal ein Bild angehängt.

    MfG optz
    Bilder
    • Parabel.jpg

      22,49 kB, 1.233×682, 155 mal angesehen
    IN dem Fall ist die Parabel sehr winzig geworden.
    Aber hier mal ein paar Beispiele für die Ergebnisse:
    (Ich habe mir eine Funktion geschrieben um die Scheitelpunktsform zu errechnen. Ich benutze die selbe Rechnung wie um auf X und Y zu kommen.)
    Bilder
    • Bsp1.jpg

      41,57 kB, 1.238×720, 130 mal angesehen
    • Bsp2.jpg

      44,22 kB, 1.240×723, 156 mal angesehen
    • Bsp3.jpg

      44,78 kB, 1.238×721, 137 mal angesehen
    Ich hoffe ich habe diesmal das richtige ausgegeben.
    Die Punkte sind immer so: (x|y)
    Leider ist diesmal die Parabel bei einem Bild wieder mal winzig klein.
    Bilder
    • Bsp.jpg

      56,84 kB, 1.237×723, 148 mal angesehen
    • Bsp2.png

      70,09 kB, 1.241×722, 112 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „optz“ ()

    also die Punkte
    279,5 | 275,25
    278,5 | 270,25
    280,5 | 275,25
    281,5 | 270,25

    die liegen doch niemals auf einer Parabel - jedenfalls nicht in dieser Reihenfolge

    Kennst du eigentlich das Ausgabefenster, und die Debug.Print - Methode?

    Damit kannst du dir die Punkte sehr bequem ausgeben lassen, musst nicht so komische Messagboxen konstruiren, und kannst die Punkte auch noch mit Copy&Paste ins Forum pasten, sodass ich nicht vom Bildschirm abschreiben muß, um dich zu zitieren.

    optz schrieb:

    Hab ich gemacht:
    Exportiere und poste mal die gesamte Liste Deiner Werte oder füge sie selbst in Excel ein und lass Dir den Graphen anzeigen.
    Informiere Dich mal über das Skalieren einer Grafik.
    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!

    VB.NET-Quellcode

    1. z.DrawLine(Pens.Black, CSng(a1), CSng(c1), CSng(a2), CSng(c2))
    2. z.DrawLine(Pens.Black, CSng(b1), CSng(c1), CSng(b2), CSng(c2))


    Ich dachte das die Punkte so sind:
    (a1|c1), (a2|c2), (b1|c1), (b2|c2)

    Kennst du eigentlich das Ausgabefenster, und die Debug.Print - Methode?


    Ehm, wenn mir noch jemand sagt wo ich dann das Ergebnis finde.

    MfG
    optz
    oh, dann probier mal bischen mit deim VS rum.
    msdn.microsoft.com/de-de/library/3hk6fby3%28v=vs.90%29.aspx

    noch mehr so tricks auf Visual-Studio richtig nutzen




    Ich dachte das die Punkte so sind:
    (a1|c1), (a2|c2), (b1|c1), (b2|c2)
    nee - guck dir die System.Drawing.Point - Structure mal an, im ObjectBrowser.
    Dassis mit Point gemeint.