Autor Beitrag
Namenlosnameless
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Mi 02.02.11 00:00 
Hallo!

Ich wollte mich mit dem Thema Rekursion vertraut machen, da ich oft davon lese es aber noch nie probiert habe!
Dabei bin ich auf Fraktale gestoßen ;D
Das Prinzip einer Rekursion habe ich prinzipiell verstanden, jedoch weiß ich nicht ob ich bei folgendem Programm auch mittels einer Rekursion gearbeitet habe...


Hier mal meine Main-Form
ausblenden volle Höhe C#-Quelltext
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:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Fraktal
{
    public partial class Form1 : Form
    {
        private List<Dreieck> dreiecke = new List<Dreieck> {};
        private List<List<Dreieck>> letzteDreiecke = new List<List<Dreieck>> { };

        Dreieck erstesDreieck = new Dreieck(new Point(5010), new Point(55010), new Point(300500));
        public Form1()
        {
            InitializeComponent();
            dreiecke.Add(erstesDreieck);
            letzteDreiecke.Add(dreiecke);
        }
        private void manageDreiecke()
        {
                List<Dreieck> neueDreiecke = new List<Dreieck> { };
                foreach (Dreieck dreieck in dreiecke)
                {
                    dreieck.Cut();
                    neueDreiecke.Add(dreieck.dreieck1);
                    neueDreiecke.Add(dreieck.dreieck2);
                    neueDreiecke.Add(dreieck.dreieck3);
                }

                dreiecke = neueDreiecke;
                this.Refresh();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.FillPolygon(new SolidBrush(Color.Black),new Point[]{erstesDreieck.A,erstesDreieck.B,erstesDreieck.C});

            Brush brush = new SolidBrush(Color.White);
            foreach (Dreieck dreieck in dreiecke)
            {
                Point[] points =new Point[3] { 
                dreieck.A,
                dreieck.B,
                dreieck.C};

                e.Graphics.FillPolygon(brush, points, System.Drawing.Drawing2D.FillMode.Winding);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            letzteDreiecke.Add(dreiecke);
            manageDreiecke();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            dreiecke = letzteDreiecke[letzteDreiecke.Count-1];
            dreiecke.RemoveAt(letzteDreiecke.Count - 1);
            this.Refresh();
        }
    }

   
}


und die Klasse Dreieck:
ausblenden volle Höhe C#-Quelltext
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:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Fraktal
{
    class Dreieck
    {
        public Point A, B, C;
        
        public Dreieck dreieck1,
                       dreieck2,
                       dreieck3;

        public Dreieck(Point a,Point b,Point c)
        {
            A = a;
            B = b;
            C = c;
        }
        public void Cut()
        {
            Point AB;
            Point BC;
            Point CA;

            AB = new Point((A.X + B.X) / 2, (A.Y + B.Y) / 2);
            BC = new Point((B.X + C.X) / 2, (B.Y + C.Y) / 2);
            CA = new Point((C.X + A.X) / 2, (C.Y + A.Y) / 2);

            

             dreieck1 = new Dreieck(A, AB, CA);
             dreieck2 = new Dreieck(AB, B, BC);
             dreieck3 = new Dreieck(CA, BC, C);
        }
    }
}


Ich bin mir acht nicht sicher ob es sich hierbei um eine Rekursionn handelt, da ich ja eigentlich keine Methode in sich selber aufrufe oder?

Um die "Funktion" (falls es überhaupt eine hat), des Programms zu zeigen habe ich die .exe Datei hochgeladen!

mfg Namenlosnameless
Einloggen, um Attachments anzusehen!
_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>


Zuletzt bearbeitet von Namenlosnameless am Mi 02.02.11 00:23, insgesamt 1-mal bearbeitet
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 02.02.11 00:15 
Sicher, dass du Regression meinst? Ich glaube was du vor hast, ist eine Suche in Wikipedia REKURSION.
Und nein, du führst nirgends eine Rekursion durch, aus dem von dir genannten Grund. Wobei eine indirekte Rekursion dennoch möglich wäre.
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Mi 02.02.11 00:22 
ja! verdammt ich meine Rekursion ;D

ich hab heute den ganzen tag verdammte regressionsgeraden durch viele Punkte gezeichnet, mit dem Taschenrechner berechnet und das ca 5 stunden lang!
Ich bin wohl etwas geschädigt in der hinsicht ;D

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>