Ein Rohrpfad auf die X-Achse ausrichten

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Higlav.

    Ein Rohrpfad auf die X-Achse ausrichten

    Hallo Forum...
    Ich möchte einen Rohrpfad auf die X-Achse ausrichten. (Längsachse einer Rohrbiegemaschine)
    Folgende Koordinaten habe ich:

    Punkt0:
    X0=0
    Y0=0
    Z0=0

    Punkt1:
    X1=0
    Y1=33,81
    Z1=9,06

    Punkt2:
    X2=-45,8
    Y2=149,31
    Z2=23,26

    Ich benötige also nach dem Ausrichten von Punkt zu Punkt die neuen XYZ Koordinaten.
    Hat jemand so etwas schon einmal umgesetzt oder eine Idee wie ich da vorgehen sollte?

    Vielen Dank jetzt schon für die Mühe und Gruß
    Andreas

    ABABC schrieb:

    wie ich da vorgehen sollte?
    Beschreib einfach mal, was das werden soll.
    Bis jetzt sind da 3 Punkte, die nicht auf einer Linie liegen und somit ein Dreieck bilden.
    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 sieht nach einem Rohr aus, das in 2 Ebenen gebogen werden soll. Richtig? Wobei 'ne Rohrbiegemaschine eigentlich immer nur eine Ebene kann - wie willst Du dann das schon gebogene Teil ausrichten?
    Bilder
    • kooerd.png

      34,3 kB, 233×256, 1.423 mal angesehen
    Das Leben ist nicht so kompliziert. Eine süsse Erinnerung tut's.
    Indiana Jocutus - Jäger des Variablen-Schatzes
    Hallo Zusammen
    Ersteinmal vielen Dank für die Antworten.
    Es ist so wie Jocutus es beschrieben hat ein Rohrpfad.

    Ich möchte vorhandene Koordinaten folgendermaßen ausrichten:
    Punkt0 ist der Startpunkt (auf den Koordinatenursprung).

    Punkt1 muss nun so ausgerichtet (verdreht) werden das nur ein Versatz in X+ Richtung vorhanden ist. (X = Wert Y=0 Z=0)

    Alle weiteren vorhandenen Punkte müssen nun mit den gleichen Winkeln wie Punkt1 "nachrücken".

    Hallo ABABC,

    Also ich komm' mit deinen Koordinaten zu folgendem Ergebnis.

    Inventor, Juhu!! :thumbsup:
    BTW: Wäre das jetzt nicht eher Off-Topic?
    Bilder
    • Unbenannt.PNG

      24,73 kB, 1.277×830, 205 mal angesehen
    Hallo Higlav
    es geht hier nicht um ein Inventorproblem! :)
    Ich möchte die Koordinaten für eine Rohrbiegemaschine aufbereiten.
    Etwa so:
    a) Eingabe der vorhandenen Koordinaten (kein Problem)
    b) Ausrichten auf X Achse (Berechnung)
    c) Ausgabe der neuen Koordinaten

    Gruß
    Andreas
    @ABABC: Letzten Endes hast Du doch nur die Rotation um jede einzelne Achse zu berechnen.
    Rotation um x, um y, um z.
    Mehr nicht, die Translation sollte hier nicht relevant sein.

    C-Quellcode

    1. public Vektor DreheX(double winkel)
    2. // Eingang: Vektor x,y,z
    3. // Ausgang: der um die x-Achse gekippte Vektor
    4. {
    5. double cw = Math.Cos(winkel);
    6. double sw = Math.Sin(winkel);
    7. double vy = Y;
    8. double vz = Z;
    9. Y = vy * cw + vz * sw; // die x-Achse ist nicht betroffen
    10. Z = -vy * sw + vz * cw;
    11. return this;
    12. }
    als Teil einer Vektor-Klasse
    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!
    @RushDen: jocutus hat's aus'm Internet. Ich bin im vierten Lehrjahr als Konstrukteur und arbeite somit beruflich mit 3D-Programmen (bei mir ist's AutoDesk Inventor). Ich nehme an, dass es bei ABABC etwa ähnlich aussieht, da sein Bild im Internet sonst nicht vorkommt und es ebenfalls ein Screenshot aus'm Inventor zu sein scheint.

    @ABABC: Ich hab' mich nur darüber "gefreut", dass noch jemand anderes hier mit Inventor arbeitet. Zudem war mein Beitrag eher eine versteckte Verständnisfrage als ein Lösungsvorschlag. Ich arbeite zum Zeitvertreib an einer 3D-Klassenbibliothek. Vielleicht hast du hierfür eine Verwendung...
    Hier mal ein Ausschnitt (hat, glaub irgendwo noch ein paar kleinere Fehler drinne... :whistling: )
    Dateien
    • 3D.vb

      (44,18 kB, 169 mal heruntergeladen, zuletzt: )

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

    Higlav schrieb:

    Ich arbeite zum Zeitvertreib an einer 3D-Klassenbibliothek
    uiuiui!
    Da musste vorsichtig sein, dass du das Rad nicht neu erfindest.
    Wenigstens im 2D-Bereich gibts bereits einen enorm leistungsfähigen Namespace, also zu Matrix und GraphicsPath hätte ich kaum noch was hinzuzufügen.

    Im 3D-Bereich musste dich mal in Wpf umgugge - mir war, als wäre ich da mal auf eine Vector3D-Klasse gestoßen, und wo sowas rumfährt, gibts auch Matrix-Klassen dafür und wasweißich nicht alles.
    Das Funktionsprinzip von Matrix-Transformationen inne Geometrie ist dir bekannt?
    Weil ohne das brauchst du keine Geometrie-Lib zu schreiben.
    Hallo ErfinderDesRades,
    Da musste vorsichtig sein, dass du das Rad nicht neu erfindest.
    :D
    Mir ging es hierbei eigentlich nur um eine Übung. Mir is klar, dass es schon längst bessere Klassenbibliotheken gibt.
    Zur Matrixtransformation:
    Ich habe, bevor ich mich ans Coden gemacht habe, ersteinmal auf ein paar Blättern Papier meine Vorstellung der Funktionalität der 3D-Geometrie dargestellt. In den Methoden ...3D.RotateAroundVector wende ich die Formel aus Wikipedia an.
    Und bei ...3D.To2D wende ich eine selbstentwickelte Methode an (musste dafür relativ lange in Excel rumexperimentieren...).

    Higlav schrieb:

    ersteinmal auf ein paar Blättern Papier meine Vorstellung der Funktionalität der 3D-Geometrie dargestellt.
    :thumbsup:
    Genau so funktioniert das.
    Winkel anfassen und erleben, was wohin dreht, wenn was anderes gedreht wird.
    So was nenn ich Experimentelle Mathematik.
    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!

    Higlav schrieb:

    Mir ging es hierbei eigentlich nur um eine Übung.
    Es gibt Übung und Übung.
    In .Net-Programmierung kannman Übung auch auffassen als "finde heraus, obs das schon gibt!"

    (meinen Nick habich gewählt, weil ich solch leider meist erst hinterher herausgefunden hab)
    So, Ich glaube, ich hab' 'ne Lösung (mit meiner Klasse von oben gerechnet).
    Klassen von oben als Verweis hinzufügen und Konsolenanwendung mit folgendem Code erstellen:

    VB.NET-Quellcode

    1. Sub Main()
    2. Console.ReadLine()
    3. Dim t = Timer
    4. Dim A1 As New Point3D(0, 0, 0)
    5. Dim B1 As New Point3D(0, 33.81, 9.06)
    6. Dim C1 As New Point3D(-45.8, 149.31, 23.26)
    7. Console.WriteLine("A1={" & A1.X & "/" & A1.Y & "/" & A1.Z & "}=" & A1.DistanceTo0)
    8. Console.WriteLine("B1={" & B1.X & "/" & B1.Y & "/" & B1.Z & "}=" & B1.DistanceTo0)
    9. Console.WriteLine("C1={" & C1.X & "/" & C1.Y & "/" & C1.Z & "}=" & C1.DistanceTo0)
    10. Dim Dreieck As New Triangle3D(A1, B1, C1)
    11. Console.WriteLine("Beta-Winkel=" & Dreieck.Beta)
    12. B1.AngleToXAxis = 0
    13. Dim Vektor As New Vector3D(B1, Dreieck.la.B.DistanceTo0, 0, 0)
    14. Vektor.EndPoint = Vektor.EndPoint.RotateAroundVector(Dreieck.Beta, New Vector3D(Vektor.StartPoint, 0, 0, 1))
    15. Dim EndDreieck As New Triangle3D(A1, Vektor.StartPoint, Vektor.EndPoint)
    16. Dim A2 = EndDreieck.pA
    17. Dim B2 = EndDreieck.pB
    18. Dim C2 = EndDreieck.pC
    19. Console.WriteLine("A2={" & A2.X & "/" & A2.Y & "/" & A2.Z & "}=" & A2.DistanceTo0)
    20. Console.WriteLine("B2={" & B2.X & "/" & B2.Y & "/" & B2.Z & "}=" & B2.DistanceTo0)
    21. Console.WriteLine("C2={" & C2.X & "/" & C2.Y & "/" & C2.Z & "}=" & C2.DistanceTo0)
    22. Console.WriteLine("Zeit:" & Timer - t & "s")
    23. Console.ReadKey()
    24. End Sub

    Lösung:

    Quellcode

    1. ⎧0⎫
    2. P1=⎨0⎬
    3. ⎩0⎭
    4. ⎧ 35,003⎫
    5. P2=⎨ 0 ⎬
    6. ⎩ 0 ⎭
    7. ⎧144,462⎫
    8. P3=⎨65,659 ⎬
    9. ⎩ 0 ⎭

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

    Higlav schrieb:

    Konsolenanwendung mit folgendem Code erstellen:
    Eine Console halte ich für solch mathematischen Inhalt Fehl am Platze, WinForms wäre da angesagt, wenn Du parameter durchspielen willst.
    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!
    War ja nur für dieses Problem zugeschnitten.
    Natürlich müsst' sich sowas schön mit'ner WinForm lösen lassen, aber dafür fehlte mir auf die Schnelle die Zeit...

    Higlav schrieb:

    auf die Schnelle
    kommt dann meist Grütze raus. :S
    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!
    So. Hab' jetzt das Ganze nochmals angeschaut:
    Versteh' ich das richtig:
    Es gibt den Pfad mit den drei Punkten. Dieser Pfad ist allerdings Variabel in der Ausrichtung und soll nun so gedreht und gewendet werden, dass die erste Strecke auf einer Achse liegt(Also sich in einer Dimension bewegt), der erste Knick sich auf einer Ebene befindet(Also sich in zwei Dimensionen bewegt) und der Pfad seinen weiteren Verlauf beibehält (halt verschoben).
    Wenn ich das richtig verstanden habe, wäre das mit Inventor einfach zu bewerkstelligen gewesen:
    Bilder
    • Pfad.JPG

      134,04 kB, 1.656×987, 232 mal angesehen