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:
1118
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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
                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