C#矩阵XY排序

矩阵XY快速排序

using MyVision.Script.Method;public class MyScript : ScriptMethods
{//struct MOTIONPOSXY_S{public double Pos_x;public double Pos_y;};//脚本执行该方法public bool Process(){//@try{//脚本代码写在下方 List<double> PointX = GetDoubleList("斑点分析.X");List<double> PointY = GetDoubleList("斑点分析.Y");List<MOTIONPOSXY_S> PointList = new List<MOTIONPOSXY_S>();for (int i = 0; i < PointX.Count(); ++i){MOTIONPOSXY_S tmp;tmp.Pos_x = PointX[i];tmp.Pos_y = PointY[i];PointList.Add(tmp);}//QuickSort(ref PointList, 0, PointX.Count() - 1);for (int i = 0; i < PointX.Count(); ++i){PointX[i] = PointList[i].Pos_x;PointY[i] = PointList[i].Pos_y;//LogWarn("" + i + ":" + PointList[i].Pos_x + " " + PointList[i].Pos_y+ "", "");}//List<double> MPointX = new List<double>();List<double> MPointY = new List<double>();for (int i = 0; i < PointX.Count(); ++i){MPointX.Add(PointList[i].Pos_x);MPointY.Add(PointList[i].Pos_y);}//SetDoubleList("数组定义.PointX", MPointX);SetDoubleList("数组定义.PointY", MPointY);//return true;}catch (Exception ex){LogError(GetLogPre() + ex.ToString());return false;}}int Partition(ref List<MOTIONPOSXY_S> list, int low, int high){MOTIONPOSXY_S pbase = list[low];while (low < high){while (low < high && CompareMotion_PosXy(pbase, list[high])){--high;}if (low < high){list[low] = list[high];}while (low < high && CompareMotion_PosXy(list[low], pbase)){++low;}if (low < high){list[high] = list[low];}}list[low] = pbase;return low;}void QuickSort(ref List<MOTIONPOSXY_S> list, int low, int high){if (low < high){int pbase = Partition(ref list, low, high);QuickSort(ref list, low, pbase - 1);QuickSort(ref list, pbase + 1, high);}}//两个坐标比较大小const Test &v1, const Test &v2bool CompareMotion_PosXy(MOTIONPOSXY_S p1, MOTIONPOSXY_S p2){double difference = p1.Pos_y - p2.Pos_y;difference = (difference >= 0 ? difference : (-difference));if (p1.Pos_y < p2.Pos_y){if (difference < 100) return (p1.Pos_x < p2.Pos_x);else return true;}else if (p1.Pos_y == p2.Pos_y){return (p1.Pos_x < p2.Pos_x);}else{if (difference < 100) return (p1.Pos_x < p2.Pos_x);else return false;}}
}

九点标定从中间往外排序

