迭代如图:
稍微变换下画成 6边形凸起方向向两边用随机颜色画完后为雪花状
代码:
private void LayoutRoot_Loaded(object sender, RoutedEventArgs ea)
{
double sqrt3 = Math.Sqrt(3);
Po a = Po(50, (float)(100 + 50 * sqrt3));
Po b = Po(100, (float)(100 + 100 * sqrt3));
Po c = Po(200, (float)(100 + 100 * sqrt3));
Po d = Po(250, (float)(100 + 50 * sqrt3));
Po e = Po(200, 100);
Po f = Po(100, 100);
line(a, b, 5);
line(b, a, 5);
line(b, c, 5);
line(c, b, 5);
line(c, d, 5);
line(d, c, 5);
line(d, e, 5);
line(e, d, 5);
line(e, f, 5);
line(f, e, 5);
line(f, a, 5);
line(a, f, 5);
}
private void line(Po a, Po b, n)
{
(n > 0)
{
double r = Math.Atan(Math.Abs(a.Y - b.Y) / Math.Abs(a.X - b.X)); //角度
double v = 0;
Po c = Po(a.X + (b.X - a.X) / 3, a.Y + (b.Y - a.Y) / 3);
Po d = Po(a.X + 2 * (b.X - a.X) / 3, a.Y + 2 * (b.Y - a.Y) / 3);
double l = Math.Sqrt((c.X - d.X) * (c.X - d.X) + (c.Y - d.Y) * (c.Y - d.Y));
Po e;
(b.Y - a.Y >= 0 && b.X - a.X > 0)
{
v = r;
}
(b.Y - a.Y > 0 && b.X - a.X <= 0)
{
v = Math.PI - r;
}
(b.Y - a.Y <= 0 && b.X - a.X < 0)
{
v = Math.PI + r;
}
(b.Y - a.Y < 0 && b.X - a.X >= 0)
{
v = 2 * Math.PI - r;
}
e = Po((float)(l * Math.Cos(v + Math.PI / 3) + c.X), (float)(c.Y + l * Math.Sin(v + Math.PI / 3)));
line(a, c, n - 1);
line(c, e, n - 1);
line(e, d, n - 1);
line(d, b, n - 1);
}
{
Line l = Line;
Random rnd = Random;
Color c = Color.FromArgb(255, ()rnd.Next(255), ()rnd.Next(255), ()rnd.Next);
l.Stroke = SolidColorBrush(c);
l.X1 = a.X;
l.Y1 = a.Y;
l.X2 = b.X;
l.Y2 = b.Y;
LayoutRoot.Children.Add(l);
}
}
运行结果如图:Koch曲线每部分都由4个跟它自身比例为1:3形状相同小曲线组成那么它豪斯多夫维数(分维数)为d=log(4)/log(3) =1.26185950714...
最新评论