Programm zur Berechnung eines Gesamtschwerpunktes

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Skybreaker.

    Programm zur Berechnung eines Gesamtschwerpunktes

    Hallo @ all,


    da ich relativ neu im VB Programmieren bin, wende ich mich nun an euch:

    Mein Vorhaben - Ein Programm zu schreiben, welches den Gesamtschwerpunkt mehrerer Güter und die benötigte Vorspannkraft ausrechnet.

    Wie weit bin ich?

    Ich bin an dem Punkt angelangt, wo die Berechnung für den Gesamtschwerpunkt stattfinden soll.

    Hier ist mein Problem:

    VB.NET-Quellcode

    1. Dim gueter As Integer
    2. gueter = Anzahl_Gueter.Text - 1
    3. Dim gewicht(gueter) As TextBox
    4. Dim lblgut(gueter) As Label
    5. Dim groesse(gueter) As TextBox
    6. For i = 0 To gueter Step 1
    7. gewicht(i) = New TextBox
    8. gewicht(i).Name = "gewicht" & i
    9. gewicht(i).Text = "Gewicht Ladung" & i + 1
    10. gewicht(i).Location = New Point((i * 175), 60)
    11. gewicht(i).Size = New System.Drawing.Size(100, 50)
    12. groesse(i) = New TextBox
    13. groesse(i).Name = "groesse" & i
    14. groesse(i).Text = "Größe Ladung" & i + 1
    15. groesse(i).Location = New Point((i * 175), 120)
    16. groesse(i).Size = New System.Drawing.Size(100, 50)
    17. lblgut(i) = New Label
    18. lblgut(i).Name = "lblgut" & i
    19. lblgut(i).Text = "Ladung " & i + 1 & ". Gewicht in KG"
    20. lblgut(i).Location = New Point((i * 175), 30)
    21. lblgut(i).Size = New System.Drawing.Size(150, 50)
    22. GesSchwPkt_2.Controls.Add(groesse(i))
    23. GesSchwPkt_2.Controls.Add(gewicht(i))
    24. GesSchwPkt_2.Controls.Add(lblgut(i))
    25. Next
    26. GesSchwPkt_2.Show()


    Durch diesen Code, wird durch eine im vorherigen Frame gegebene Anzahl an Feldern erzeugt.

    Nachdem diese Felder ausgefüllt wurden, möchte ich im folgenden Code diese Felder in Variablen einlesen und die Berechnung ausführen.

    VB.NET-Quellcode

    1. Dim gueter_anzahl As Integer
    2. gueter_anzahl = GesSchwPkt_1.Anzahl_Gueter.Text
    3. Dim label_test As New Label
    4. label_test.Text = gueter_anzahl
    5. label_test.Location = New Point(600, 300)
    6. label_test.Size = New System.Drawing.Size(100, 50)
    7. Me.Controls.Add(label_test)


    Jedoch weiß ich nicht, wie ich im letzten Frame auf die Variablen im zweiten Frame zugreifen kann, obwohl die Felder im letzten Frame erzeugt werden.

    Kann mir da jemand von euch helfen?
    Fang an mit Option Strict On und gugst Du hier.
    Dann: Trenne GUI und Daten, speichere niemals Rechen-Werte in Controls, diese dienen der Anzeige und Eingabe von Daten.
    Weißt Du, wie Du einen Schwerpunkt berechnen musst?
    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!

    LaMiy schrieb:

    so wie ich Rod kenne
    Soooo gut kennst Du mich noch nicht. :thumbsup:
    Ich habe im Eröffnungspost nix dergleichen gefunden und wollte erst mal nachhaken, zumal der Thread so betitelt ist.
    @Skybreaker: Wo genau liegen die Probleme?
    Ich halte es für suboptimal, Controls in solcher Anzahl dynamisch zu erzeugen.
    Wie sieht denn Dein Design aus?
    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!
    echt? wolltest du garnet wissen?

    weil ich hätts wissen wollen. Ihr wisst ja: mein Datenmodell-Tick.
    Für sone Berechnung des gemeinsamen Schwerpunkts muß man ja allerlei Input-Daten aufnehmen, also die mathematischen Ausgangswerte - und da gibts auch mehrere Möglichkeiten.

    Jedenfalls alle diese Ausgangswerte muß man schön in einem Datenmodell organisieren, dann ist das Ausrechnen (nicht dassich wüsste, wie das geht) nurnoch ein Klacks.
    Ein Random Fact zum Schwerpunkt, weil's gerade so schön ist: Dabei handelt es sich nicht, wie man vielleicht denken könnte, um den Punkt, der die Summe der gewichteten Abstände zu den einzelnen Lasten minimiert, sondern um denjenigen Punkt, der die Summe der quadrierten und danach gewichteten Abstände minimiert. Okay, Mathe-Modus aus...

    ErfinderDesRades schrieb:

    echt? wolltest du garnet wissen?
    Nö, ich weiß, wie der Schwerpunkt berechnet wird.
    Die Problembeschreibung sieht mir so schräg aus, dass sie iwie nicht zu einem Schwerpunkt passt.
    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 zur Berechnung des Gesamtschwerpunktes benötige ich mehrere Angaben (wer hätte es gedacht):

    Für jedes Gut das Gewicht und die Größe (länge in Metern).

    Die Formel sieht folgendermaßen aus:

    Gesamtschwerpunkt = ((Gewicht_Ladung1*(Größe_Ladung1 / 2))+(Gewicht_Ladung2*(Größe_Ladung1 + (Größe_Ladung2 / 2)))+Gewicht_Ladung3*(Größe_Ladung1+Größe_Ladung2+(Größe_Ladung3 / 2))) / (Gewicht_Ladung1 + Gewicht_Ladung2 + Gewicht_Ladung3)) - Kann sein dass ich i-wo eine oder zwei Klammern zuviel habe^^

    Dies ist eigentlich das, womit wir in der Berufsschule mit Taschenrechner rechnen - womit allerdings einige Ihre Probleme haben.

    Habe mir jetzt gedacht: Ok ich werde es so machen, dass maximal 4 Güter eingegeben werden können.

    Dann Prüfe ich die 4 Güter auf Benutzereingaben (Integer) und diejenigen die Gefüllt sind (mindestens 2 - sonst muss ich ja nicht rechnen) berechne ich mit der Angegebenen Formel in Teilberechnungen.


    Mein Problem ist nun, dass ich im Falle der dynamisch erstellten Felder, von der letzten Form aus nicht darauf zugreifen kann - weil sie ja nur theoretisch aber nicht fix existieren.
    also hier ist eine Eingabe für Längen und Gewichte.
    Datenmodell ist die Tabelle "Gut", und jedes Gut hat eine Länge und ein Gewicht - ganz einfach.
    Hier Bildle vom Dataset, gezeigt sind auch die Einstellungen der Länge-Property:

    • AllowDbNull.False: Ein Gut ohne Länge gibts nicht.
    • DataType.Double: Natürlich ist der Länge-Datentyp Double
    • DefaultValue=0: Standardmäßig wird von punktförmigen Ladungen ausgegangen (was zugegebenermaßen nicht ganz realistisch ist). Aber das schreibt schoma eine 0 in die Länge, wenn man ein neues Gut hinzufügt.


    Er rechnet auch schon was aus, aber was anneres als was du brauchst. :P
    Dateien

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Mal so für mich zum Verständnis:

    Skybreaker schrieb:

    Für jedes Gut das Gewicht und die Größe (länge in Metern).
    Reduziert sich bei Dir die "Größe" der Ladung auf deren Länge?
    Also eine 1-Dimensionale Projektion einer 3-Dimensionalen Realität?
    1. Wie darf ich mir das rein körperlich vorstellen?
    2. Dann wird die Lösung durch das Hebelgesetz exakt beschrieben:
    Kraftarm * Kraftweg = Lastarm * Lastweg (bzw. die differentielle Form davon).
    Die Position, für beide Seiten der Gleichung denselben Wert liefern, ist der Schwerpunkt.
    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!
    Moin moin,


    habe nun die erste Version fertig geschrieben - für euch auch mal zum ausprobieren :)

    @ Rod: Die Berechnung ist 1-Dimensional - Grund: Wir berechnen den Schwerpunkt rein zum Zweck der Ladungssicherung.
    Bei der Ladunssicherung hingegen rechnen wir mit den Reibbeiwerten, Beschleunigungswert sowie der Aufgebrachten Handkraft an einer Ratsche. Dadurch wird die benötigte Vorspannkraft zur Ladunssicherung sowie die Anzahl der benötigten Ratschen anhand der aufgebrachten Handkraft ermittelt.

    Die Formel sieht folgendermaßen aus:

    Benötigte Vorspannkraft = (((Beschleunigungswert - Gleitreibbeiwert) / Gleitreibbeiwert) * (Gewicht der Ladung / 1,5))
    Dateien
    • setup.exe

      (447,44 kB, 123 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Skybreaker“ ()

    Skybreaker schrieb:

    Die Formel sieht folgendermaßen aus:
    Da diese Formel keine "eigentliche Gleichung" ist, solltest Du noch dazu schreiben, in welcher Einheit dann das Ergebnis vorliegt.
    Ist Dein Problem ansonsten gelöst?
    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 Ergebnis des Gesamtschwerpunktes liegt in Metern vor - sprich die Entfernung von der Stirnwand des Trailers / Anhängers bis zum Schwerpunkt.

    Bei der Vorspannkraft ist die Einheit des Ergebnisses dN (Dekanewton), welches 1:1 Kg entspricht.

    Ansonsten habe ich es folgendermaßen gelöst:

    Anstatt eine variable Anzahl von Eingabemöglichkeiten erstellen zu lassen, gibt es maximal 4 Güter, die man verladen kann (in der Schule rechnen wir mit drei).

    Da diese 4 nun auch tatsächlich vorhanden sind und nicht erst in einer Schleife erzeugt werden, kann ich diese nun auch ohne Probleme Ansprechen.


    Danke an euch alle für eure Hilfe :)