天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 7|回复: 0

ointSort

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    /// <summary> Class providing general mathimatical functions. </summary>
                    class PointSorter
                    {
    #pragma region " Constructor "
                    public:
                            PointSorter(const AcGePoint3d& anchor, AcGePoint3dArray& points)
                            {
                                    mAnchor = anchor;
                                    AcGePoint3d* arr = points.asArrayPtr();
                                    auto size = points.length() / sizeof(AcGePoint3d);

                                    std::sort(arr, arr + size, [this](const AcGePoint3d& l, const AcGePoint3d& r) { return doCompare(l, r); });
                            }

                            PointSorter(const AcGeVector3d& axis, const AcGePoint3d& anchor, AcGePoint3dArray& points)
                            {
                                    mAxis = axis;
                                    mAnchor = anchor;
                                    AcGePoint3d* arr = points.asArrayPtr();
                                    auto size = points.length() / sizeof(AcGePoint3d);

                                    std::sort(arr, arr + size, [this](const AcGePoint3d& l, const AcGePoint3d& r) { return doCompareAlongAxis(l, r); });
                            }
    #pragma endregion

    #pragma region " Private Methods "
                    private:
                            int doCompare(const AcGePoint3d& pt1, const AcGePoint3d& pt2)
                            {
                                    auto vecA = pt1 - mAnchor;
                                    auto vecB = pt2 - mAnchor;

                                    return MathUtilities::Compare(vecA.length(), vecB.length());
                            }

                            int doCompareAlongAxis(const AcGePoint3d& pt1, const AcGePoint3d& pt2)
                            {
                                    auto vecA = pt1 - mAnchor;
                                    auto vecB = pt2 - mAnchor;

                                    if (vecA.isCodirectionalTo(vecB))
                                            return MathUtilities::Compare(vecA.length(), vecB.length());
                                    else if (vecA.isCodirectionalTo(mAxis))
                                            return 1;
                                    return -1;
                            }
    #pragma endregion

    #pragma region " Members "
                    private:
                            AcGeVector3d mAxis;
                            AcGePoint3d mAnchor;
    #pragma endregion
                    };

    Assuming that your MathUtilities::Compare(l,r) returns -1  if  l<r  and  +1 if  l>r
    PointSorter(const AcGePoint3d& anchor, AcGePoint3dArray& points)
    {
            mAnchor = anchor;
            AcGePoint3d* arr = points.asArrayPtr();
            //auto size = points.length() / sizeof(AcGePoint3d); //WRONG!
            auto size = points.length();

            std::sort(arr, arr + size,
                    [this](const AcGePoint3d& l, const AcGePoint3d& r)
                    -> bool { return (doCompare(l, r) < 0); } // true if l<r,  false if l>=r
            );
    }

    PointSorter(const AcGeVector3d& axis, const AcGePoint3d& anchor, AcGePoint3dArray& points)
    {
            mAxis = axis;
            mAnchor = anchor;
            AcGePoint3d* arr = points.asArrayPtr();
            // auto size = points.length() / sizeof(AcGePoint3d); //WRONG!
            auto size = points.length();

            std::sort(arr, arr + size,
                    [this](const AcGePoint3d& l, const AcGePoint3d& r)
                    -> bool { return (doCompareAlongAxis(l, r) < 0); } // true if l<r,  false if l>=r
            );
    }

     

     

     

     

    ointSort
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:16 , Processed in 0.058394 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表