开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 790|回复: 39
收起左侧

[易源码分享] 机械臂联动

[复制链接]
发表于 2025-2-7 19:40:44 | 显示全部楼层 |阅读模式   **
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
本帖最后由 服毒自尽 于 2025-2-8 10:34 编辑

用gdiplus实现的机械臂联动效果,还可以优化,特别时闪烁问题,颈椎有点痛,暂时就先这样吧!
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
画布GP图形  
图像GP图像  
图片字节集4 
坐标坐标F4 
句柄整数型  
旋转角度整数型4 
初始角度整数型4 
旋转中心坐标F4 
当前关节整数型  
记录当前关节整数型  
角度增减整数型  
位置坐标F4 
长度双精度小数型4 
线程句柄整数型  
跳出逻辑型  
刷新画面逻辑型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
Gdiplus初始化 ()
初始化数据 ()
图片 [1]#a1  ' ------------------------
图片 [2]#a2
图片 [3]#a3  ' 方便后期调用
图片 [4]#a4  ' ------------------------
当前关节 = 4
长度 [2]求平方根 (求平方 (取绝对值 (旋转中心 [1].x - 旋转中心 [2].x)) + 求平方 (取绝对值 (旋转中心 [1].y - 旋转中心 [2].y)))  ' ------------------------
长度 [3]求平方根 (求平方 (取绝对值 (旋转中心 [2].x - 旋转中心 [3].x)) + 求平方 (取绝对值 (旋转中心 [2].y - 旋转中心 [3].y)))  ' 四个关节两两之间的距离,用于计算旋转后关节的坐标
长度 [4]求平方根 (求平方 (取绝对值 (旋转中心 [3].x - 旋转中心 [4].x)) + 求平方 (取绝对值 (旋转中心 [3].y - 旋转中心 [4].y)))  ' ------------------------
图像.创建自像素格式 (画板1.宽度, 画板1.高度, #像素格式_32bppARGB )  ' 有足够大的空间,防止图片旋转后超出边缘
画布.创建自图像 (图像)  ' 为后面图片绕点旋转创建矩阵提供条件
显示画面 ()
启动线程 (&子程序1, , 线程句柄)
子程序名返回值类型公开备 注
子程序1  
判断循环首 (跳出 = )
如果真 (刷新画面 = )
当前关节 = 记录当前关节
更新关节 (角度增减)
延时 (50)

判断循环尾 ()
子程序名返回值类型公开备 注
初始化数据  
坐标 [1].x = 710  ' ------------------------
坐标 [1].y = 470  ' 图片1的左边与顶边边距
坐标 [2].x = 490  ' ------------------------
坐标 [2].y = 254  ' 图片2的左边与顶边边距
坐标 [3].x = 527  ' ------------------------
坐标 [3].y = 214  ' 图片3的左边与顶边边距
坐标 [4].x = 759  ' ------------------------
坐标 [4].y = 228  ' 图片4的左边与顶边边距
位置 = 坐标  ' 用于移动图片
旋转中心 [1].x = 555  ' ------------------------
旋转中心 [1].y = 400  ' 关节1的坐标
旋转中心 [2].x = 555  ' ------------------------
旋转中心 [2].y = 275  ' 关节2的坐标
旋转中心 [3].x = 807  ' ------------------------
旋转中心 [3].y = 277  ' 关节3的坐标
旋转中心 [4].x = 1021  ' ------------------------
旋转中心 [4].y = 540  ' 关节4的坐标
初始角度 [2] = 90  ' 夹子的初始角度
初始角度 [3] = 179  ' 小臂的初始角度
初始角度 [4] = 231  ' 大臂的初始角度
[attach]1358869[/attach]
子程序名返回值类型公开备 注
求平方双精度小数型 
参数名类 型参考可空数组备 注
双精度小数型
返回 (值 × 值)
子程序名返回值类型公开备 注
更新关节  
参数名类 型参考可空数组备 注
角度整数型
变量名类 型静态数组备 注
弧度双精度小数型 
计次整数型 
偏移坐标F 
变量循环首 (当前关节, 2, -1, 计次)
旋转角度 [计次] = 旋转角度 [计次] - 角度  ' 增加或减小关节旋转角度
弧度 (初始角度 [计次] + 旋转角度 [计次]) × #pi ÷ 180  ' 角度转弧度
偏移.x = 旋转中心 [计次 - 1].x
偏移.y = 旋转中心 [计次 - 1].y
旋转中心 [计次 - 1].x = 旋转中心 [计次].x + 长度 [计次] × 求余弦 (弧度)  ' 计算上一旋转中心的x坐标例如坐标[2]的上一个就是坐标[1],使关节具有联动效果
旋转中心 [计次 - 1].y = 旋转中心 [计次].y + 长度 [计次] × 求正弦 (弧度)  ' 计算上一旋转中心的y坐标例如坐标[2]的上一个就是坐标[1],使关节具有联动效果
偏移.x = 旋转中心 [计次 - 1].x - 偏移.x
偏移.y = 旋转中心 [计次 - 1].y - 偏移.y
位置 [计次 - 1].x = 位置 [计次 - 1].x + 偏移.x
位置 [计次 - 1].y = 位置 [计次 - 1].y + 偏移.y
变量循环尾 ()
显示画面 ()
子程序名返回值类型公开备 注
显示画面  
变量名类 型静态数组备 注
计次整数型 
画板1.清除 (, , , )
计次循环首 (4, 计次)
当前关节 = 计次  ' 触发联动
判断 (计次 = 1 计次 > 当前关节)
句柄 = 载入图片 (图片 [计次])  ' 由于该图片不需要进行变换操作,所以直接载入
画板1.画图片 (句柄, 坐标 [计次].x, 坐标 [计次].y, , , )
句柄 = 载入图片 (渲染画面 (计次))  ' 由于该图片需要进行变换操作,所以先进行变换操作再载入
画板1.画图片 (句柄, 0, 0, , , )
卸载图片 (句柄)
计次循环尾 ()
画板1.画笔颜色 = #红色
画板1.画直线 (旋转中心 [1].x, 旋转中心 [1].y, 旋转中心 [2].x, 旋转中心 [2].y)  ' --------------------------------------
画板1.画直线 (旋转中心 [2].x, 旋转中心 [2].y, 旋转中心 [3].x, 旋转中心 [3].y)  ' 先连接关节的坐标再画关节,避免线被画到圆上
画板1.画直线 (旋转中心 [3].x, 旋转中心 [3].y, 旋转中心 [4].x, 旋转中心 [4].y)
画板1.画笔颜色 = #蓝色
画板1.画椭圆 (旋转中心 [1].x - 5, 旋转中心 [1].y - 5, 旋转中心 [1].x + 5, 旋转中心 [1].y + 5)  ' --------------------------------------
画板1.画椭圆 (旋转中心 [2].x - 5, 旋转中心 [2].y - 5, 旋转中心 [2].x + 5, 旋转中心 [2].y + 5)  ' 画圆表示关节
画板1.画椭圆 (旋转中心 [3].x - 5, 旋转中心 [3].y - 5, 旋转中心 [3].x + 5, 旋转中心 [3].y + 5)
画板1.画椭圆 (旋转中心 [4].x - 5, 旋转中心 [4].y - 5, 旋转中心 [4].x + 5, 旋转中心 [4].y + 5)
子程序名返回值类型公开备 注
渲染画面字节集 
参数名类 型参考可空数组备 注
关节整数型
变量名类 型静态数组备 注
位图GP位图 
部件字节集 
矩阵GP矩阵 
计次整数型 
画布.清除 ()  ' 将gp图形定义为程序集变量,避免频繁的创建与销毁,所以要在此处清除上一次的数据
图像.清除 ()  ' 将gp图像定义为程序集变量,避免频繁的创建与销毁,所以要在此处清除上一次的数据
位图.创建自字节集 (图片 [关节])  ' 创建一个gp位图,用于下面进行旋转变换操作
矩阵.创建 ()  ' 创建一个gp矩阵,用于下面使用旋转变换操作的功能
矩阵.旋转在 (旋转角度 [关节], 旋转中心 [当前关节], )  ' 变换操作
画布.变形置矩阵 (矩阵)  ' 将变换操作应用到图形上
画布.画图像 (位图, 位置 [关节].x, 位置 [关节].y)  ' 得到变换操作的结果
部件 = 图像.保存到字节集 ( #图像格式_PNG )  ' 获得变换操作后的图片数据
位图.销毁 ()
矩阵.销毁 ()
返回 (部件)
子程序名返回值类型公开备 注
__启动窗口_将被销毁  
跳出 = 真
画布.销毁 ()
图像.销毁 ()
关闭线程句柄 (线程句柄)
Gdiplus关闭 ()
子程序名返回值类型公开备 注
_按钮1_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
记录当前关节 = 2  ' 指定关节,以此关节为旋转中心
角度增减 = -1
刷新画面 = 真
子程序名返回值类型公开备 注
_按钮1_鼠标左键被放开逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
刷新画面 = 假
子程序名返回值类型公开备 注
_按钮2_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
记录当前关节 = 2  ' 指定关节,以此关节为旋转中心
角度增减 = 1
刷新画面 = 真
子程序名返回值类型公开备 注
_按钮2_鼠标左键被放开逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
刷新画面 = 假
子程序名返回值类型公开备 注
_按钮3_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
记录当前关节 = 3  ' 指定关节,以此关节为旋转中心
角度增减 = -1
刷新画面 = 真
子程序名返回值类型公开备 注
_按钮3_鼠标左键被放开逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
刷新画面 = 假
子程序名返回值类型公开备 注
_按钮4_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
记录当前关节 = 3  ' 指定关节,以此关节为旋转中心
角度增减 = 1
刷新画面 = 真
子程序名返回值类型公开备 注
_按钮4_鼠标左键被放开逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
刷新画面 = 假
子程序名返回值类型公开备 注
_按钮5_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
记录当前关节 = 4  ' 指定关节,以此关节为旋转中心
角度增减 = -1
刷新画面 = 真
子程序名返回值类型公开备 注
_按钮5_鼠标左键被放开逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
刷新画面 = 假
子程序名返回值类型公开备 注
_按钮6_鼠标左键被按下逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
记录当前关节 = 4  ' 指定关节,以此关节为旋转中心
角度增减 = 1
刷新画面 = 真
子程序名返回值类型公开备 注
_按钮6_鼠标左键被放开逻辑型 
参数名类 型参考可空数组备 注
横向位置整数型
纵向位置整数型
功能键状态整数型
刷新画面 = 假


i支持库列表   支持库注释   
EThread多线程支持库

模块.zip

2.27 MB, 下载次数: 5, 下载积分: 精币 -2 枚

2.JPG

我这里运行起来是这样的,没有优化,所以会闪烁

我这里运行起来是这样的,没有优化,所以会闪烁

评分

参与人数 2好评 +2 精币 +5 收起 理由
airaz + 1 + 3 YYDS~!
gytxtx + 1 + 2 新技能已get√

查看全部评分


结帖率:99% (71/72)

签到天数: 22 天

发表于 2025-2-15 17:58:41 | 显示全部楼层   重庆市重庆市
本帖最后由 cqcc 于 2025-2-15 18:07 编辑

但是是一的时候就直接画出来了,为何大于1的时候,底座还会跟着旋转呢?如果排除了,就看不到底座,他会一直闪烁,不按鼠标他就看不到底座。
回复 支持 反对

使用道具 举报

结帖率:99% (71/72)

签到天数: 22 天

发表于 2025-2-14 07:25:11 | 显示全部楼层   重庆市重庆市
那句排除代码没理解,就是大于那个判断吧?

点评

底座的数组下标是一所以直接画出来,不用旋转,其他的需要旋转的得判断是绕哪个点旋转,所以要小于当前的关节点   **  发表于 2025-2-15 14:31
回复 支持 反对

使用道具 举报

结帖率:99% (71/72)

签到天数: 22 天

发表于 2025-2-13 19:24:39 | 显示全部楼层   重庆市重庆市
jixiebi.e (1.58 MB, 下载次数: 0)

点评

就是矩阵旋转的时候给带动了,所以我直接给他排除了,不参与旋转   **  发表于 2025-2-13 23:52
回复 支持 反对

使用道具 举报

结帖率:99% (71/72)

签到天数: 22 天

发表于 2025-2-9 18:38:32 | 显示全部楼层   重庆市重庆市
我是啥也没改,直接下载打开运行,用的你的模块,还是不行,跟上次我发的图一样!

点评

这我就搞不懂了,就像之前我在平板电脑上写的一个动态壁纸,每次关机重启以后都不能正常运行,必须要重新编译,我现在的电脑也是经常找不到鼠标图标,不知道是不是电脑的问题   **  发表于 2025-2-9 19:02
回复 支持 反对

使用道具 举报

结帖率:99% (71/72)

签到天数: 22 天

发表于 2025-2-9 18:38:19 | 显示全部楼层   重庆市重庆市
我是啥也没改,直接下载打开运行,用的你的模块,还是不行,跟上次我发的图一样!
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 25 天

发表于 2025-2-9 09:29:06 | 显示全部楼层   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:99% (71/72)

签到天数: 22 天

发表于 2025-2-8 22:51:37 | 显示全部楼层   重庆市重庆市
我怎么用你的模块,还是不行呢?

点评

其他人有遇到这情况不   **  发表于 2025-2-9 16:35
不可能吧!代码没改过吗?   **  发表于 2025-2-9 16:35
回复 支持 反对

使用道具 举报

签到天数: 20 天

发表于 2025-2-8 14:34:30 | 显示全部楼层   重庆市重庆市
这个是干嘛用的
回复 支持 反对

使用道具 举报

签到天数: 2 天

 楼主| 发表于 2025-2-8 10:36:01 | 显示全部楼层   **
有张图片有点问题已经更新了,模块已打包  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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