当前位置: 首页 > news >正文

WPF引导定位软件-定位纠偏(带角度)

WPF引导定位软件-定位纠偏(带角度)

// 一 获取圆的中心AlgorithmService.Instance.DetectRect2(info.Image,outdoubleImageY,outdoubleImageX,outdoubleImageA,outdoublephi);// 二 获取目标位置TargetLoactiontargetLoaction=(TargetLoaction)XmlSerializerHelper.ReadXML(@"./目标位置.xml",typeof(TargetLoaction));// 三图像坐标转物理坐标// 读取九点标定文件HOperatorSet.ReadTuple(@"./九点标定.tup",outHTuplehommat2d);HOperatorSet.AffineTransPoint2d(hommat2d,targetLoaction.Y,targetLoaction.X,outHTupley_target,outHTuplex_target);HOperatorSet.AffineTransPoint2d(hommat2d,ImageY,ImageX,outHTupley_current,outHTuplex_current);// 读取旋转中心RotateCaliModelrotateCaliModel=(RotateCaliModel)XmlSerializerHelper.ReadXML(".\\旋转标定结果.xml",typeof(RotateCaliModel));// 四 获取偏移量AlgorithmService.Instance.Calculate_offset(targetLoaction.Phi,phi,hommat2d,ImageY,ImageX,rotateCaliModel.CenterX,rotateCaliModel.CenterY,targetLoaction.Y,targetLoaction.X,outHTupleoffset_y,outHTupleoffset_x);doubleoffsetX=offset_x.D;doubleoffsetY=offset_y.D;doubleoffsetA=(targetLoaction.Angle-ImageA)/0.722;// 五 发送结果给上位机// 通讯定义:res,offsetX,offsetYCommunicateService.Instance.Send("res,"+offsetX+","+offsetY+","+offsetA);// 六 更新UIvarmainForm=Application.OpenForms.OfType<MainForm>().FirstOrDefault();mainForm.Invoke(newAction(()=>{mainForm.lb_CurrentX.Text=ImageX.ToString();mainForm.lb_CurrentY.Text=ImageY.ToString();mainForm.lb_CurrentA.Text=ImageA.ToString();mainForm.lb_OffsetX.Text=offsetX.ToString();mainForm.lb_OffsetY.Text=offsetY.ToString();mainForm.lb_OffsetA.Text=offsetA.ToString();// 2.获取窗口上的显示控件HWindow_FinalhWindow_Final=mainForm.hWindow_Final_CameraImg;// 3.显示标定点hWindow_Final.HobjectToHimage(info.Image);HOperatorSet.GenCrossContourXld(outHObjectcross,ImageY,ImageX,30,phi);hWindow_Final.DispObj(cross,"red");}));
/// <summary>/// 计算偏移量/// </summary>/// <param name="hv_Phi_Target"></param>/// <param name="hv_Phi_Curr"></param>/// <param name="hv_HomMat2D"></param>/// <param name="hv_Row_Curr"></param>/// <param name="hv_Column_Curr"></param>/// <param name="hv_CenterX"></param>/// <param name="hv_CenterY"></param>/// <param name="hv_Row_Target"></param>/// <param name="hv_Column_Target"></param>/// <param name="hv_dx"></param>/// <param name="hv_dy"></param>publicvoidCalculate_offset(HTuplehv_Phi_Target,HTuplehv_Phi_Curr,HTuplehv_HomMat2D,HTuplehv_Row_Curr,HTuplehv_Column_Curr,HTuplehv_CenterX,HTuplehv_CenterY,HTuplehv_Row_Target,HTuplehv_Column_Target,outHTuplehv_dx,outHTuplehv_dy){// Local iconic variables// Local control variablesHTuplehv_offset_p=newHTuple(),hv_sin_value=newHTuple();HTuplehv_cos_value=newHTuple(),hv_x=newHTuple();HTuplehv_y=newHTuple(),hv_after_angle_x=newHTuple();HTuplehv_after_angle_y=newHTuple(),hv_Qx1=newHTuple();HTuplehv_Qy1=newHTuple();// Initialize local and output iconic variableshv_dx=newHTuple();hv_dy=newHTuple();//纠偏方式2:角度和xy同时进行纠偏,xy纠正的偏差量hv_offset_p.Dispose();using(HDevDisposeHelperdh=newHDevDisposeHelper()){hv_offset_p=hv_Phi_Target-hv_Phi_Curr;}hv_sin_value.Dispose();using(HDevDisposeHelperdh=newHDevDisposeHelper()){hv_sin_value=hv_offset_p.TupleSin();}hv_cos_value.Dispose();using(HDevDisposeHelperdh=newHDevDisposeHelper()){hv_cos_value=hv_offset_p.TupleCos();}//像素坐标转物理坐标hv_x.Dispose();hv_y.Dispose();HOperatorSet.AffineTransPoint2d(hv_HomMat2D,hv_Row_Curr,hv_Column_Curr,outhv_x,outhv_y);//旋转后的点hv_after_angle_x.Dispose();using(HDevDisposeHelperdh=newHDevDisposeHelper()){hv_after_angle_x=(((hv_x-hv_CenterX)*hv_cos_value)-((hv_y-hv_CenterY)*hv_sin_value))+hv_CenterX;}hv_after_angle_y.Dispose();using(HDevDisposeHelperdh=newHDevDisposeHelper()){hv_after_angle_y=(((hv_x-hv_CenterX)*hv_sin_value)+((hv_y-hv_CenterY)*hv_cos_value))+hv_CenterY;}//目标位置-旋转之后的位置//像素坐标转物理坐标hv_Qx1.Dispose();hv_Qy1.Dispose();HOperatorSet.AffineTransPoint2d(hv_HomMat2D,hv_Row_Target,hv_Column_Target,outhv_Qx1,outhv_Qy1);hv_dx.Dispose();using(HDevDisposeHelperdh=newHDevDisposeHelper()){hv_dx=hv_Qx1-hv_after_angle_x;}hv_dy.Dispose();using(HDevDisposeHelperdh=newHDevDisposeHelper()){hv_dy=hv_Qy1-hv_after_angle_y;}hv_offset_p.Dispose();hv_sin_value.Dispose();hv_cos_value.Dispose();hv_x.Dispose();hv_y.Dispose();hv_after_angle_x.Dispose();hv_after_angle_y.Dispose();hv_Qx1.Dispose();hv_Qy1.Dispose();return;}
http://www.jsqmd.com/news/422211/

