halcon點距兩線角度,交點算子知悉


1.線線之間夾角弧度值

dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row1, Column1, Row2, Column2)
gen_region_line (RegionLines, Row1, Column1, Row2, Column2)
draw_line (3600, Row11, Column11, Row21, Column21)
gen_region_line (RegionLines1, Row11, Column11, Row21, Column21)
angle_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Angle)

 

設置繪畫顏色和線條寬度
然后用draw_line繪畫第一條線
這里要知道繪畫的起點和終點
Row1,Column1–起點
Row2,Column2–終點

繪畫的第二條線的起點和終點如下
Row11,Column11–起點
Row21,Column21–終點

在使用angle_ll獲得兩線夾角的弧度值Angle
在由下面換算成角度

hv_Angle = 1.0 * Angle/3.14 *360;//角度與弧度換算

halcon中繪畫的第二條線與坐標正向橫軸的夾角弧度值
用以下算子計算

angle_lx (Row11, Column11, Row21, Column21, Angle1)



2.線線之間的交點

找到第一條線和第二條線的交點並且顯示出來
用紅色的十字叉顯示出來

intersection_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Row, Column, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross, Row, Column, 100, 0.785398)

 

效果如下圖所示

 

 

3.點到線的距離
繪畫第三條直線,利用前面的交點通過算子計算
點到線的距離,並且打印出來

dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row12, Column12, Row22, Column22)
gen_region_line (RegionLines2, Row12, Column12, Row22, Column22)
distance_pl (Row, Column, Row12, Column12, Row22, Column22, Distance)
set_tposition (3600, Row, Column)
write_string (3600, Distance)

 

 

 

4.點到點之間的距離

求出第二條線和第三條線的交點2
與之前第一條線和第二條線的交點1
通過算子求點到點的距離

intersection_ll (Row11, Column11, Row21, Column21, Row12, Column12, Row22, Column22, Row2, Column2, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross1, Row2, Column2, 100, 0.785398)
distance_pp (Row1, Column1, Row2, Column2, Distance1)
dev_set_color ('green')
dev_set_line_width (1)
set_tposition (3600, Row2, Column2)
write_string (3600, Distance1)

 

效果如下圖所示

 

 

 

 

以上算子較為常用,我們熟練即可。

5.halcon總操作代碼如下

 

dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row1, Column1, Row2, Column2)
gen_region_line (RegionLines, Row1, Column1, Row2, Column2)
draw_line (3600, Row11, Column11, Row21, Column21)
gen_region_line (RegionLines1, Row11, Column11, Row21, Column21)
angle_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Angle)
angle_lx (Row11, Column11, Row21, Column21, Angle1)
intersection_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Row, Column, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross, Row, Column, 100, 0.785398)
dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row12, Column12, Row22, Column22)
gen_region_line (RegionLines2, Row12, Column12, Row22, Column22)
distance_pl (Row, Column, Row12, Column12, Row22, Column22, Distance)
set_tposition (3600, Row, Column)
write_string (3600, Distance)
intersection_ll (Row11, Column11, Row21, Column21, Row12, Column12, Row22, Column22, Row2, Column2, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross1, Row2, Column2, 100, 0.785398)
distance_pp (Row1, Column1, Row2, Column2, Distance1)
dev_set_color ('green')
dev_set_line_width (1)
set_tposition (3600, Row2, Column2)
write_string (3600, Distance1)

 

 

6.轉換成C#的代碼

 

private void action()
{


// Local iconic variables

HObject ho_RegionLines, ho_RegionLines1, ho_Cross;
HObject ho_RegionLines2, ho_Cross1;

// Local control variables

HTuple hv_Row1 = null, hv_Column1 = null, hv_Row2 = null;
HTuple hv_Column2 = null, hv_Row11 = null, hv_Column11 = null;
HTuple hv_Row21 = null, hv_Column21 = null, hv_Angle = null;
HTuple hv_Angle1 = null, hv_Row = null, hv_Column = null;
HTuple hv_IsParallel = null, hv_Row12 = null, hv_Column12 = null;
HTuple hv_Row22 = null, hv_Column22 = null, hv_Distance = null;
HTuple hv_Distance1 = null;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_RegionLines);
HOperatorSet.GenEmptyObj(out ho_RegionLines1);
HOperatorSet.GenEmptyObj(out ho_Cross);
HOperatorSet.GenEmptyObj(out ho_RegionLines2);
HOperatorSet.GenEmptyObj(out ho_Cross1);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
}
HOperatorSet.DrawLine(3600, out hv_Row1, out hv_Column1, out hv_Row2, out hv_Column2);
ho_RegionLines.Dispose();
HOperatorSet.GenRegionLine(out ho_RegionLines, hv_Row1, hv_Column1, hv_Row2,
hv_Column2);
HOperatorSet.DrawLine(3600, out hv_Row11, out hv_Column11, out hv_Row21, out hv_Column21);
ho_RegionLines1.Dispose();
HOperatorSet.GenRegionLine(out ho_RegionLines1, hv_Row11, hv_Column11, hv_Row21,
hv_Column21);
HOperatorSet.AngleLl(hv_Row1, hv_Column1, hv_Row2, hv_Column2, hv_Row11, hv_Column11,
hv_Row21, hv_Column21, out hv_Angle);
HOperatorSet.AngleLx(hv_Row11, hv_Column11, hv_Row21, hv_Column21, out hv_Angle1);
HOperatorSet.IntersectionLl(hv_Row1, hv_Column1, hv_Row2, hv_Column2, hv_Row11,
hv_Column11, hv_Row21, hv_Column21, out hv_Row, out hv_Column, out hv_IsParallel);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "red");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 5);
}
ho_Cross.Dispose();
HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row, hv_Column, 100, 0.785398);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
}
HOperatorSet.DrawLine(3600, out hv_Row12, out hv_Column12, out hv_Row22, out hv_Column22);
ho_RegionLines2.Dispose();
HOperatorSet.GenRegionLine(out ho_RegionLines2, hv_Row12, hv_Column12, hv_Row22,
hv_Column22);
HOperatorSet.DistancePl(hv_Row, hv_Column, hv_Row12, hv_Column12, hv_Row22, hv_Column22,
out hv_Distance);
HOperatorSet.SetTposition(3600, hv_Row, hv_Column);
HOperatorSet.WriteString(3600, hv_Distance);
HOperatorSet.IntersectionLl(hv_Row11, hv_Column11, hv_Row21, hv_Column21, hv_Row12,
hv_Column12, hv_Row22, hv_Column22, out hv_Row2, out hv_Column2, out hv_IsParallel);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "red");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 5);
}
ho_Cross1.Dispose();
HOperatorSet.GenCrossContourXld(out ho_Cross1, hv_Row2, hv_Column2, 100, 0.785398);
HOperatorSet.DistancePp(hv_Row1, hv_Column1, hv_Row2, hv_Column2, out hv_Distance1);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
}
HOperatorSet.SetTposition(3600, hv_Row2, hv_Column2);
HOperatorSet.WriteString(3600, hv_Distance1);

 

ho_RegionLines.Dispose();
ho_RegionLines1.Dispose();
ho_Cross.Dispose();
ho_RegionLines2.Dispose();
ho_Cross1.Dispose();

}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM