2016-10-21 2 views
1

Mit dieser Funktion möchte ich einen rekursiven Baum zeichnen, aber beim Aufruf dieser Funktion ändert sich die Richtung der zweiten Zeile (die ich rekursiv zeichnen möchte).Wie behält man die Richtung der Linie in der Rekursion unverändert?

a ist der Winkel zwischen x und der ersten Zeile,

b Ist der Winkel zwischen der ersten Linie und der zweiten Linie.

Fotos: This is the First level recursion This is the second level of recursion the problem is at highlighted line Wie kann ich dieses Problem beheben?

public void drawTree(int n, float l, float x, float y, float a, float b, float c, 
        float k1, float k2, float k3, float m2, float m3) 
{ 
    //float k = (float)Math.Pow(-1, n+1); 
    Pen p = new Pen(Color.Black); 
    Graphics gr = this.CreateGraphics(); 

    float l1 = k1 * l; 
    float l2 = k2 * l; 
    float l3 = k3 * l; 
    float g = m3 * l; 
    float f = m2 * l; 

    gr.DrawLine(p, x, y, x + l * cos(a), y - l * sin(a)); 
    if (n == 1) return; 

    drawTree(n - 1, l2, x + f * cos(a), y - f * sin(a), (a - b), b, c, k1, k2, k3, m2, m3); 
} 
+0

Was ist der Zweck von 'l1',' l2', 'l3' und' g'? Können Sie alle verwendeten Parameter erklären? – Enfyve

+0

l1, l2 und l3 sind die Kinder, wie der Zweig der Bäume, aber ich habe nur l2, g und f ist die Punkte auf "l", wo die l2 und l3 whill starten –

+0

Korrigieren Sie mich, wenn ich falsch liege, aber Ich sehe nicht, dass "g" irgendwo benutzt wird. – Enfyve

Antwort

0

jedes Mal, wenn Sie den neuen Punkt zu berechnen, werden Sie es aus y subtrahieren, die, wenn sin (a) positiv war, wäre in Ordnung, aber da es sie nicht, dann ist Flips eine negative Subtraktion zu einem positiven entfernt, Subtraktion.

Wenn Sie eine Ebene tiefer iterieren, sollte die nächste Zeile korrekt gezeichnet werden.

Versuchen Sie entweder mit einem positiven Wert a oder Math.Abs die sin(a) führt.

+0

Vielen Dank! Es hat funktioniert –

+0

Jetzt möchte ich eine andere Linie zeichnen, aber es zieht nur die rechte Seite, es ist das Problem von Math.Abs. weil es sich nicht um den Minuswert von sin und cos kümmert –

+0

Nennen Sie Math.Abs ​​auch an der x-Position? Sie möchten nur den absoluten Wert für die y-Position. – Enfyve

Verwandte Themen