酷德网

酷制造~
查看: 35|回复: 1

CODESYS中SM3_Math库中的向量运算

[复制链接]
  • TA的每日心情
    擦汗
    2019-8-13 14:13
  • 签到天数: 32 天

    [LV.5]常住居民I

    发表于 2020-6-17 10:45:16 | 显示全部楼层 |阅读模式
    SMC_VECTOR3D
    SMC_VECTOR3D是SM3_Math库中的3维向量数据结构,形式如下:
    [C] 纯文本查看 复制代码
    TYPE SMC_VECTOR3D :
    STRUCT
        dX:LREAL;
        dY:LREAL;
        dZ:LREAL;
    END_STRUCT
    END_TYPE
    SMC_V3_Add (FUN)
    功能:两个3维向量的加法
    参数:
    bVbGD9g.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        vDst: SM3M.SMC_Vector3D;
        vLhs: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        vRhs: SM3M.SMC_Vector3D:=(dX := 2, dY := 4, dZ := 6);
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    SMC_V3_Add(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs);
    执行结果:
    bVbGD9J.jpg
    SMC_V3_Angle (FUN)
    功能:计算两个3维向量之间的角度(以弧度为单位)。注意:如果向量之一的长度为零,则结果为零。返回的值在[0 .. pi]范围内。
    参数:
    bVbGEix.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        v1: SM3M.SMC_Vector3D:=(dX := 1, dY := 0, dZ := 0);
        v2: SM3M.SMC_Vector3D:=(dX := 0, dY := 1, dZ := 0);
        angle: LREAL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    angle:=SMC_V3_Angle(v1:= v1, v2:= v2);
    执行结果:
    bVbGEi4.jpg
    SMC_V3_CloseRel (FUN)
    功能:判断两个向量a和b的相对差是否最大为epsilon,即|a-b|<= eps * MAX(|a|,|b|)是否成立。|.| 表示欧几里得范数。
    参数:
    bVbGEki.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        a: SM3M.SMC_Vector3D:=(dX := 1, dY := 0, dZ := 0);
        b: SM3M.SMC_Vector3D:=(dX := 0.99, dY := 0.01, dZ := 0);
        result: BOOL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    result:= SMC_V3_CloseRel(a:= a, b:= b, eps:= 0.1);
    执行结果:
    bVbGEkI.jpg
    SMC_V3_Cross (FUN)
    功能:3维向量的叉乘,即求同时垂直两个向量的向量:vDst:= vLhs x vRhs。
    参数:
    bVbGW1o.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        vDst: SM3M.SMC_Vector3D;
        vLhs: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        vRhs: SM3M.SMC_Vector3D:=(dX := 2, dY := 4, dZ := 6);
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    SMC_V3_Sub(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs);
    执行结果:
    bVbGW3c.jpg
    SMC_V3_DistE (FUN)
    功能:计算两个向量的欧式距离。
    参数:
    bVbGW52.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        v0: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        v1: SM3M.SMC_Vector3D:=(dX := 2, dY := 4, dZ := 6);
        DistE:LREAL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    DistE := SMC_V3_DistE(v0:= v0, v1:= v1);
    执行结果:
    bVbGXe0.jpg
    SMC_V3_Dot (FUN)
    功能:计算两个向量点乘。
    参数:
    bVbGXga.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        v1: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        v2: SM3M.SMC_Vector3D:=(dX := 2, dY := 4, dZ := 6);
        Dot:LREAL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    Dot := SMC_V3_Dot(v1:= v1, v2:= v2);
    执行结果:
    bVbGXgN.jpg
    SMC_V3_DotSq (FUN)
    功能:计算向量与自身的点乘。
    参数:
    bVbGXhq.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        v: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        DotSq:LREAL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    DotSq := SMC_V3_DotSq(v:= v);
    执行结果:
    bVbGXhw.jpg
    SMC_V3_IsScalarMultiple
    功能:判断是否存在实数lambda,使得v = lambda * u,即判断两个向量是否共线。(请注意,lambda可以为零或负值。)
    参数:
    bVbGXkz.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        u: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        v: SM3M.SMC_Vector3D:=(dX := 2, dY := 6, dZ := 9.9);
        dEps:BOOL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    dEps :=SMC_V3_IsScalarMultiple(u:= u, v:= v, dEps:= 0.1);
    执行结果:
    bVbGXl8.jpg
    SMC_V3_Lint (FUN)
    功能:在两个向量之间线性内插:vDst:= vLhs *(1-lambda)+ vRhs * lambda。
    参数:
    bVbG35X.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        vDst: SM3M.SMC_Vector3D;
        vLhs: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        vRhs: SM3M.SMC_Vector3D:=(dX := 2, dY := 4, dZ := 6);
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    SMC_V3_Lint(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs, lambda:= 0.1);
    执行结果:
    bVbG36p.jpg
    SMC_V3_MAdd (FUN)
    功能:向量与数乘向量的加法:vDst := vLhs + d * vRhs.
    参数:
    bVbGEce.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        vDst: SM3M.SMC_Vector3D;
        vLhs: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        vRhs: SM3M.SMC_Vector3D:=(dX := 2, dY := 4, dZ := 6);
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    SMC_V3_MAdd(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs,d:=d);
    执行结果:
    bVbGEck.jpg
    SMC_V3_Max_Cmp (FUN)
    功能:计算两个向量的按分量最大值。两个向量必须具有相同的维度。
    参数:
    bVbG37k.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        vDst: SM3M.SMC_Vector3D;
        vLhs: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        vRhs: SM3M.SMC_Vector3D:=(dX := 3, dY := 5, dZ := 1);
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    SMC_V3_Max_Cmp(vDst:= vDst, v0:= v0, v1:= v1);
    执行结果:
    bVbG38j.jpg
    SMC_V3_Min_Cmp (FUN)
    功能:计算两个向量的按分量最小值。 两个向量必须具有相同的维度。
    参数:
    bVbG37k.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        vDst: SM3M.SMC_Vector3D;
        vLhs: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        vRhs: SM3M.SMC_Vector3D:=(dX := 3, dY := 5, dZ := 1);
        d:LREAL:=2;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    SMC_V3_Min_Cmp(vDst:= vDst, v0:= v0, v1:= v1);
    执行结果:
    bVbG4aY.jpg
    SMC_V3_Mult (FUN)
    功能:将向量乘以标量:vDst:= d * vSrc。
    参数:
    bVbG4tF.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        vDst: SM3M.SMC_Vector3D;
        vSrc: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);    
        d: LREAL:=2;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    SMC_V3_Mult(vDst:= vDst, vSrc:= vSrc, d:= d);
    执行结果:
    bVbG4us.jpg
    SMC_V3_NormE (FUN)
    功能:计算向量的欧几里得范数
    参数:
    bVbG4ve.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        v: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);    
        NormE: LREAL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    NormE:=SMC_V3_NormE(v:= v);
    执行结果:
    bVbG4vy.jpg
    SMC_V3_NormMax (FUN)
    功能:计算向量的最大范数。
    参数:
    bVbG4wG.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        v: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);    
        NormMax: LREAL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    NormMax:=SMC_V3_NormMax(v:= v);
    执行结果:
    bVbG4w3.jpg
    SMC_V3_Serialize (FUN)
    功能:向量序列化。
    参数:
    bVbG4ye.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        v: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);    
        stream: SM3M.SM0.OutStringStream;
        result:BOOL;
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    result:=SMC_V3_Serialize(stream:= stream, v:= v);
    执行结果:
    bVbG4x6.jpg
    SMC_V3_Sub (FUN)
    功能:两个3维向量的减法
    参数:
    bVbGEag.jpg
    示例:
    声明部分:
    [C] 纯文本查看 复制代码
    PROGRAM PLC_PRG
    VAR
        vDst: SM3M.SMC_Vector3D;
        vLhs: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
        vRhs: SM3M.SMC_Vector3D:=(dX := 2, dY := 4, dZ := 6);
    END_VAR
    实现部分:
    [C] 纯文本查看 复制代码
    SMC_V3_Sub(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs);
    执行结果:
    bVbGEaI.jpg
    未完待续。。。

    打赏鼓励一下!
    +10
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    6 天前
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 7 天前 | 显示全部楼层
    主要哪里用到,空间三维向量的运算会用在哪里?
    打赏鼓励一下!
    +10
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|小黑屋|手机版|Archiver|酷德论坛 ( 苏ICP备16065247号 )|网站地图

    GMT+8, 2020-7-14 05:47 , Processed in 0.154597 second(s), 50 queries , MemCache On.

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

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