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

C++ Rect And Point Search Algorithm

测试 
//
// Created by www on 2024/8/8.
//
#include "include/cxstructs.h"
#include "include/cxml/k-NN.h"// 可扩展Rect内搜索子Rect或Point
void testRectSearch() {using namespace cxstructs;std::random_device rd;std::mt19937 gen(rd());std::uniform_real_distribution<float> distr(0, 200);std::cout << "TESTING QUAD TREE" << std::endl;std::cout << "   Testing insert..." << std::endl;QuadTree<Point> tree({0, 0, 200, 200});for (uint_fast32_t i = 0; i < 1000; i++) {tree.insert({distr(gen), distr(gen)});}CX_ASSERT(tree.depth() == 3, "");CX_ASSERT(tree.size() == 1000, "");std::cout << "   Testing count subrect..." << std::endl;CX_ASSERT(tree.count_subrect({0, 0, 200, 200}) == 1000, "");CX_ASSERT(tree.count_subrect({10, 10, 50, 50}) > 10, "");tree.insert({2, 2});CX_ASSERT(tree.size() == 1001, "");tree.erase({2, 2});CX_ASSERT(tree.size() == 1000, "");std::cout << "   Testing max capacity..." << std::endl;QuadTree<Point> tree1({0, 0, 200, 200}, 2, 10);for (uint_fast32_t i = 0; i < 100000; i++) {tree.insert({distr(gen), distr(gen)});}std::cout << "   Testing object retrieval..." << std::endl;tree1.clear();tree1.insert({2, 2});for (auto ptr : tree1.get_subrect({0, 0, 2, 2})) {CX_ASSERT(*ptr == Point(2, 2), "");}
}// 点集处理,可分类
void testKNN() {using namespace cxstructs;enum Category { A, B, C };struct DataPoint : public DataPoint_<Category> {Category category;float x_;float y_;float weight = 1;DataPoint() {}DataPoint(float x, float y, Category category) : x_(x), y_(y), category(category) {}float x() const final { return x_; }float y() const final { return y_; }Category getCategory() final { return category; }float getWeight() const final { return weight; }};std::cout << "TESTING k-NN" << std::endl;std::vector<DataPoint> data{};data.emplace_back(1, 2, Category::A);data.emplace_back(2, 3, Category::A);data.emplace_back(3, 4, Category::A);data.emplace_back(4, 5, Category::B);data.emplace_back(5, 6, Category::B);data.emplace_back(6, 7, Category::B);data.emplace_back(7, 8, Category::C);data.emplace_back(8, 9, Category::C);data.emplace_back(9, 10, Category::C);Category cat1;kNN_2D<DataPoint> knn(data, DISTANCE_FUNCTION_2D::EUCLIDEAN);std::cout << "   Testing absolute classification" << std::endl;cat1 = knn.classify_by_category_count(0, 0, 4);CX_ASSERT((int)cat1 == 0, "");cat1 = knn.classify_by_category_count(5, 5, 4);CX_ASSERT((int)cat1 == 1, "");std::cout << "   Testing distance weighted classification" << std::endl;cat1 = knn.classify_by_sum_distance(0, 0, 4);CX_ASSERT((int)cat1 == 0, "");cat1 = knn.classify_by_sum_distance(5, 5, 4);CX_ASSERT((int)cat1 == 1, "");std::cout << "   Testing weight classification" << std::endl;cat1 = knn.classify_by_sum_weight(0, 0, 4);CX_ASSERT((int)cat1 == 0, "");cat1 = knn.classify_by_sum_weight(5, 5, 4);CX_ASSERT((int)cat1 == 1, "");std::cout << "   Testing weighted * dist classification" << std::endl;cat1 = knn.classify_by_sum_weighted_distance(0, 0, 4);CX_ASSERT((int)cat1 == 0, "");cat1 = knn.classify_by_sum_weighted_distance(5, 5, 4);CX_ASSERT((int)cat1 == 1, "");
}// 字典
void testTrie() {using namespace cxstructs;std::cout << "TESTING TRIE" << std::endl;std::cout << "   Testing insertion..." << std::endl;Trie trie;trie.insert("hello");std::cout << "   Testing contained..." << std::endl;CX_ASSERT(trie.contains("hello") == true, "");CX_ASSERT(trie.contains("helloh") == false, "");std::cout << "   Testing startsWith..." << std::endl;CX_ASSERT(trie.startsWith("he")[0] == "hello", "");
}int main() {
//  testKNN();testRectSearch();testTrie();return 0;
}
输出
TESTING QUAD TREE
Testing insert...
Testing count subrect...
Testing max capacity...
Testing object retrieval...
TESTING TRIE
Testing insertion...
Testing contained...
Testing startsWith...
参考

https://github.com/gk646/cxstructs

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CORS与JSONP漏洞原理及其复现
  • 模拟退火的
  • WebRTC ICE配置类型
  • MySQL使用(表)
  • 【零基础实战】基于物联网的人工淡水湖养殖系统设计
  • 如何将 GTA Online 的加载时间缩短 70%
  • docker搭建内网穿透服务
  • 保姆级教程,一文了解LVS
  • Ashok:一款多功能开源网络侦查OSINT工具
  • docker基础命令
  • 【Kubernetes】k8s集群资源调度
  • 概率论原理精解【9】
  • 软件测试需要具备的基础知识【功能测试】---前端知识(三)
  • MQTT协议
  • 机器学习——第九章 聚类
  • CSS 三角实现
  • Git 使用集
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript服务器推送技术之 WebSocket
  • java第三方包学习之lombok
  • Laravel 中的一个后期静态绑定
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • OSS Web直传 (文件图片)
  • Selenium实战教程系列(二)---元素定位
  • Spring-boot 启动时碰到的错误
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 彻底搞懂浏览器Event-loop
  • 从输入URL到页面加载发生了什么
  • 工程优化暨babel升级小记
  • 讲清楚之javascript作用域
  • 盘点那些不知名却常用的 Git 操作
  • 前端相关框架总和
  • 如何在GitHub上创建个人博客
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 数据可视化之 Sankey 桑基图的实现
  • Spring第一个helloWorld
  • 昨天1024程序员节,我故意写了个死循环~
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​iOS安全加固方法及实现
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #NOIP 2014#Day.2 T3 解方程
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (1)Android开发优化---------UI优化
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Java)【深基9.例1】选举学生会
  • (Java入门)抽象类,接口,内部类
  • (二开)Flink 修改源码拓展 SQL 语法
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (十六)视图变换 正交投影 透视投影
  • (未解决)macOS matplotlib 中文是方框