|
操作方法:
运行程序,在空白图片上用鼠标左键点击一下并释放,这会画出线外的蓝点。然后再点击鼠标左键并按住移动,由此画出绿线。此次释放鼠标左键后,程序自动根据点和线画出红色的垂线,并输出点、线、垂线和距离。若垂足不在线上,程序自动画对应的蓝色延长线。鼠标右键点击可擦掉已画出的图像,由此可按前面步骤重复画图。按键盘任意键可退出程序。
运行结果:
实现:
窗口程序集名 | 保 留 | 保 留 | 备 注 | OPENCV | | | 变量名 | 类 型 | 数组 | 备 注 | 点 | 二维坐标数据结构i | | 线起点 | 二维坐标数据结构i | | 线终点 | 二维坐标数据结构i | | 空白图片 | 多维矩阵 | |
值. 赋值 (255, 255, 255, 0 )视觉_创建窗口 (“小白鼠”, #窗口_自动尺寸 )空白图片. 构造 (400, 600, #八位无符号整数_三通道, 值 ) 视觉_显示图像 (“小白鼠”, 空白图片.指针 )视觉_设置鼠标事件 (“小白鼠”, &鼠标事件, 0 ) 视觉_等待按键 (0 )返回 (0 ) |
鼠标事件 | | | |
event | 整数型 | | | | x | 整数型 | | | | y | 整数型 | | | | flags | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | p1 | 二维坐标数据结构d | | | p2 | 二维坐标数据结构d | | | w | 双精度小数型 | | | h | 双精度小数型 | | | 步骤 | 整数型 | | | 判断 (event = #事件_按下左键 ) 如果 (步骤 = 0 )点. 赋值 (x, y ) 步骤 = 1 如果真 (步骤 = 1 )线起点. 赋值 (x, y ) 线终点. 赋值 (x, y ) 步骤 = 2 判断 (event = #事件_鼠标移动 ) 如果真 (步骤 = 2 )线终点. 赋值 (x, y ) 判断 (event = #事件_释放左键 ) 如果真 (步骤 = 2 )步骤 = 3 如果真 (event = #事件_按下右键 ) 步骤 = 0 点. 赋值 (0, 0 ) 线起点. 赋值 (0, 0 ) 线终点. 赋值 (0, 0 ) 画图 (步骤)变量名 | 类 型 | 静态 | 数组 | 备 注 | 显示图 | 多维矩阵 | | | 蓝色 | 标量 | | | 绿色 | 标量 | | | 红色 | 标量 | | | 淡蓝色 | 标量 | | | 长度 | 双精度小数型 | | | 垂足坐标 | 二维坐标数据结构i | | | 点1 | 二维坐标数据结构i | | | 点2 | 二维坐标数据结构i | | |
定义颜色 蓝色.通道1 = 255 绿色.通道2 = 255 红色.通道3 = 255 淡蓝色. 赋值 (255, 255, 0, 0 )空白图片. 复制 (显示图.指针 ) 视觉_圆圈i (显示图.指针, 点, 2, 蓝色, 2, 8, 0 ) 视觉_线i (显示图.指针, 线起点, 线终点, 绿色, 2, 8, 0 )长度 = 视觉_两点距离 (线起点.横坐标, 线起点.纵坐标, 线终点.横坐标, 线终点.纵坐标 )如果真 (步骤 = 3 ) 如果真 (线起点.横坐标 ≠ 0 且 线起点.纵坐标 ≠ 0 且 长度 < 50 ) 视觉_放置文本Zi (显示图.指针, “line too short!”, 20, 80, #字体_衬线_复杂, 1, 红色, 1, 8, 假)视觉_垂足i (点.横坐标, 点.纵坐标, 线起点.横坐标, 线起点.纵坐标, 线终点.横坐标, 线终点.纵坐标, 垂足坐标) 视觉_线i (显示图.指针, 垂足坐标, 点, 红色, 2, 8, 0 ) 画淡蓝色的延长线 点1 = 条件运算 (线起点.横坐标, 线终点.横坐标 )点2 = 条件运算 (线终点.横坐标, 线起点.横坐标 )判断 (垂足坐标.横坐标 < 点1.横坐标 )视觉_虚线i (显示图.指针, 垂足坐标, 点1, 15, 淡蓝色, 2, 8, 0 )判断 (垂足坐标.横坐标 > 点2.横坐标 )视觉_虚线i (显示图.指针, 垂足坐标, 点2, 15, 淡蓝色, 2, 8, 0 )点1 = 条件运算 (线起点.纵坐标, 线终点.纵坐标 )点2 = 条件运算 (线终点.纵坐标, 线起点.纵坐标 )判断 (垂足坐标.纵坐标 < 点1.纵坐标 )视觉_虚线i (显示图.指针, 垂足坐标, 点1, 15, 淡蓝色, 2, 8, 0 )如果真 (垂足坐标.纵坐标 > 点1.纵坐标 )视觉_虚线i (显示图.指针, 垂足坐标, 点2, 15, 淡蓝色, 2, 8, 0 )文字:点视觉_放置文本Zi (显示图.指针, “p0: (” + 到文本 (点.横坐标 ) + “,” + 到文本 (点.纵坐标 ) + “)”, 10, 25, #字体_衬线_复杂, 0.5, 红色, 1, 8, 假)文字:线 视觉_放置文本Zi (显示图.指针, “p1: (” + 到文本 (线起点.横坐标 ) + “,” + 到文本 (线起点.纵坐标 ) + “)”, 10 × 14, 25, #字体_衬线_复杂, 0.5, 红色, 1, 8, 假)视觉_放置文本Zi (显示图.指针, “p2: (” + 到文本 (线终点.横坐标 ) + “,” + 到文本 (线终点.纵坐标 ) + “)”, 10 × 27, 25, #字体_衬线_复杂, 0.5, 红色, 1, 8, 假)文字:垂足 视觉_放置文本Zi (显示图.指针, “p3: (” + 到文本 (垂足坐标.横坐标 ) + “,” + 到文本 (垂足坐标.纵坐标 ) + “)”, 10, 2 × 25, #字体_衬线_复杂, 0.5, 红色, 1, 8, 假)文字:距离 视觉_放置文本Zi (显示图.指针, “width: (” + 到文本 (视觉_点线间隔i (点.横坐标, 点.纵坐标, 线起点.横坐标, 线起点.纵坐标, 线终点.横坐标, 线终点.纵坐标 )) + “)”, 10 × 14, 2 × 25, #字体_衬线_复杂, 0.5, 红色, 1, 8, 假)视觉_显示图像 (“小白鼠”, 显示图.指针 )判断 (参1 > 参2 )返回 (线终点 )返回 (线起点 )
链接:https://pan.baidu.com/s/1VSYkILerRQsoDiIhl-6eTQ
提取码:4ypk
复制这段内容后打开百度网盘手机App,操作更方便哦
|
|