这个函数是为了求两个轮廓的中线而封装的。函数具有两种模式:第一种适用于两根斜的XLD轮廓,原理就是求两根线的夹角,然后再将一根线仿射变换过去;第二种适用于两根平行的线,这种原理就是直接的求平均值。
函数封装:
函数代码:
*获取;两线轮廓的中间线
*Contour1为轮廓1,Contour2为轮廓2
*MiddleContour为中间线轮廓
try
*获取轮廓点位
get_contour_xld (Contour1, Row1, Column1)
get_contour_xld (Contour2, Row2, Column2)
if (Model == 1)
*获得两条轮廓的交点
RowBegin1 := Row1[0]
ColumnBegin1 := Column1[0]
RowEnd1 := Row1[|Row1| - 1]
ColumnEnd1 := Column1[|Column1| - 1]
RowBegin2 := Row2[0]
ColumnBegin2 := Column2[0]
RowEnd2 := Row2[|Row2| - 1]
ColumnEnd2 := Column2[|Column2| - 1]
intersection_lines (RowBegin1, ColumnBegin1, RowEnd1, ColumnEnd1, RowBegin2, ColumnBegin2, RowEnd2, ColumnEnd2,\
Row, Column, IsOverlapping)
*计算线之间的角度
angle_ll (RowBegin1, ColumnBegin1, RowEnd1, ColumnEnd1, RowBegin2, ColumnBegin2, RowEnd2, ColumnEnd2, Angle)
*选择哪条线进行旋转
Phi := Angle / 2
vector_angle_to_rigid (Row, Column, 0, Row, Column, Phi, HomMat2D)
affine_trans_contour_xld (Contour1, MiddleContour, HomMat2D)
elseif (Model == 2)
*求每个点位中点
RowMidd := []
ColumnMidd := []
if (|Row1| > |Row2|)
for Index := 0 to |Row1| - 1 by 1
RowMidd := [RowMidd, (Row1[Index] + Row2[Index]) / 2]
ColumnMidd := [ColumnMidd, (Column1[Index] + Column2[Index]) / 2]
endfor
else
for Index := 0 to |Row2| - 1 by 1
RowMidd := [RowMidd, (Row1[Index] + Row2[Index]) / 2]
ColumnMidd := [ColumnMidd, (Column1[Index] + Column2[Index]) / 2]
endfor
endif
*拟合直线
gen_contour_polygon_xld (Contour, RowMidd, ColumnMidd)
fit_line_contour_xld (Contour, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
gen_contour_polygon_xld (MiddleContour, [RowBegin, RowEnd], [ColBegin, ColEnd])
endif
catch (Exception)
gen_empty_obj (MiddleContour)
endtry
return ()