找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 802|回复: 6

[每日一码] ARX点表比较函数等

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-10-11 08:15:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
//点表比较函数,配合std::sort使用
//点按xyz排序,小写字母表示从小到大排序,大写则从大到小排序,在前的字母先排序
int cmp_xyz (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else
                return p1.z < p2.z?1:0;
}
int cmp_xYz (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else
                return p1.z < p2.z?1:0;
}
int cmp_xYZ (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else
                return p1.z > p2.z?1:0;
}
int cmp_xyZ (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else
                return p1.z > p2.z?1:0;
}
int cmp_XYZ (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else
                return p1.z > p2.z?1:0;
}
int cmp_XyZ (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else
                return p1.z > p2.z?1:0;
}

int cmp_Xyz (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else
                return p1.z < p2.z?1:0;
}

int cmp_XYz (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else
                return p1.z < p2.z?1:0;
}

int cmp_xy (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else 
                return p1.y < p2.y?1:0;        
}
int cmp_xY (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else 
                return p1.y > p2.y?1:0;        
}
int cmp_Xy (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else 
                return p1.y < p2.y?1:0;        
}
int cmp_XY (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else 
                return p1.y > p2.y?1:0;        
}

int cmp_x(AcGePoint3d p1,AcGePoint3d p2)
{
        return p1.x < p2.x?1:0;
}
int cmp_X(AcGePoint3d p1,AcGePoint3d p2)
{
        return p1.x > p2.x?1:0;
}
int cmp_y(AcGePoint3d p1,AcGePoint3d p2)
{
        return p1.y < p2.y?1:0;
}
int cmp_Y(AcGePoint3d p1,AcGePoint3d p2)
{
        return p1.y > p2.y?1:0;
}
int cmp_z(AcGePoint3d p1,AcGePoint3d p2)
{
        return p1.z < p2.z?1:0;
}
int cmp_Z(AcGePoint3d p1,AcGePoint3d p2)
{
        return p1.z > p2.z?1:0;
}
int cmp_YX (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else 
                return p1.x > p2.x?1:0;        
}
int cmp_Yx (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else 
                return p1.x < p2.x?1:0;        
}
int cmp_yx (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else 
                return p1.x < p2.x?1:0;        
}
int cmp_yX (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else 
                return p1.x > p2.x?1:0;        
}
int cmp_yxz (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else
                return p1.z < p2.z?1:0;
}
int cmp_yXz (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else
                return p1.z < p2.z?1:0;
}
int cmp_yXZ (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else
                return p1.z > p2.z?1:0;
}
int cmp_yxZ (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else
                return p1.z > p2.z?1:0;
}
int cmp_YXZ (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else
                return p1.z > p2.z?1:0;
}
int cmp_YxZ (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else
                return p1.z > p2.z?1:0;
}

int cmp_Yxz (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else
                return p1.z < p2.z?1:0;
}

int cmp_YXz (AcGePoint3d p1,AcGePoint3d p2)
{
        if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else
                return p1.z < p2.z?1:0;
}


int cmp_2d_xy (AcGePoint2d p1,AcGePoint2d p2)
{
        if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else 
                return p1.y < p2.y?1:0;        
}
int cmp_2d_xY (AcGePoint2d p1,AcGePoint2d p2)
{
        if (p1.x != p2.x)
                return p1.x < p2.x?1:0;
        else 
                return p1.y > p2.y?1:0;        
}
int cmp_2d_Xy (AcGePoint2d p1,AcGePoint2d p2)
{
        if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else 
                return p1.y < p2.y?1:0;        
}
int cmp_2d_XY (AcGePoint2d p1,AcGePoint2d p2)
{
        if (p1.x != p2.x)
                return p1.x > p2.x?1:0;
        else 
                return p1.y > p2.y?1:0;        
}