using MyVision.Script.Method;public class MyScript : ScriptMethods
{//struct MOTIONPOSXY_S{public double Pos_x;public double Pos_y;public double Pos_r;};//脚本执行该方法public bool Process(){//@try{//脚本代码写在下方 List<double> PointX = GetDoubleList("斑点分析.X");List<double> PointY = GetDoubleList("斑点分析.Y");List<double> PointR = GetDoubleList("斑点分析.最大内直径");List<MOTIONPOSXY_S> PointList = new List<MOTIONPOSXY_S>();for (int i = 0; i < PointX.Count(); ++i){MOTIONPOSXY_S tmp;tmp.Pos_x = PointX[i];tmp.Pos_y = PointY[i];tmp.Pos_r = PointR[i]/2;PointList.Add(tmp);}//QuickSort(ref PointList, 0, PointX.Count() - 1);for (int i = 0; i < PointX.Count(); ++i){PointX[i] = PointList[i].Pos_x;PointY[i] = PointList[i].Pos_y;PointR[i] = PointList[i].Pos_r;LogWarn("" + i + ":" + PointList[i].Pos_x + " " + PointList[i].Pos_y + PointList[i].Pos_r + "", "");}//List<double> MPointX = new List<double>();List<double> MPointY = new List<double>();List<double> MPointR = new List<double>();//MPointX.Add(PointX[4]); MPointX.Add(PointX[5]);MPointX.Add(PointX[2]); MPointX.Add(PointX[1]); MPointX.Add(PointX[0]);MPointX.Add(PointX[3]);MPointX.Add(PointX[6]); MPointX.Add(PointX[7]); MPointX.Add(PointX[8]);//MPointY.Add(PointY[4]); MPointY.Add(PointY[5]);MPointY.Add(PointY[2]); MPointY.Add(PointY[1]); MPointY.Add(PointY[0]);MPointY.Add(PointY[3]);MPointY.Add(PointY[6]); MPointY.Add(PointY[7]); MPointY.Add(PointY[8]);//MPointR.Add(PointR[4]); MPointR.Add(PointR[5]);MPointR.Add(PointR[2]); MPointR.Add(PointR[1]); MPointR.Add(PointR[0]);MPointR.Add(PointR[3]);MPointR.Add(PointR[6]); MPointR.Add(PointR[7]); MPointR.Add(PointR[8]);//SetDoubleList("数组定义.Value0", MPointX);SetDoubleList("数组定义.Value1", MPointY);SetDoubleList("数组定义.Value2", MPointR);//return true;}catch (Exception ex){LogError(GetLogPre() + ex.ToString());return false;}}int Partition(ref List<MOTIONPOSXY_S> list, int low, int high){MOTIONPOSXY_S pbase = list[low];while (low < high){while (low < high && CompareMotion_PosXy(pbase, list[high])){--high;}if (low < high){list[low] = list[high];}while (low < high && CompareMotion_PosXy(list[low], pbase)){++low;}if (low < high){list[high] = list[low];}}list[low] = pbase;return low;}void QuickSort(ref List<MOTIONPOSXY_S> list, int low, int high){if (low < high){int pbase = Partition(ref list, low, high);QuickSort(ref list, low, pbase - 1);QuickSort(ref list, pbase + 1, high);}}//两个坐标比较大小const Test &v1, const Test &v2bool CompareMotion_PosXy(MOTIONPOSXY_S p1, MOTIONPOSXY_S p2){double difference = p1.Pos_y - p2.Pos_y;difference = (difference >= 0 ? difference : (-difference));if (p1.Pos_y < p2.Pos_y){if (difference < 100) return (p1.Pos_x < p2.Pos_x);else return true;}else if (p1.Pos_y == p2.Pos_y){return (p1.Pos_x < p2.Pos_x);}else{if (difference < 100) return (p1.Pos_x < p2.Pos_x);else return false;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/106110.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建开发环境-Mac

概述 上一篇搭建开发环境-WSLUbuntu 记录了WSL 和Ubuntu 下开发环境的搭建。这一篇就说下Mac开发环境的搭建。 就像很多人误以为Mini 是专为女孩子设计的高颜值车&#xff0c;其实是一辆极其hardcore 的拉力车一样。 很多人都被Mac 那高颜值蒙蔽了&#xff0c;其实这是一台生产…

构造函数内的方法 直接写在构造函数内部 与 写在prototype上 的区别

文章目录 前言区别总结 前言 以前没注意过, 去创建一个构造函数的时候, 方法都是直接写在函数内的. 在构造函数需要多次实例化的情况下有缺点, 不过幸好以前项目里的构造函数也不需要多次实例化, 缺点没有生效. 区别 为了比较, 先在构造函数内部直接书写方法, 查看实例化结果…

Kubernetes 使用 Rancher 管理

K8S集群管理工具 只能管理单个K8S集群 kubectl命令行管理工具 dashboard&#xff08;K8S官方的UI界面图形化管理工具&#xff09; &#xff08;管理多集群很麻烦&#xff0c;切换不同集群每次需要更改kube-config文件[kubectl配置文件]&#xff0c;如果kubeadm部署每次都需…

item_search_img-按图搜索淘宝商品(拍立淘)

一、接口参数说明&#xff1a; item_search_img-按图搜索淘宝商品&#xff08;拍立淘&#xff09;&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_img 名称类型必须描…

iconfont 图标在vue里的使用

刚好项目需要使用一个iconfont的图标&#xff0c;所以记录一下这个过程 1、iconfont-阿里巴巴矢量图标库 这个注册一个账号&#xff0c;以便后续使用下载代码时需要 2、寻找自己需要的图标 我主要是找两个图标 &#xff0c;一个加号&#xff0c;一个减号&#xff0c;分别加入到…

华为云渲染实践

// 编者按&#xff1a;云计算与网络基础设施发展为云端渲染提供了更好的发展机会&#xff0c;华为云随之长期在自研图形渲染引擎、工业领域渲染和AI加速渲染三大方向进行云渲染方面的探索与研究。本次LiveVideoStackCon 2023上海站邀请了来自华为云的陈普&#xff0c;为大家分…

[系统] 电脑突然变卡 / 电脑突然** / 各种突发情况解决思路

今天来公司办公&#xff0c;开机之后发现电脑出现各种问题&#xff0c;死机、卡顿、点什么都加载&#xff0c;甚至开一个文件夹要1分钟才能打开&#xff0c;花了2个小时才解决&#xff0c;走了很多弯路&#xff0c;其实早点想通&#xff0c;5分钟就能解决问题&#xff0c;所以打…

玩转科技|了解AI平台桌面客户端—ChatBox

目录 前言 特性 ​编辑 为什么需要 ChatBox&#xff1f; ChatGPT Plus 平替&#xff1f; 下载 支持系统 功能图 使用教程 ​感受 展示 前言 今天小编又来了&#xff0c;推荐给大家一款开源的OpenAI API桌面客户端ChatBox&#xff0c;它支持 Windows、Mac 和 Linux。…

Vue2向Vue3过度Vuex核心概念state状态

目录 1 核心概念 - state 状态1.目标2.提供数据3.访问Vuex中的数据4.通过$store访问的语法5.代码实现5.1模板中使用5.2组件逻辑中使用5.3 js文件中使用 2 通过辅助函数 - mapState获取 state中的数据1.第一步&#xff1a;导入mapState (mapState是vuex中的一个函数)2.第二步&am…

【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER

文章目录 前言PATH_REUSE_DECIDER功能简介PATH_REUSE_DECIDER相关配置PATH_REUSE_DECIDER总体流程PATH_REUSE_DECIDER相关子函数IsCollisionFreeTrimHistoryPathIsIgnoredBlockingObstacle和GetBlockingObstacleS Else参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算…

容器技术,1. Docker,2. Kubernetes(K8s):

目录 容器技术 1. Docker&#xff1a; 2. Kubernetes&#xff08;K8s&#xff09;&#xff1a; Docker和Kubernetes 容器的主要应用场景有哪些&#xff1f; 容器技术 有效的将单个操作系统的资源划分到孤立的组中&#xff0c;以便更好的在孤立的组之间平衡有冲突的资源使…

分布式 - 服务器Nginx:一小时入门系列之 HTTPS协议配置

文章目录 1. HTTPS 协议2. 生成 SSL 证书和私钥文件3. 配置 SSL 证书和私钥文件4. HTTPS 协议优化 1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本&#xff0c;通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户…

PHP小白搭建Kafka环境以及初步使用rdkafka

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装java&#xff08;Kafka必须安装java&#xff0c;因为kafka依赖java核心&#xff09;二、安装以及配置Kafka、zookeeper1.下载Kafka&#xff08;无需下载…

强化学习在游戏AI中的应用与挑战

文章目录 1. 强化学习简介2. 强化学习在游戏AI中的应用2.1 游戏智能体训练2.2 游戏AI决策2.3 游戏测试和优化 3. 强化学习在游戏AI中的挑战3.1 探索与利用的平衡3.2 多样性的应对 4. 解决方法与展望4.1 深度强化学习4.2 奖励设计和函数逼近 5. 总结 &#x1f389;欢迎来到AIGC人…

计算机网络——OSI与TCP/IP各层的结构与功能,都有哪些协议?

文章目录 一 OSI与TCP/IP各层的结构与功能,都有哪些协议?1.1 应用层1.2 运输层1.3 网络层1.4 数据链路层1.5 物理层1.6 总结一下 二 ⭐TCP 三次握手和四次挥手(面试常客)2.1 TCP 三次握手漫画图解2.2 为什么要三次握手⭐2.3 第2次握手传回了ACK&#xff0c;为什么还要传回SYN&…

基于Java+SpringBoot+Vue前后端分离社区智慧养老监护管理平台设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【Jetpack】Navigation 导航组件 ④ ( Fragment 跳转中使用 safe args 安全传递参数 )

文章目录 一、页面跳转间的传统的数据传递方式1、传统的数据传递方式 - Bundle 传递数据1、Navigation 组件中的 Bundle 数据传递2、传统数据传递实现步骤3、FragmentA 完整代码示例4、FragmentB 完整代码示例5、执行结果 2、使用 Bundle 传递数据安全性差 二、页面跳转间的传统…

lesson9: C++多线程

1.线程库 1.1 thread类的简单介绍 C11 中引入了对 线程的支持 了&#xff0c;使得 C 在 并行编程时 不需要依赖第三方库 而且在原子操作中还引入了 原子类 的概念。要使用标准库中的线程&#xff0c;必须包含 < thread > 头文件 函数名 功能 thread() 构造一个线程对象…

item_search_seller-搜索店铺列表

一、接口参数说明&#xff1a; item_search_seller-搜索店铺列表&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_seller 名称类型必须描述keyString是调用key&#x…

Redis笔记——(狂神说)待续

Nosql概述 为什么要用NoSql&#xff1f; 1、单机mysql的年代&#xff1a;90年代&#xff0c;网站访问量小&#xff0c;很多使用静态网页html写的&#xff0c;服务器没压力。 当时瓶颈是&#xff1a;1)数据量太大一个机器放不下。2)数据的索引(BTree)&#xff0c;一个机器内存也…