相关文章:

  • 基于springboot计算机科学拔尖学生培养基地系统
  • AI自动化文档生成工具-Mintlify简介
  • 基于springboot计算机岗位推荐系统
  • 德尔泰(Delta)宏观研判:穿透360《头号玩家》的底层收割黑盒,数字资产主权危机与法理确权路径
  • AI自动化文档生成工具-Mintlify实操
  • 基于springboot课外学习生活活动平台
  • Blender-MCP服务源码6-Blender插件运行
  • 2026-02-28 闲话
  • 基于springboot课程管理系统
  • Mac 显示所有的隐藏文件
  • 世纪辩论:马克思 丁元英
  • 从底层解释一下计算机的原理
  • Kumi02_项目运行
  • 某省“十五五”双碳大脑与能耗双控数字化监测指挥平台建设方案深度解析(WORD)
  • ChromaDB06-数据集导入补充
  • ChromaDB05-数据集导入
  • ISO 9001 ISO 14001 ISO 45001
  • path综合案例--时钟案例
  • 从WPF到Avalonia:铁路信号集中监测系统的信创跨平台重构思考 - T
  • DLL 文件丢失、DirectX 组件损坏引修复
  • 基于Spring Boot的高校办公室行政事务管理系统
  • A1平台多路aes67出现scheduling while atomic问题
  • 我的老师在AI时代之前就被淘汰了!一个“学渣”的自白:我的老师是小说和谷歌
  • [兰溪民间故事]赵阁老作弄亲家:一句玩笑话,十万雪花银
  • MySQL数据库
  • 基于springboot高校学生辅助系统
  • 东方博宜OJ 1153:查找“支撑数” ← 数组
  • 如何利用iPad作为Mac的高效副屏:功能解析与实际体验
  • ifstream和ofstream分别是什么
  • JS对象-事件监听