int cmp_2d_x (AcGePoint2d p1,AcGePoint2d p2)
{
        return p1.x < p2.x?1:0;
}
int cmp_2d_X(AcGePoint2d p1,AcGePoint2d p2)
{
        return p1.x > p2.x?1:0;
}
int cmp_2d_y (AcGePoint2d p1,AcGePoint2d p2)
{
        return p1.y < p2.y?1:0;
}
int cmp_2d_Y(AcGePoint2d p1,AcGePoint2d p2)
{
        return p1.y > p2.y?1:0;
}

int cmp_2d_YX(AcGePoint2d p1,AcGePoint2d p2)
{
        if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else 
                return p1.x > p2.x?1:0;        
}
int cmp_2d_Yx (AcGePoint2d p1,AcGePoint2d p2)
{
        if (p1.y != p2.y)
                return p1.y > p2.y?1:0;
        else 
                return p1.x < p2.x?1:0;        
}
int cmp_2d_yx (AcGePoint2d p1,AcGePoint2d p2)
{
        if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else 
                return p1.x < p2.x?1:0;        
}
int cmp_2d_yX (AcGePoint2d p1,AcGePoint2d p2)
{
        if (p1.y != p2.y)
                return p1.y < p2.y?1:0;
        else 
                return p1.x > p2.x?1:0;        
}

int cmp_up (int &a,int &b)
{
        return a<b?1:0;
}
int cmp_up (double &a,double &b)
{
        return a<b?1:0;
}
int cmp_down (const int &a, const int &b)
{
        return a>b?1:0;
}
int cmp_down (double &a,double &b)
{
        return a>b?1:0;
}

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2016-11-14 23:36:09 | 显示全部楼层
本帖最后由 aeo 于 2016-11-14 23:37 编辑

写了一个类似lisp的


  1. int cmp_2Point (AcGePoint3d p1,AcGePoint3d p2,CString &cmpstr)
  2. {
  3.   if (p1.x != p2.x)
  4.     return  acutWcMatch(cmpstr, _T("X*") )== RTNORM? p1.x > p2.x : p1.x < p2.x ;
  5.   else if (p1.y != p2.y)
  6.       return  acutWcMatch(cmpstr, _T("?Y*") )== RTNORM? p1.y > p2.y : p1.y < p2.y;
  7.   else
  8.     return  acutWcMatch(cmpstr, _T("*Z") )== RTNORM? p1.z > p2.z : p1.z < p2.z;
  9. }



结果和上面一大串代码一样。
这个结果是不是刚好反了,返回1的时候交换还是0的时候交换??????

用法:
cmp_2Point (p1, p2 ,_T("xYz"))

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2016-11-14 23:51:13 | 显示全部楼层
本帖最后由 aeo 于 2016-11-14 23:53 编辑
::::
RichSelian:::::
今天研究排序,写了一算法,把std::sort玩爆了
http://tieba.baidu.com/p/2294844686
.
.
所以肉牛从Google那里找了一个快速排序的变种算法 —— Ternary Quick Sort (三分法快速排序)。

三分快排的基本原理是这个样子:

在比较两个字符串时,不是直接从头比到尾,而是从某一个位置d开始,向后比较常数K个字符,如果这K个字符都相等,我们就说这两个字符串在d位置相等。

排序时,我们和普通快排一样,对整个数组做一次遍历。不同的是,我们并不是像快排中用一个pivot把数组分成两份,而是在将数组分成三份:在d位置<pivot,在d位置=pivot,在d位置>pivot。之后对分出来的三个子集进行递归操作。其中第一份和第三份中的字符串在d位置还不完全相等,所以递归操作时还是在位置d上进行比较;而第二份中所有字符串在d位置都是相等的(等于pivot),所以递归时将比较位置后移至(d+K)。
.
.
代码::::::::::::::::::::::
http://codepad.org/zxoSpg1Y





论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-11-14 23:54:12 | 显示全部楼层

版主多给大家介绍介绍STD::SORT啊,都让你完爆了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2016-11-14 23:59:25 | 显示全部楼层

非我写^_^我没那水平
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-11-15 00:29:23 | 显示全部楼层

会用,而且有心得就行啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2016-11-28 17:23:41 | 显示全部楼层
确实是难得好帖啊,顶先
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-1 20:56 , Processed in 0.439540 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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