Неверно отрисовывается фрактал методом L- системы
Необходимо нарисовать фрактал методом L-системы.
Аксиома: F
Правила:
F → F+F-F-F-B+F+F+F-FB → BBB
Здесь B означает переместиться вперёд на один шаг, не прорисовывая след.
public void DrawF(int x, int y, int step, double angle,String rules, PaintEventArgs e)
{
double x1 = x;
double y1 = y;
Graphics g = e.Graphics;
foreach(char a in rules)
{
if (a.Equals('F'))
{
x1 += step;
y1 += step;
g.DrawLine(new Pen(Color.Blue), x, y,(int) x1,(int) y1);
x =(int) x1;
y=(int)y1;
}
if (a.Equals('B'))
{
x1 = x1 + step;
x = (int)x1;
y1 = y1 + step;
y = (int)y1;
}
if (a.Equals('-'))
{
x1 = x1 - step * Math.Sin(Math.PI/2);
y1 = y1 - step * Math.Cos(Math.PI/2);
}
if (a.Equals('+'))
{
x1 = x1 + step * Math.Sin(Math.PI / 2);
y1 = y1 + step * Math.Cos(Math.PI / 2);
}
}
}
Никак не могу понять где ошибка
Ответы (1 шт):
Автор решения: Danis
→ Ссылка
public void DrawF(int x, int y, int step, double angle,String rules, PaintEventArgs e)
{
double x1 = x;
double y1 = y;
Graphics g = e.Graphics;
float angle = 0;
foreach(char a in rules)
{
if (a.Equals('F'))
{
x1 += step * Math.Sin(angle);
y1 += step * Math.Cos(angle);
g.DrawLine(new Pen(Color.Blue), x, y,(int) x1,(int) y1);
x =(int) x1;
y=(int)y1;
}
if (a.Equals('B'))
{
x1 += step * Math.Sin(angle);
y1 += step * Math.Cos(angle);
x = (int)x1;
y =(int) y1;
}
if (a.Equals('-'))
{
angle -= Math.Pi / 3;
}
if (a.Equals('+'))
{
angle += Math.Pi / 3;
}
}
