ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
378
378
EMPFEHLEN
-
Hallo,
Das ist das erste Mal dass ich hier mitmache. Also bitte kräftig kritisieren!
Einige Beispiele funktionierten bei mir nicht ganz so wie sie sollten (Hilbert-Kurve)
Ich denke der Code dürfte selbsklärend sein:
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
Public Class frmStart Private AusgabeGrafik As Bitmap Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click 'Zuweisung der Variablen Dim Weite As Integer = Convert.ToInt32(txtBreite.Text) Dim Höhe As Integer = Convert.ToInt32(txtHöhe.Text) Dim aktuellePosition As New Point(Convert.ToInt32(txtStartX.Text), Höhe - Convert.ToInt32(txtStartY.Text)) Dim aktuellerWinkel As Double = 0 Dim Schrittweite As Integer = Convert.ToInt32(txtSchrittweite.Text) Dim Drehwinkel As Double = Convert.ToDouble(txtDrehwinkel.Text) Dim n As Integer = Convert.ToInt32(txtN.Text) Dim GespeichertePositionen() As Point Dim GespeicherteDrehungen() As Double Dim Ersetzung(,) As String If Not n = 0 Then Try Dim split() As Char = {Chr(10), Chr(13)} Dim tmpSplit() As String = txtErsetztung.Text.Split(split, StringSplitOptions.RemoveEmptyEntries) ' Splitted den String nach Zeilen Dim tmpSplit2() As String ReDim Ersetzung(tmpSplit.GetUpperBound(0), 1) 'Dimensioniert das Array neu For i = 0 To tmpSplit.GetUpperBound(0) tmpSplit2 = tmpSplit(i).Split(" "c) 'Splitted nach Leerzeichen Ersetzung(i, 0) = tmpSplit2(0) Ersetzung(i, 1) = tmpSplit2(1) Next Catch 'Fehler abfangen MsgBox("Ungültiger Wert im Ersetzten Feld") Exit Sub End Try End If Dim Eingabe As String = txtEingabe.Text Dim neuerPunkt As Point 'Setzt die Größe des Panels pnlAusgabe.Size = New Size(Convert.ToInt32(txtBreite.Text), Convert.ToInt32(txtHöhe.Text)) pnlAusgabe.BackColor = Color.White AusgabeGrafik = New Bitmap(Weite, Höhe, Imaging.PixelFormat.Format24bppRgb) ' Erstellt die Grafik Dim g As Graphics = Graphics.FromImage(AusgabeGrafik) 'Erstellt das Graphics-Objekt, auf dem gezeichnet wird g.Clear(Color.White) If Not n = 0 Then 'Wenn Ersetztungen statt finden sollen For Ersetzungsrunde = 1 To n For i = 0 To Ersetzung.GetUpperBound(0) Eingabe = Eingabe.Replace(Ersetzung(i, 0), Ersetzung(i, 1)) 'Ersetzte Next Next End If For i = 0 To Eingabe.Length - 1 'Durchlaufe alle Zeichen Select Case Eingabe.Chars(i) Case "F"c 'Berechne neuen Punkt neuerPunkt = New Point( _ aktuellePosition.X + Convert.ToInt32(Math.Cos(DegToRad(aktuellerWinkel)) * Schrittweite), _ aktuellePosition.Y + Convert.ToInt32(Math.Sin(DegToRad(aktuellerWinkel)) * Schrittweite)) 'Zeichnen Liene zum neuen Punkt g.DrawLine(Pens.Black, aktuellePosition, neuerPunkt) aktuellePosition = neuerPunkt Case "+"c aktuellerWinkel -= Drehwinkel Case "-"c aktuellerWinkel += Drehwinkel Case "["c If GespeicherteDrehungen Is Nothing Or GespeichertePositionen Is Nothing Then 'Es sind noch keine Daten im Array ReDim GespeicherteDrehungen(0) ReDim GespeichertePositionen(0) Else ReDim Preserve GespeicherteDrehungen(GespeicherteDrehungen.GetUpperBound(0) + 1) 'Vergrößere den Array um einen Platz ReDim Preserve GespeichertePositionen(GespeichertePositionen.GetUpperBound(0) + 1) End If GespeicherteDrehungen(GespeicherteDrehungen.GetUpperBound(0)) = aktuellerWinkel 'Speichere den Winkel GespeichertePositionen(GespeichertePositionen.GetUpperBound(0)) = aktuellePosition 'Speichere die Position Case "]"c aktuellerWinkel = GespeicherteDrehungen(GespeicherteDrehungen.GetUpperBound(0)) 'Hole Daten aktuellePosition = GespeichertePositionen(GespeichertePositionen.GetUpperBound(0)) ReDim Preserve GespeicherteDrehungen(GespeicherteDrehungen.GetUpperBound(0) - 1) 'Lösche letzten Platz ReDim Preserve GespeichertePositionen(GespeichertePositionen.GetUpperBound(0) - 1) End Select aktuellerWinkel = aktuellerWinkel Mod 360 'kann man eigentlich weglassen. Hält den Winkel zwischen 0 und 360 Next pnlAusgabe.Invalidate() 'Zeichnet das Ausgabe Panel neu End Sub Private Function DegToRad(ByVal Deg As Double) As Double 'Rechnet einen in Grad angegebenen Winkel in Bogenmass um Return Deg * (Math.PI / 180) End Function Private Sub pnlAusgabe_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles pnlAusgabe.Paint Try e.Graphics.DrawImage(AusgabeGrafik, 1, 1) 'Grafik anzeigen Catch 'Grafik wurde noch nicht erstellt 'Ignorieren End Try End Sub End Class
Viele Grüße
x y zGeändert von Erik (20.07.09 um 17:45 Uhr)
Ähnliche Themen
-
Quiz?
Von MeisterLampion im Forum Office-AnwendungenAntworten: 12Letzter Beitrag: 03.11.06, 15:48 -
Quiz: Was bin ich?
Von MrTwister im Forum WerkstattAntworten: 3Letzter Beitrag: 05.04.06, 19:14 -
Quiz
Von JannyR im Forum PHPAntworten: 2Letzter Beitrag: 21.05.05, 15:58 -
Quiz
Von alkaline im Forum PHPAntworten: 0Letzter Beitrag: 27.09.04, 10:16 -
php Quiz
Von Sim im Forum PHPAntworten: 0Letzter Beitrag: 09.05.04, 12:43





Login





