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

点集边界生成算法咨询:替代Convex Hull的实现疑问

求助:点集边界生成问题

最近我在做生成点集边界的功能时,用Convex Hull算法跑出来的效果完全达不到预期,想请教怎么生成符合我需求的边界。

效果对比

  • 当前Convex Hull生成的效果:
    Current behavior
  • 我想要的效果(用画图工具手动画的参考):
    Wanted behavior

当前使用的代码

我现在用的是C#版的Convex Hull实现,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;

public class ConvexHull
{
    public static List<Point> ComputeConvexHull(List<Point> points)
    {
        if (points == null || points.Count == 0)
            return new List<Point>();

        points.Sort((a, b) => a.X.CompareTo(b.X) != 0 ? a.X.CompareTo(b.X) : a.Y.CompareTo(b.Y));

        List<Point> lower = new List<Point>();
        foreach (var p in points)
        {
            while (lower.Count >= 2 && Cross(lower[lower.Count - 2], lower[lower.Count - 1], p) <= 0)
                lower.RemoveAt(lower.Count - 1);
            lower.Add(p);
        }

        List<Point> upper = new List<Point>();
        for (int i = points.Count - 1; i >= 0; i--)
        {
            var p = points[i];
            while (upper.Count >= 2 && Cross(upper[upper.Count - 2], upper[upper.Count - 1], p) <= 0)
                upper.RemoveAt(upper.Count - 1);
            upper.Add(p);
        }

        lower.RemoveAt(lower.Count - 1);
        upper.RemoveAt(upper.Count - 1);
        lower.AddRange(upper);

        return lower;
    }

    private static double Cross(Point o, Point a, Point b)
    {
        return (a.X - o.X) * (b.Y - o.Y) - (a.Y - o.Y) * (b.X - o.X);
    }
}

public struct Point
{
    public double X { get; set; }
    public double Y { get; set; }

    public Point(double x, double y)
    {
        X = x;
        Y = y;
    }
}

我整理的疑问和已知信息

我自己先查了一些资料,整理了几个点:

  • 我想要的这种边界效果能不能实现?可以实现
  • 我现在用的算法是不是我需要的?不是,我需要的不是凸包,而是类似MATLAB里boundary函数生成的那种贴合点集的凹形边界
  • 这种边界生成算法的性能会不会比传统Convex Hull差?经调研两者性能相当
  • 目前卡在最后一点:有没有这种边界生成算法的伪代码或者C#的类似实现示例?找了好久都没找到合适的方案,求帮忙!

内容的提问来源于stack exchange,提问作者Mário Gabriel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:06:13