You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非递归实现Julia科赫曲线绘制失败,寻求技术帮助

非递归科赫曲线的问题修正(Julia实现)

问题分析

你的代码存在三个核心错误:

  • 三等分点计算错误:seg_points函数的点计算逻辑偏离线段三等分的数学定义,导致分段点位置完全错误。
  • 迭代点集构造错误:koch_curve函数直接将新点追加到原数组末尾,未维护折线的顺序,最终点集混乱无法形成正确分形。
  • 尖点计算逻辑偏差:polygon函数的向量旋转逻辑需调整,以匹配科赫曲线等边三角形尖点的构造规则。

修正后的代码

1. 线段三等分函数(修正版)

function seg_points(startPoint, endPoint, n=3)
    mids = []
    vec = endPoint - startPoint  # 计算起点到终点的方向向量
    for i in 1:n-1
        # 从起点出发,按比例移动生成三等分点
        push!(mids, startPoint + (i/n) * vec)
    end
    return mids
end

2. 尖点计算函数(修正版)

function polygon(p1, p2)
    vec = p2 - p1  # 获取当前线段的向量
    # 逆时针旋转60度的旋转矩阵计算
    rotated_vec = [vec[1]*cos(π/3) - vec[2]*sin(π/3), vec[1]*sin(π/3) + vec[2]*cos(π/3)]
    # 从p1出发,加上旋转后的向量得到等边三角形尖点
    return p1 + rotated_vec
end

3. 分形点集生成函数(修正版)

function koch_curve(order::Int, startPoint = [0.0,0.0], endPoint = [1.0,0.0])
    pts = [startPoint, endPoint]
    for _ in 1:order
        new_pts = []
        # 遍历每一段线段,替换为科赫曲线的分段结构
        for j in 2:length(pts)
            a = pts[j-1]
            b = pts[j]
            c, d = seg_points(a, b)  # c为1/3点,d为2/3点
            e = polygon(c, d)         # 生成等边三角形尖点
            # 按顺序添加分段点:a → c → e → d
            push!(new_pts, a, c, e, d)
        end
        # 添加最后一个终点,完成当前迭代的点集
        push!(new_pts, pts[end])
        # 更新点集为当前迭代后的结果
        pts = new_pts
    end
    return pts
end

验证与使用

可以用Plots.jl绘制修正后的曲线:

using Plots
pts = koch_curve(5)
plot(getindex.(pts,1), getindex.(pts,2), legend=false, axis=:equal)

此时order=5的曲线会符合科赫分形的预期形态。

内容的提问来源于stack exchange,提问作者Milo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:45:27