(应用6)已经直线的起始端点与终止端点,把这条直线移动到指定的点
勇哥先放上halcon写的函数moveline的代码,它的作用是把一条线移动到指定的点。
resultLineStartPointRow := 0 resultLineStartPointCol := 0 resultLineEndPointRow := 0 resultLineEndPointCol := 0 projection_pl(pointRow, pointCol, lineStartPointRow, lineStartPointCol, lineEndPointRow, lineEndPointCol, RowProj, ColProj) disp_circle(winhandle, RowProj, ColProj, 12) distance_pp(RowProj, ColProj, lineStartPointRow, lineStartPointCol, DistanceA) distance_pp(RowProj, ColProj, lineEndPointRow, lineEndPointCol, DistanceB) angle_lx(RowProj, ColProj, lineStartPointRow, lineStartPointCol, Angle) disp_line(winhandle, RowProj, ColProj, lineStartPointRow, lineStartPointCol) disp_line(winhandle, RowProj, ColProj, lineEndPointRow, lineEndPointCol) disp_line(winhandle,RowProj, ColProj,pointRow, pointCol) tuple_deg(Angle, Deg) if(0<=Deg and Deg<=90) row1:=DistanceA*sin(Angle) col1:=DistanceA*cos(Angle) resultLineStartPointRow:=pointRow-row1 resultLineStartPointCol:=pointCol+col1 elseif(Deg>90 and Deg<=180) row1:=DistanceA*sin(3.1415926-Angle) col1:=DistanceA*cos(3.1415926-Angle) resultLineStartPointRow:=pointRow-row1 resultLineStartPointCol:=pointCol-col1 elseif(Deg<0 and Deg>=-90) row1:=DistanceA*sin(Angle) col1:=DistanceA*cos(Angle) resultLineStartPointRow:=pointRow+row1 resultLineStartPointCol:=pointCol+col1 elseif(Deg<-90 and Deg>=-180) row1:=DistanceA*sin(3.1415926+Angle) col1:=DistanceA*cos(3.1415926+Angle) resultLineStartPointRow:=pointRow+row1 resultLineStartPointCol:=pointCol-col1 endif disp_circle(winhandle, resultLineStartPointRow, resultLineStartPointCol, 12) angle_lx(RowProj, ColProj, lineEndPointRow, lineEndPointCol, Angle) tuple_deg(Angle, Deg) if(0<=Deg and Deg<=90) row1:=DistanceB*sin(Angle) col1:=DistanceB*cos(Angle) resultLineEndPointRow:=pointRow-row1 resultLineEndPointCol:=pointCol+col1 elseif(Deg>90 and Deg<=180) row1:=DistanceB*sin(3.1415926-Angle) col1:=DistanceB*cos(3.1415926-Angle) resultLineEndPointRow:=pointRow-row1 resultLineEndPointCol:=pointCol-col1 elseif(Deg<0 and Deg>=-90) tuple_abs(Angle, Abs) row1:=DistanceB*sin(Abs) col1:=DistanceB*cos(Abs) resultLineEndPointRow:=pointRow+row1 resultLineEndPointCol:=pointCol+col1 elseif(Deg<-90 and Deg>=-180) row1:=DistanceB*sin(3.1415926+Angle) col1:=DistanceB*cos(3.1415926+Angle) resultLineEndPointRow:=pointRow+row1 resultLineEndPointCol:=pointCol-col1 endif disp_circle(winhandle, resultLineEndPointRow, resultLineEndPointCol, 12) return ()
调用示例:
moveline(4782,2240,outValue[0], outValue[1], outValue[2], outValue[3],WindowHandle,row1,col1,row2,col2)
其中参数WindowHandle只是用于测试时在屏幕上画线用的调试用。正式版本请去掉它。
4782,2240 是要线要移动到的点的坐标
outValue[0], outValue[1], outValue[2], outValue[3] 是线条的起始点、结束点的行列坐标。
row1,col1,row2,col2 是移动后线条的起始点、结束点的行列坐标。
结果如下图所示:
原来的线条已经移动到指定的点。
相同作用的C#代码参见勇哥的贴子《已知直线的起始端点与终止端点,移动到指定点的位置(C#代码演示)》
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

