永恒的灌水帝吧 关注:590贴子:1,695
  • 15回复贴,共1

[Zinc] Common库 -- 基础类库, 涉及数据结构, 向量等

只看楼主收藏回复

下载地址: http://pan.baidu.com/s/1eQjFsga
Common库, v1.11, Thens
说明: 里面包含的代码并非都是我的原创, 像Argb是来wc3c.net的Vexorian的ARGB库, 不过我稍微修改了下代码, Vector3则是参照Anitarf的Vector库, 还有某些函数是参照开源的游戏库编写的.
Common库主要是为了提供一些简单易用的数据结构, 以及一些基础的类. 其中包含的类(结构体)有: Math, StringUtil, Convert, Node, List, Tree, Table, Argb, Vector2, Vector3, Line2, Line3. 下面说说各个类的API, 及使用方法.


1楼2015-01-31 20:58回复
    [Math] 算术计算常用的库
    属性:
    Math.MaxInt, 表示Jass能表示的整数最大值2147483647= 0x7FFFFFFF
    Math.MinInt, 表示整数最小值-2147483648= -0x80000000
    Math.Tolerance, 表示Jass的精确度, 为0.000001, 即小数点后6位.
    Math.PI, 表示pi的值, 3.1415927
    Math.E, 表示自然常数e的值, 2.7182818
    Math.Random->real, 返回一个介于0和1之间的随机数, 请注意, 这是个虚拟属性, 而不是方法
    方法:
    Math.GetRandomReal (real low, real high)->real, 返回介于low和high之间的随机小数
    Math.GetRandomInt (integer low, integer high)->integer, 返回介于low和high之间的随机整数
    Math.Sign (real r)->real, 返回r的符号类型, 若r< 0则返回-1.0, r= 0返回0.0, r>0返回1.0
    Math.ISign (integer r)->real, 同上, 不过参数和返回值都是整数
    Math.Abs (real r)->real, 返回r的绝对值
    Math.IAbs (integer r)->integer, 同上, 参数和返回值都是整数
    Math.Min (real a, real b)->real 返回a, b的最小值
    Math.IMin (integer a, integer b)->integer, 同上, ...整数
    Math.Max (real a, real b)->real, 返回最大值
    Math.IMin (integer a, integer b)->integer, 同上, ...整数
    Math.Clamp (real value, real low, real high)->real, 返回在low和high之间的最接近value的数
    Math.IClamp (integer value, integer low, integer high)->integer, 同上...整数
    Math.Equals (real a, real b, real tolerance)->boolean, 判断在误差为tolerance时,a是否近似和b相等
    Math.IsZero (real r)->boolena, 判断在误差允许的范围内, 实数r是否和0相等
    Math.ToRadians (real r)->real, 将角度转换成弧度
    Math.ToDegrees (real r)->real, 将弧度转换成角度
    Math.Sin,...Cos, Tan, Asin, Acos, Atan, Atan2, Sinh, Cosh, Tanh, Ceil, Floor, Round不解释
    Math.Sqr (real r)->real, 平方
    Math.Sqrt (real r)->real, 平方根
    Math.InvSqrt (real r)->real, 平方根的倒数
    Math.Cbr (real r)->real, 立方
    Math.Cbrt (real r)->real, 立方根
    Math.InvCbrt (real r)->real, 立方根的倒数
    Math.Power (real a, real power)->real, 乘方
    Math.Exp (real power)->real, 常数e的幂
    Math.Log (real r, real a)->real, log运算
    Math.Lg (real r)->real, log10
    Math.Ln (real r)->real, ln
    Math.Hypot (real x, real y)->real, 返回坐标(x, y)到原点的距离
    Math.Modulo (real dividend, real divisor)->real, 模
    Math.IModulo (integer dividend, integer divisor)->integer, 同上,... 整数
    Math.Rint (real r)->real, 四舍五入运算, 与Math.Round不同的是, 若r得小数部分为0.5, 返回值为离r最近的偶数
    IEEERemainder (real dividend, real divisor)->real, IEEE754标准的模运算
    在设计这个Math库时, 我特意测试了一些Jass的精确度, 以及整数边界, 发现了它的很多特点.
    当一个正整数超过2147483647, 则会溢出, 变为负数, 也就是2147483648= 2147483647+ 1= -2147483648. 但是这溢出并不会算是错误, 只有当这个正整数大于0xFFFFFFFF= -1时才会引发错误.
    另外, jass的==符号在比较小数时, 是非常不精确的. 0== 0.0009甚至是true, 0== 0.001则是false. 不过!=号却非常精确, 也就是说如果要确定小数a和b是否绝对相等, 正确的做法是!(a!= b), 而不是直接写上a== b


    2楼2015-01-31 21:46
    回复
      [StringUtil] 字符串的工具函数
      里面全是静态函数.
      Render (string str, Argb color)->string, 将字符串str染色
      HashCode (string str)->integer, 返回str的哈希值
      Length (string str)->integer, 返回str的长度
      Contains (string str, string pattern)->boolean, str是否包含了pattern
      StartsWith (string str, string pattern)->boolean, str是否是以pattern开头的
      EndsWith (string str, string pattern)->boolean, str是否是以pattern结尾的
      Compare (string str, string str2)->integer, 比较两个字符串的大小
      IndexOf (string str, string sub)->integer, 字符串sub在str中第一次出现的索引位置
      LastIndexOf (string str, string sub)->integer, 字符串sub在str中倒数第一次出现的索引位置
      CharAt (string str, integer index)->string, 返回字符串str中索引为index的单字符串
      Slice (string str, integer begin, integer end)->string, 从索引begin, end间截取字符串
      SubString (string str, integer begin, integer length)->string, 从索引begin开始, 截取长度为length的字符串
      SubStr (string str, integer length)->string, 从开头截取长度为length的字符串, 若length<0, 表示在尾部截取
      Replace (string str, string old, string new)->string, 替换第一个匹配的字符串
      LastReplace (string str, string old, string new)->string, 替换倒数第一个匹配的字符串
      ReplaceAll (string str, string old, string new)->string, 替换所有匹配的字符串
      ToLowerCase (string str)->string, 转换成小写
      ToUpperCase (string str)->string, 转换成大写
      Trim (string str)->string, 去除首尾的空白字符
      Split (string str, string delimiters)->StringArray, 分隔成字符串数组
      Join (StringArray arr, string separator)->string, 连接字符串数组


      3楼2015-01-31 21:57
      回复
        [Convert] 数据类型转换
        以下都是静态函数.
        S2Id (string s)->integer, 将字符串转换成整数, 转换进制为256
        Id2S (integer id)->string, 将整数转换成字符串, 转换进制为256
        S2Int (string s, integer base)->integer, 将字符串转换成整数, 第二个参数表示转换进制, 不得超过64
        Int2S (integer i, integer base)->string, 将整数转换成字符串, 第二个参数表示转换进制, 转换进制不得超过64
        Real2S (real r, integer count)->string, 将实数转换成字符串, 第二个参数表示保留的小数位数
        I2B, R2B, S2B, B2I, B2R, B2S, I2R, I2S, R2I, R2S, S2I, S2R, 布尔, 整数, 小数, 字符串之间的常规转换


        4楼2015-01-31 22:04
        回复
          懒得写了, 也不知道有没有人. 想说明的是, Node, List, Tree, Table, 都是基本的数据结构类(结构体).
          Node是List和Table的基础, 是一个多链表. List可以表示的数据结构有很多: 栈(Stack), 队列(Queue), 多维数组(Array), 甚至是图(Graph). Tree则表示树. Table是一个强化的哈希表, 也可以当多维数组来使用, 可以用来保存和清空任意句柄.
          然后就是Vector2, Vector3了, Vector3继承至Vector2, 但是你看不到Vector3类中的extends关键词, 因为这是一种代理继承.每一个Vector3都是一个Vector2, 并且每一个Vector2都可以是Vector3, 所以Vector3的对象也可以使用Vector2的方法和属性.


          5楼2015-01-31 22:13
          收起回复
            厉害


            IP属地:江苏来自Android客户端7楼2015-02-10 21:38
            回复
              惊了


              IP属地:广东8楼2015-03-05 16:42
              收起回复
                有趣


                IP属地:上海9楼2015-10-12 19:52
                回复
                  洛阳铲


                  IP属地:陕西来自Android客户端10楼2015-10-13 01:06
                  回复
                    Id2S (S2Id (I000)) 将ID转换成整数,将整数转换成字符串,输出结果是".001"而不是“I000”,啥情况?


                    IP属地:北京11楼2017-06-23 12:35
                    收起回复
                      终于是把这帖子吐出来


                      IP属地:上海12楼2019-12-01 12:11
                      回复
                        这是。。jass语言?


                        IP属地:北京来自Android客户端13楼2020-03-16 16:18
                        回复