在 C# 中绘制希尔伯特曲线分形

这个非常短的Hilbert子程序绘制了 Hilbert 曲线。它以递归深度以及指定绘制方向的 dx和dy值作为参数。它以递归方式绘制了四条较小的 Hilbert 曲线并用线将它们连接起来。

cs 复制代码
// Draw a Hilbert curve.
private void Hilbert(Graphics gr, int depth, float dx, float dy)
{
    if (depth > 1) Hilbert(gr, depth - 1, dy, dx);
    DrawRelative(gr, dx, dy);
    if (depth > 1) Hilbert(gr, depth - 1, dx, dy);
    DrawRelative(gr, dy, dx);
    if (depth > 1) Hilbert(gr, depth - 1, dx, dy);
    DrawRelative(gr, -dx, -dy);
    if (depth > 1) Hilbert(gr, depth - 1, -dy, -dx);

    if (DoRefresh) picCanvas.Refresh();
}

由于 C# 没有提供简单的相对线绘制方法,因此代码中包含了一种方法。DrawRelative函数从点 (LastX, LastY) 绘制一条线到新点,并将该点的坐标存储在变量LastX和LastY中。

cs 复制代码
private float LastX, LastY;
...
// Draw the line (LastX, LastY)-(LastX + dx, LastY + dy) and
// update LastX = LastX + dx, LastY = LastY + dy.
private void DrawRelative(Graphics gr, float dx, float dy)
{
    gr.DrawLine(Pens.Black, LastX, LastY, LastX + dx, LastY + dy);
    LastX = LastX + dx;
    LastY = LastY + dy;
}

勾选程序的"刷新"框,使其在绘制每条线时更新其显示。这会大大减慢程序的速度,但它可以让您看到程序绘制深度大于 4 或 5 的线的顺序。

下载示例

https://download.csdn.net/download/ljygood2/90123675

相关推荐
玩泥巴的7 小时前
MAF + 飞书:让大模型干活,但别让它乱干
ai·c#·.net·飞书·agent
cpp_w11 小时前
C#基础3- 面向对象中级应用3
后端·c#
数字新视界11 小时前
机房动环监控提升数据中心安全性
物联网·3d·数字孪生·三维可视化·数据可视化
3D阅阅三维模型轻量化及浏览平台11 小时前
上传 3D 模型自动识别、一键报价,拆解 3D 阅阅报价底层逻辑(机加工 / 钣金)
人工智能·3d·机加工·钣金加工·模具加工
步步为营DotNet12 小时前
Async 状态机要搬进运行时了:.NET 10 Runtime Async 实测,快的地方快 1.5 倍,贵的地方贵 5 倍
性能优化·c#·.net·async·runtime
hixiong12312 小时前
C# 使用 ZXingCpp.Angle 进行条码、二维码识别
开发语言·c#·扫码
步步为营DotNet12 小时前
System.Text.Json 源生成:三个“看起来已经生效“的静默失效
c#·.net·native aot·源生成
燕落南枝12 小时前
HTML 表单入门:表单容器、文本框与密码框属性详解
前端·microsoft·html
用户788477316341 天前
用 C# 把每周 6 小时的 PDF 录入干到 20 分钟:一份可复制的桌面 OCR 方案
c#
禁默1 天前
机器人的手,为什么拿个杯子都这么难?一文看懂“灵巧操作“
人工智能·microsoft·机器人