Lua脚本
Lua标准手册
VG3扩展功能手册
VG3 Lua脚本Demo
VG3 Lua手册索引
Lua脚本公共库
PublicDataFunc
PublicMathFunc
LuaModbus读写应用示例
通过TCP触发流程与写入全局变量
【技术文档】VG3 Lua API 技术文档
【技术文档】LuaGlobalVar — 全局变量操作
【技术文档】ZMotion - 运动控制模块
本站点使用 MrDoc 构建
-
+
PublicMathFunc
```lua local PublicMathFunc={} --说明: 计算点与点之间的距离 --输入 point1 第一个点 浮点数点 --输入 point2 第二个点 浮点数点 --返回值 val 点与点之间的距离 浮点数 function PublicMathFunc:DistanceP2P(point1,point2) return math.sqrt((point2.x - point1.x)^2 + (point2.y - point1.y)^2) end --说明: 计算点与直线之间的垂足和距离 --输入 point 点 浮点数点 --输入 line 直线 直线 --返回值 point1 点到直线之间的垂足 浮点数点 --返回值 distance 直线垂足到点之间的距离 浮点数 function PublicMathFunc:DistanceP2L(point,line) local v = { line.xEnd - line.xStart, line.yEnd - line.yStart} -- 方向向量 local sp = {point.x - line.xStart, point.y - line.yStart} -- 向量 SP local len2 = v[1] * v[1] + v[2] * v[2] if len2 == 0 then -- 直线退化为点,垂足就是那个点 return line.xStar, line.yStar, math.sqrt(sp[1] ^2 + sp[2] ^2) end local t = (sp[1] * v[1] + sp[2] * v[2])/ len2 -- 投影系数 local qx = line.xStart + t * v[1] -- 垂足坐标 local qy = line.yStart + t * v[2] local d = math.sqrt((point.x - qx)^2 + (point.y - qy)^2) return cyRealPoint(qx,qy), d end --说明: 计算直线与直线之间的交点、夹角和是否平行 --输入 line1 直线1 直线 --输入 line2 直线2 直线 --返回值 point1 直线1与直线2的交点 浮点数点 --返回值 angle 直线1与直线2的夹角 浮点数 --返回值 isParallel 直线1与直线2的平行 布尔值 function PublicMathFunc:AngleL2L(line1,line2) local d1 = {line1.xEnd-line1.xStart, line1.yEnd-line1.yStart} local d2 = {line2.xEnd-line2.xStart, line2.yEnd-line2.yStart} local denom =d1[1]*d2[2] - d1[2]*d2[1] -- 平行或共线 if math.abs(denom) < 1e-12 then return nil, 0, true -- 无唯一交点,夹角 0° end local p21 = {line2.xStart-line1.xStart,line2.yStart-line1.yStart} local t = p21[1]*d2[2] - p21[2]*d2[1]/ denom -- 交点在线1 上的参数 local ix = line1.xStart + t * d1[1] local iy = line1.yStart + t * d1[2] -- 锐角夹角(0~90°) local dot_d1_d2=d1[1]*d2[1] + d1[2]*d2[2] local len_d1=math.sqrt(d1[1]*d1[1] + d1[2]*d1[2]) local len_d2=math.sqrt(d2[1]*d2[1] + d2[2]*d2[2]) local cosAngle = math.abs(dot_d1_d2) / (len_d1 * len_d2) -- 防止浮点误差越界 cosAngle = math.max(-1, math.min(1, cosAngle)) local angleDeg = math.deg(math.acos(cosAngle)) return cyRealPoint(ix, iy) , angleDeg, false end return PublicMathFunc ```
唐红
2025年12月15日 13:37
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码