Thema Datum  Von Nutzer Rating
Antwort
Rot 3D Koordinatensystem programmieren
29.09.2019 00:48:08 Nogtu
NotSolved
29.09.2019 07:53:12 Gast77883
NotSolved
29.09.2019 09:46:27 Nogtu
NotSolved
29.09.2019 11:44:18 Gast97272
NotSolved

Ansicht des Beitrags:
Von:
Nogtu
Datum:
29.09.2019 00:48:08
Views:
872
Rating: Antwort:
  Ja
Thema:
3D Koordinatensystem programmieren

Schönen guten Abend, liebe Community,
 

ich komme gleich zum Thema:

Für ein aktuelles Projekt würde ich gerne in meinen aktuellen Code ein 3D Koordinatensystem einfügen, jedoch habe ich leider keine Ahnung wie, habe schon vieles ausprobiert, aber leider hat davon nichts so funktioniert, wie ich es haben wollte.

Also bisher ohne Erfolg..

 

Ich hätte es gerne so wie auf folgendem Bild:

https://www.bilder-upload.eu/bild-85ce74-1569710587.png.html

Das blaue Koordinatensystem steht fest im Raum (bewegt sich jedoch in X, Y, Z Richtung mit)

Das schwarze Koordinatensystem ist fest mit dem Quader "verbunden", schwingt also hin und her und lässt sich ebenfalls in X, Y, Z Richtung mitbewegen)

 

Mein aktueller (relevanter) Code:

Public Class Form2

    Dim alpha_z, alpha_y As Decimal 
    Dim maus_x, maus_y As Integer

    Private Sub frmTest_Paint(ByVal sender As Object,
                              ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

        If RadioButton_2D.Checked Then

            Dim p As New Pen(Color.Blue, 2) 
            Dim x, y As Integer

            'x = 100 + 100 * Math.Sin(Form1.phi)
            x = Me.Width / 2 + 115 * Math.Sin(Form1.phi)   'Zentrierung X-Achse

            y = Me.Height / 2 + 115 * Math.Cos(Form1.phi)  'Zentrierung Y-Achse
            'y = 100 + 100 * Math.Cos(Form1.phi)

            e.Graphics.DrawEllipse(Pens.Red, x - 10, y - 10, 20, 20) 'Kugel
            e.Graphics.FillEllipse(Brushes.Red, x - 10, y - 10, 20, 20)
            e.Graphics.DrawLine(p, CInt(Me.Width / 2), CInt(Me.Height / 2), x, y) 'Der Faden
            e.Graphics.DrawLine(Pens.Black, 212, CInt(Me.Height / 2), Me.Width - 212, CInt(Me.Height / 2))
            With e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias    'test für Anti-Aliasing als Weichzeichner Methode
                e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality   'Zusätzlicher Test mit HighQuality
            End With


            Button1.Visible = False     
            Button2.Visible = False
            Button3.Visible = False
            Button4.Visible = False
            Label1.Visible = False

        End If

        'Formatierung eines Quaders in 3D durch ein Koordinatensystem
        If RadioButton_3D.Checked Then                     
            Dim b, t, h As Decimal
            b = 6
            t = 2
            h = 15

            Dim x(7), y(7), z(7) As Decimal 
            y(1) = b
            x(2) = t
            y(2) = b
            x(3) = t
            z(4) = h
            y(5) = b
            z(5) = h
            x(6) = t
            y(6) = b
            z(6) = h
            x(7) = t
            z(7) = h

            Button1.Visible = True      
            Button2.Visible = True
            Button3.Visible = True
            Button4.Visible = True
            Label1.Visible = True

           
            For i = 0 To 7
                z(i) = z(i) - 1.0 * h     
                y(i) = y(i) - 0.5 * b     

            Next


            Dim x0(7), y0(7), z0(7) As Decimal
            For i = 0 To 7                              'Vorbereitung schwingen
                x0(i) = x(i)
                y0(i) = y(i) * Math.Cos(Form1.phi) - z(i) * Math.Sin(Form1.phi)
                z0(i) = y(i) * Math.Sin(Form1.phi) + z(i) * Math.Cos(Form1.phi)

            Next
            'nachfolgender Schritt für Drehung um die Z Achse

            Dim x1(7), y1(7), z1(7) As Decimal
            For i = 0 To 7
                x1(i) = x0(i) * Math.Cos(alpha_z) - y0(i) * Math.Sin(alpha_z)
                y1(i) = x0(i) * Math.Sin(alpha_z) + y0(i) * Math.Cos(alpha_z)
                z1(i) = z0(i)

            Next
            'nachfolgender Schritt für Drehung um die Y Achse
            Dim x2(7), y2(7), z2(7) As Decimal
            For i = 0 To 7
                x2(i) = x1(i) * Math.Cos(alpha_y) - z1(i) * Math.Sin(alpha_y)
                z2(i) = x1(i) * Math.Sin(alpha_y) + z1(i) * Math.Cos(alpha_y)
                y2(i) = y1(i)

            Next

            '3D auf 2D Umrechnung
            Dim xb(7), yb(7) As Integer                                 'Dimensionierung des Quaders
            For i = 0 To 7                                                     
                xb(i) = Me.Width / 2 + y2(i) * 20 '- x2(i) * 0.707 * 0.5 * 20          
                yb(i) = Me.Height / 2 - z2(i) * 20 '+ x2(i) * 0.707 * 0.5 * 20        

                e.Graphics.DrawEllipse(Pens.Black, xb(i) - 4, yb(i) - 4, 8, 8)        'Eckpunkte des Quaders
            Next

            For j = 0 To 1
                For i = 0 To 2
                    e.Graphics.DrawLine(Pens.Black, xb(i + j * 4), yb(i + j * 4), xb(i + 1 + j * 4), yb(i + 1 + j * 4))   
                Next
                e.Graphics.DrawLine(Pens.Black, xb(3 + j * 4), yb(3 + j * 4), xb(0 + j * 4), yb(0 + j * 4))
            Next

            For i = 0 To 3  
                e.Graphics.DrawLine(Pens.Black, xb(i), yb(i), xb(i + 4), yb(i + 4))
            Next

            'nachfolgend Fläche mit Farbe
            'Vorne
            If x2(3) - x2(0) > 0 Then
                Dim quader() As Point =
                {New Point(xb(2), yb(2)),
                New Point(xb(3), yb(3)),
                New Point(xb(7), yb(7)),
                New Point(xb(6), yb(6))}
                With e.Graphics
                    .SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
                    '.DrawLines(New Pen(Color.Black, 2), quader)
                End With

                e.Graphics.FillPolygon(Brushes.Red, quader)
            End If

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot 3D Koordinatensystem programmieren
29.09.2019 00:48:08 Nogtu
NotSolved
29.09.2019 07:53:12 Gast77883
NotSolved
29.09.2019 09:46:27 Nogtu
NotSolved
29.09.2019 11:44:18 Gast97272
NotSolved