本帖最后由 z13228604287 于 2021-9-26 20:21 编辑
操作方法:
鼠标左键点击三角形任意一个顶点并按住移动,由此可修改三角形。在键盘输入任意的键,可退出程序。 运行结果:
易语言实现:
窗口程序集名 | 保 留 | 保 留 | 备 注 | OPENCV | | | | 变量名 | 类 型 | 数组 | 备 注 | 点0 | 二维坐标数据结构d | | 点1 | 二维坐标数据结构d | | 点2 | 二维坐标数据结构d | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 底图 | 多维矩阵 | | | 图片 | 多维矩阵 | | | 蓝色 | 标量 | | | 绿色 | 标量 | | | 红色 | 标量 | | | 尺寸 | 尺寸数据结构i | | | a | 双精度小数型 | | | b | 双精度小数型 | | | c | 双精度小数型 | | |
点0. 赋值 (200, 500 )点1. 赋值 (400, 100 )点2. 赋值 (600, 500 )蓝色.通道1 = 255 绿色.通道2 = 255 红色.通道3 = 255 尺寸. 赋值 (15, 15 )视觉_创建窗口 (“小白鼠”, #窗口_自动尺寸 )底图. 构造Z (600, 800, #八位无符号整数_三通道, 255, 255, 255, 0 )视觉_设置鼠标事件 (“小白鼠”, &鼠标事件, 0 ) 循环判断首 () 底图. 克隆 (图片.指针 ) 视觉_线d (图片.指针, 点1, 点2, 蓝色, 2, 8, 0 ) 视觉_线d (图片.指针, 点2, 点0, 绿色, 2, 8, 0 ) 视觉_线d (图片.指针, 点1, 点0, 红色, 2, 8, 0 ) 判断 (同直线 (点0, 点1, 点2 ))  视觉_角d (图片.指针, 点0, 点1, 点2, 尺寸, 蓝色, 2, 8, 0 )   b = 计算角度 (点0, 点1, 点2 ) 视觉_放置文本Zi (图片.指针, “p0: (” + 到文本 (点1.横坐标 ) + “, ” + 到文本 (点1.纵坐标 ) + “) ” + 到文本 (b ), 10, 25, #字体_衬线_复杂, 0.5, 蓝色, 1, 8, 假) 视觉_角d (图片.指针, 点1, 点2, 点0, 尺寸, 绿色, 2, 8, 0 )   c = 计算角度 (点1, 点2, 点0 ) 视觉_放置文本Zi (图片.指针, “p1: (” + 到文本 (点2.横坐标 ) + “, ” + 到文本 (点2.纵坐标 ) + “) ” + 到文本 (c ), 10, 50, #字体_衬线_复杂, 0.5, 绿色, 1, 8, 假) 视觉_角d (图片.指针, 点2, 点0, 点1, 尺寸, 红色, 2, 8, 0 )   a = 计算角度 (点2, 点0, 点1 ) 视觉_放置文本Zi (图片.指针, “p2: (” + 到文本 (点0.横坐标 ) + “, ” + 到文本 (点0.纵坐标 ) + “) ” + 到文本 (a ), 10, 75, #字体_衬线_复杂, 0.5, 红色, 1, 8, 假) 视觉_放置文本Zi (图片.指针, “Error”, 10, 25, #字体_衬线_复杂, 0.5, 红色, 1, 8, 假)  视觉_显示图像 (“小白鼠”, 图片.指针 ) 循环判断尾 (视觉_等待按键 (3 ) = -1 )返回 (0 ) |
鼠标事件 | | | |
event | 整数型 | | | | x | 整数型 | | | | y | 整数型 | | | | flags | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 局点0 | 二维坐标数据结构d | | | 局点1 | 二维坐标数据结构d | | | 局点2 | 二维坐标数据结构d | | | 步骤 | 整数型 | | | r0 | 矩形数据结构d | | | r1 | 矩形数据结构d | | | r2 | 矩形数据结构d | | |
判断 (event = #事件_按下左键 ) 局点1. 赋值 (x, y ) r0. 赋值 (点0.横坐标 - 15, 点0.纵坐标 - 15, 30, 30 ) r1. 赋值 (点1.横坐标 - 15, 点1.纵坐标 - 15, 30, 30 ) r2. 赋值 (点2.横坐标 - 15, 点2.纵坐标 - 15, 30, 30 ) 判断 (r0. 包含 (局点1 ))   步骤 = 1   局点0 = 点0  判断 (r1. 包含 (局点1 ))   步骤 = 2   局点0 = 点1   如果真 (r2. 包含 (局点1 ))    步骤 = 3    局点0 = 点2       判断 (event = #事件_鼠标移动 ) 局点2. 赋值 (x, y ) 判断 (步骤 = 1 )  点0.横坐标 = 局点0.横坐标 + 局点2.横坐标 - 局点1.横坐标   点0.纵坐标 = 局点0.纵坐标 + 局点2.纵坐标 - 局点1.纵坐标  判断 (步骤 = 2 )  点1.横坐标 = 局点0.横坐标 + 局点2.横坐标 - 局点1.横坐标   点1.纵坐标 = 局点0.纵坐标 + 局点2.纵坐标 - 局点1.纵坐标   如果真 (步骤 = 3 )   点2.横坐标 = 局点0.横坐标 + 局点2.横坐标 - 局点1.横坐标    点2.纵坐标 = 局点0.纵坐标 + 局点2.纵坐标 - 局点1.纵坐标       如果真 (event = #事件_释放左键 )  局点1. 赋值 (0, 0 )  局点2. 赋值 (0, 0 )  步骤 = 0    |
同直线 | 逻辑型 | | |
局点0 | 二维坐标数据结构d | | | | 局点1 | 二维坐标数据结构d | | | | 局点2 | 二维坐标数据结构d | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | a | 双精度小数型 | | | b | 双精度小数型 | | | c | 双精度小数型 | | |
a = (局点0.纵坐标 - 局点1.纵坐标 )b = 局点2.横坐标 - 局点1.横坐标 c = (局点2.纵坐标 - 局点1.纵坐标 ) × 局点1.横坐标 (局点2.横坐标 - 局点1.横坐标 ) × 局点1.纵坐标 判断 (a × 局点0.横坐标 + b × 局点0.纵坐标 + c ≠ 0 ) 返回 (真) 返回 (假) |
计算角度 | 双精度小数型 | | |
局点0 | 二维坐标数据结构d | | | | 局点1 | 二维坐标数据结构d | | | | 局点2 | 二维坐标数据结构d | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | a | 双精度小数型 | | | b | 双精度小数型 | | | c | 双精度小数型 | | |
a = 求平方根 (求次方 (局点2.横坐标 - 局点1.横坐标, 2 ) + 求次方 (局点2.纵坐标 - 局点1.纵坐标, 2 )) b = 求平方根 (求次方 (局点2.横坐标 - 局点0.横坐标, 2 ) + 求次方 (局点2.纵坐标 - 局点0.纵坐标, 2 )) c = 求平方根 (求次方 (局点1.横坐标 - 局点0.横坐标, 2 ) + 求次方 (局点1.纵坐标 - 局点0.纵坐标, 2 )) 返回 (求反余弦 ( (b × b + c × c - a × a ) ÷ (2 × b × c )) × 180 ÷ #pi ) 如果真 (余弦值 > 1 或 余弦值 < -1 ) 返回 (0 )返回 ( #pi ÷ 2 - 求反正弦 (余弦值)) 如果真 (正弦值 < -1 或 正弦值 > 1 ) 返回 (0 )返回 (求反正切 (正弦值 ÷ 求平方根 (1 - 正弦值 × 正弦值)))
链接:https://pan.baidu.com/s/1VSYkILerRQsoDiIhl-6eTQ
提取码:4ypk
复制这段内容后打开百度网盘手机App,操作更方便哦
|