一、求直线角度
①两条直线线之间角度:angle_ll()算子
②直线与水平轴之间的角度:angle_lx()算子
二、参数介绍
①angle_ll (RowA1, ColumnA1, RowA2, ColumnA2, RowB1, ColumnB1, RowB2, ColumnB2, Angle)
RowA1:直线A的起始点的行坐标
ColumnA1:直线A的起始点的列坐标
RowA2:直线A的结束点的行坐标
ColumnA2:直线A的结束点的列坐标
RowB1:直线B的起始点的行坐标
ColumnB1: 直线B的起始点的列坐标
RowB2: 直线B的结束点的行坐标
ColumnB2: 直线B的结束点的列坐标
Angle: 角度输出
②angle_lx (RowB1, ColumnB1, RowB2, ColumnB2, Angle)
RowB1:直线B的起始点的行坐标
ColumnB1: 直线B的起始点的列坐标
RowB2: 直线B的结束点的行坐标
ColumnB2: 直线B的结束点的列坐标
Angle: 角度输出
三、显示直线三个的算子
①disp_line (WindowID, RowA1, ColumnA1, RowA2, ColumnA2)
②gen_contour_polygon_xld (Contour1, [row1,row2], [col1, col2])
③gen_region_line (RegionLines, row1, col1, row2, col2)
前两者是亚像素级(XLD)精度,后者是像素级(Region)精度,效果如下图所示:
四、程序及注释
①angle_ll.hdev 程序
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowHandle)
row1 := 255
col1 := 10
row2 := 255
col2 := 501
dev_set_color ('black')
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
disp_line (WindowHandle, row1, col1, row2, col2)
row3 := 255
col3 := 255
for i := 0 to 360 by 1
* 三角函数简单的计算
row4 := 255 + sin(rad(i)) * 200
col4 := 255 + cos(rad(i)) * 200
disp_line (WindowHandle, row3, col3, row4, col4)
* 主要就是学习这个两个直线角度的算子
angle_ll (row1, col1, row2, col2, row3, col3, row4, col4, Angle)
disp_message (WindowHandle, 'Angle: '+ deg(Angle) + ' i: ' + i, 'window', 255, 255, 'red', 'true')
endfor
②angle_lx.hdev 程序
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowHandle)
dev_set_color ('black')
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
row1 := 255
col1 := 10
row2 := 255
col2 := 501
* 使用disp_line()画出来的xld窗口放大缩小会消失,而采用gen_region_line()绘制的线(区域)就不会消失
* disp_line (WindowHandle, row1, col1, row2, col2)
* gen_region_line (RegionLines, row1, col1, row2, col2)
gen_contour_polygon_xld (Contour1, [row1,row2], [col1, col2])
row3 := 255
col3 := 255
for i := 0 to 360 by 1
row4 := 255 + sin(rad(i)) * 200
col4 := 255 + cos(rad(i)) * 200
*disp_line (WindowHandle, row3, col3, row4, col4)
* 但是画出来的region线是不太乐观的,虽然可以放大缩小,但可以使用
* gen_contour_polygon_xld()绘制线条xld
*gen_region_line (RegionLines, row3, col3, row4, col4)
gen_contour_polygon_xld (Contour, [row3, row4], [col3, col4])
* disp_line()和gen_contour_polygon()生成的线是一样的
*disp_line (WindowHandle, row3, col3, row4, col4)
angle_lx (row3, col3, row4, col4, Angle)
disp_message (WindowHandle, rad(Angle), 'window', 12, 12, 'black', 'true')
endfor
分析有不到位的,请各位点评指正~