在 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

相关推荐
新启航半导体有限公司1 小时前
[新启航]《超薄碳化硅衬底 TTV 测量:技术挑战与解决方案》
科技·3d·制造
seegaler1 小时前
WrenAI:开源革命,重塑商业智能未来
人工智能·microsoft·ai
SEO-狼术2 小时前
Add-in Express for Microsoft Office
microsoft·express
NingboWill4 小时前
AI日报 - 2025年09月05日
人工智能·microsoft
咔咔一顿操作4 小时前
第六章 Cesium 实现简易河流效果
microsoft·3d·cesium
FutureUniant4 小时前
GitHub每日最火火火项目(9.5)
人工智能·microsoft·计算机视觉·ai·github
almighty275 小时前
C# 阿里云 OSS 图片上传步骤及浏览器查看方法
c#·图片上传·c# 阿里云 oss·阿里云 oss
桃花键神16 小时前
如何选择合适的 3D 建模工具:我的经验和思考
3d
渲吧-云渲染16 小时前
打造大师级渲染:10个高效工作流技巧,质效双升
3d
安卓开发者17 小时前
鸿蒙NEXT交互机制解析:从输入设备到手势响应的全面指南
microsoft·交互·harmonyos