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

如何按指定起始角度对围绕中心点的点进行径向排序?

围绕中心点按指定起始角度径向排序点

我需要实现一组点围绕中心点按指定起始角度的径向排序,最初尝试了叉积方案:

public static void RadialCrossSort(Vector3 centerPoint, ref List<Vector3> vertices)
{
    vertices.Sort(delegate (Vector3 a, Vector3 b)
    {
        Vector3 aDifference = a - centerPoint;
        Vector3 bDifference = b - centerPoint;
        float comparison = bDifference.x * aDifference.y - aDifference.x * bDifference.y;
        return (int)Mathf.Sign(comparison);
    });
}

这个算法存在两个问题:无法自定义起始角度,且排序后部分点顺序混乱、出现重叠:

点排序混乱示意图

于是改用三角函数方案,该方案能实现正常排序:

public static float GetAngle(Vector3 centerPoint, Vector3 point)
{
    Vector3 pointFromOrigin = point - centerPoint;
    float angle = Mathf.Atan2(pointFromOrigin.y, pointFromOrigin.x) + Mathf.PI;
    return angle;
}

public static void RadialTrigSort(Vector3 centerPoint, ref List<Vector3> vertices)
{
    vertices.Sort(delegate (Vector3 a, Vector3 b)
    {
        float angleA = GetAngle(centerPoint, a);
        float angleB = GetAngle(centerPoint, b);
        return (int)Mathf.Sign(angleA - angleB);
    });
}

排序后的结果符合预期:

点排序正常示意图

但我三角函数基础薄弱,不知道如何修改代码来调整排序的起始角度,恳请提供帮助。

注:上述代码为优化版本,与生成示意图的代码(Unity C# vs Processing Java)不完全相同,但功能完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:37:47