halcon在视窗上的简单操作(线)

By admin at 2018-02-01 • 0人收藏 • 2048人看过

画一条线:

disp_line — Draws lines in a window.

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
RowA1 := 255
ColumnA1 := 10
RowA2 := 255
ColumnA2 := 501
dev_set_color ('red')
disp_line (WindowID, RowA1, ColumnA1, RowA2, ColumnA2)

blob.png

那么我们画一个四方块吧:(就是画四条相接的线段)

/* Display contour of a rectangle */
disp_rectangle1_margin(Hlong WindowHandle,
                       Hlong Row1, long Column1,
                       Hlong Row2, long Column2)
{
  disp_line(WindowHandle,Row1,Column1,Row1,Column2) ;
  disp_line(WindowHandle,Row1,Column2,Row2,Column2) ;
  disp_line(WindowHandle,Row2,Column2,Row2,Column1) ;
  disp_line(WindowHandle,Row2,Column1,Row1,Column1) ;
}


3 个回复 | 最后更新于 2018-02-03
2018-02-02   #1
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
RowA1 := 255
ColumnA1 := 10
RowA2 := 255
ColumnA2 := 501
gen_contour_polygon_xld (Contour, [RowA1,RowA2], [ColumnA1,ColumnA2])
RowB1 := 255
ColumnB1 := 255
for I := 5 to 360 by 5
  RowB2 := 255 - sin(rad(I)) * 200
  ColumnB2 := 255 + cos(rad(I)) * 200
  gen_contour_polygon_xld (Contour, [RowB1,RowB2], [ColumnB1,ColumnB2])
  angle_ll (RowA1, ColumnA1, RowA2, ColumnA2,\
            RowB1, ColumnB1, RowB2, ColumnB2, Angle)
  AngleDeg := deg(Angle)
endfor

画一条线:

gen_contour_polygon_xld (Contour, [RowA1,RowA2], [ColumnA1,ColumnA2])

计算两条线之间的角度(弧度):

angle_ll (RowA1, ColumnA1, RowA2, ColumnA2,\
            RowB1, ColumnB1, RowB2, ColumnB2, Angle)

弧度转角度:

AngleDeg := deg(Angle)


2018-02-02   #2
* Calculate the distances between one line segment and one line
* 
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
RowLine1 := 400
ColLine1 := 200
RowLine2 := 200
ColLine2 := 400
Rows := 300
Columns := 50
disp_line (WindowID, RowLine1, ColLine1, RowLine2, ColLine2)
dev_set_color ('green')
n := 0
for Rows := 40 to 200 by 4
    distance_sl (Rows + n, Columns + n, Rows, Columns + n, RowLine1, ColLine1, RowLine2, ColLine2, DistanceMin, DistanceMax)
    if (DistanceMin <= 0)
        dev_set_color ('green')
    else
        dev_set_color ('red')
    endif
    disp_line (WindowID, Rows + n, Columns + n, Rows, Columns + n)
    n := n + 10
endfor

计算两根线之间的最小和最大距离:

distance_sl (Rows + n, Columns + n, Rows, Columns + n, RowLine1, ColLine1, RowLine2, ColLine2, DistanceMin, DistanceMax)

返回的是最小和最大的距离

以上代码是如果两根线最小距离小于0即:如果两根线相交,那么就设为绿色,上述代码有个bug,最后一根没相交的也是绿色的....

blob.png

2018-02-03   #3

distance_lr()

计算直线和区域之间的距离,返回最小和最大距离

distance_pc()

计算点到轮廓的最大距离和最小距离

distance_pl()

计算点到直线的垂直距离

distance_ss()

计算两线段之间的距离,返回最大和最小值

distance_pp()

计算一个点到另外一个点的距离


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...