明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2430|回复: 4

[无聊]二维/三维坐标数组排序函数(单轴、双轴升降序)

[复制链接]
发表于 2012-12-2 21:09:04 | 显示全部楼层 |阅读模式
本帖最后由 Flyingdancing 于 2012-12-3 21:19 编辑
  1. Function orderXY(ByVal 点数组 As Variant, XY顺序 As String) As Variant
  2. '根据坐标排序
  3. '可设置单轴判断,也可设置双轴判断
  4. '可升序,可降序
  5. '*********************************************
  6. 'XY顺序(分号分割):(第一位)
  7. ''''仅X——0
  8. ''''仅Y——1
  9. ''''先X后Y——2
  10. ''''先Y后X——4
  11. '''''''''第三位(先):
  12. '''''''''0——降序
  13. '''''''''1——升序
  14. '''''''''第二位(后):
  15. '''''''''0——降序
  16. '''''''''1——升序
  17. Dim 临时点 As Variant
  18. Dim 中转变体 As Variant
  19. Dim 计数i As Integer
  20. Dim 计数j As Integer
  21. Dim 先 As Integer
  22. Dim 后 As Integer
  23. Dim 变体 As Variant
  24. Dim 升降序 As Integer
  25. Dim 标志 As Integer '设置大于还是小于
  26. '若只比较一个方向,则
  27. '后=-1
  28. 变体 = Split(XY顺序, ";") '分号分割

  29. Select Case 变体(0)
  30. Case 0
  31.     先 = 0
  32.     后 = -1
  33. Case 1
  34.     先 = 1
  35.     后 = -1
  36. Case 2
  37.     先 = 0
  38.     后 = 1
  39. Case 4
  40.     先 = 1
  41.     后 = 0
  42. End Select

  43. '先顺序:
  44. 升降序 = 变体(1)
  45. For 计数i = 0 To UBound(点数组)
  46.     For 计数j = 计数i + 1 To UBound(点数组)
  47.         标志 = IIf(升降序, 点数组(计数i)(先) > 点数组(计数j)(先), 点数组(计数i)(先) < 点数组(计数j)(先))
  48.         If 标志 Then '比较x坐标
  49.             中转变体 = 点数组(计数i)
  50.             点数组(计数i) = 点数组(计数j)
  51.             点数组(计数j) = 中转变体
  52.         End If
  53.     Next
  54. Next
  55. If 后 = -1 Then GoTo 结束

  56. '后顺序
  57. 升降序 = 变体(2)
  58. For 计数i = 0 To UBound(点数组)
  59.     For 计数j = 计数i + 1 To UBound(点数组)
  60.         
  61.         If 点数组(计数i)(先) = 点数组(计数j)(先) Then
  62.             标志 = IIf(升降序, 点数组(计数i)(后) > 点数组(计数j)(后), 点数组(计数i)(后) < 点数组(计数j)(后))
  63.             If 标志 Then
  64.                 中转变体 = 点数组(计数i)
  65.                 点数组(计数i) = 点数组(计数j)
  66.                 点数组(计数j) = 中转变体
  67.             End If
  68.         Else
  69.             Exit For
  70.         End If
  71.     Next
  72. Next
  73. 结束:
  74. orderXY = 点数组
  75. End Function


最终,可自行修改
或直接修改函数参数,变为传递选择集
否则使用前需提取点数组
或者可以修改select
使其支持Z轴排序(个人不使用,就没加)

发表于 2013-5-9 17:34:23 | 显示全部楼层
很好啊。可惜是VB的,要是lisp的就好了!
发表于 2013-5-11 10:38:14 | 显示全部楼层
学习了。
发表于 2013-11-22 15:47:50 | 显示全部楼层
mark  谢谢lz
发表于 2013-12-2 07:43:04 | 显示全部楼层
学习了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 09:49 , Processed in 0.247856 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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