SMC_VECTOR3D
SMC_VECTOR3D是SM3_Math库中的3维向量数据结构,形式如下:
TYPE SMC_VECTOR3D :
STRUCT
dX:LREAL;
dY:LREAL;
dZ:LREAL;
END_STRUCT
END_TYPE
SMC_V3_Add (FUN)
功能:两个3维向量的加法
参数:
示例:
声明部分:
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
实现部分:
SMC_V3_Add(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs);
执行结果:
SMC_V3_Angle (FUN)
功能:计算两个3维向量之间的角度(以弧度为单位)。注意:如果向量之一的长度为零,则结果为零。返回的值在[0 .. pi]范围内。
参数:
示例:
声明部分:
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
实现部分:
angle:=SMC_V3_Angle(v1:= v1, v2:= v2);
执行结果:
SMC_V3_CloseRel (FUN)
功能:判断两个向量a和b的相对差是否最大为epsilon,即|a-b|<= eps * MAX(|a|,|b|)是否成立。|.| 表示欧几里得范数。
参数:
示例:
声明部分:
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
实现部分:
result:= SMC_V3_CloseRel(a:= a, b:= b, eps:= 0.1);
执行结果:
SMC_V3_Cross (FUN)
功能:3维向量的叉乘,即求同时垂直两个向量的向量:vDst:= vLhs x vRhs。
参数:
示例:
声明部分:
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
实现部分:
SMC_V3_Sub(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs);
执行结果:
SMC_V3_DistE (FUN)
功能:计算两个向量的欧式距离。
参数:
示例:
声明部分:
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
实现部分:
DistE := SMC_V3_DistE(v0:= v0, v1:= v1);
执行结果:
SMC_V3_Dot (FUN)
功能:计算两个向量点乘。
参数:
示例:
声明部分:
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
实现部分:
Dot := SMC_V3_Dot(v1:= v1, v2:= v2);
执行结果:
SMC_V3_DotSq (FUN)
功能:计算向量与自身的点乘。
参数:
示例:
声明部分:
PROGRAM PLC_PRG
VAR
v: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
DotSq:LREAL;
END_VAR
实现部分:
DotSq := SMC_V3_DotSq(v:= v);
执行结果:
SMC_V3_IsScalarMultiple
功能:判断是否存在实数lambda,使得v = lambda * u,即判断两个向量是否共线。(请注意,lambda可以为零或负值。)
参数:
示例:
声明部分:
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
实现部分:
dEps :=SMC_V3_IsScalarMultiple(u:= u, v:= v, dEps:= 0.1);
执行结果:
SMC_V3_Lint (FUN)
功能:在两个向量之间线性内插:vDst:= vLhs *(1-lambda)+ vRhs * lambda。
参数:
示例:
声明部分:
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
实现部分:
SMC_V3_Lint(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs, lambda:= 0.1);
执行结果:
SMC_V3_MAdd (FUN)
功能:向量与数乘向量的加法:vDst := vLhs + d * vRhs.
参数:
示例:
声明部分:
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
实现部分:
SMC_V3_MAdd(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs,d:=d);
执行结果:
SMC_V3_Max_Cmp (FUN)
功能:计算两个向量的按分量最大值。两个向量必须具有相同的维度。
参数:
示例:
声明部分:
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
实现部分:
SMC_V3_Max_Cmp(vDst:= vDst, v0:= v0, v1:= v1);
执行结果:
SMC_V3_Min_Cmp (FUN)
功能:计算两个向量的按分量最小值。 两个向量必须具有相同的维度。
参数:
示例:
声明部分:
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
实现部分:
SMC_V3_Min_Cmp(vDst:= vDst, v0:= v0, v1:= v1);
执行结果:
SMC_V3_Mult (FUN)
功能:将向量乘以标量:vDst:= d * vSrc。
参数:
示例:
声明部分:
PROGRAM PLC_PRG
VAR
vDst: SM3M.SMC_Vector3D;
vSrc: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
d: LREAL:=2;
END_VAR
实现部分:
SMC_V3_Mult(vDst:= vDst, vSrc:= vSrc, d:= d);
执行结果:
SMC_V3_NormE (FUN)
功能:计算向量的欧几里得范数
参数:
示例:
声明部分:
PROGRAM PLC_PRG
VAR
v: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
NormE: LREAL;
END_VAR
实现部分:
NormE:=SMC_V3_NormE(v:= v);
执行结果:
SMC_V3_NormMax (FUN)
功能:计算向量的最大范数。
参数:
示例:
声明部分:
PROGRAM PLC_PRG
VAR
v: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
NormMax: LREAL;
END_VAR
实现部分:
NormMax:=SMC_V3_NormMax(v:= v);
执行结果:
SMC_V3_Serialize (FUN)
功能:向量序列化。
参数:
示例:
声明部分:
PROGRAM PLC_PRG
VAR
v: SM3M.SMC_Vector3D:=(dX := 1, dY := 3, dZ := 5);
stream: SM3M.SM0.OutStringStream;
result:BOOL;
END_VAR
实现部分:
result:=SMC_V3_Serialize(stream:= stream, v:= v);
执行结果:
SMC_V3_Sub (FUN)
功能:两个3维向量的减法
参数:
示例:
声明部分:
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
实现部分:
SMC_V3_Sub(vDst:= vDst, vLhs:= vLhs, vRhs:= vRhs);
执行结果:
未完待续。。。