使用此函数我想绘制一个递归树,但是,当我调用此函数时,第二行的方向(我想每次递归地更改)。
a
是x
与第一行之间的角度,
b
是第一行和第二行之间的角度。
照片: This is the First level recursion This is the second level of recursion the problem is at highlighted line 我该如何解决这个问题?
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 :(得分:0)
每次你计算新点时,你都会从y
中减去它,如果sin(a)是正数,那就没问题了,但是因为它不是,所以它从负减法转为正数减法。
如果深度迭代一级,则应正确绘制下一行。
尝试使用正值a
或
Math.Abs
生成的sin(a)
。