• 大小: 33KB
    文件类型: .cs
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: C#
  • 标签: c#  KD树  

资源简介

C#实现KD树建立,最近邻点搜索,采用BBF进行了K近邻搜索优化

资源截图

代码片段和文件信息

//
//******************************************************************
//使用说明:
//1.必须先建立KD树,List类型作为CreatKDTree()的输入参数
//2.可以使用KD或BBF查找最近邻点KDTreeFindNearest()、BBFFindNearest()
//3.使用BBf查找k个最近邻点KNNByBBF()
//
//代码是对 http://download.csdn.net/detail/jjp837661103/5874937 进行的
//修改,增加了K近邻搜索,感谢jjp837661103的专栏附上其博客地址:
//http://blog.csdn.net/jjp837661103/article/details/9768751
//申明:若侵权,请留言,以删除 ---2016.2
//******************************************************************
//


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace outlineExtract
{
    /// 
    /// 树类
    /// 

    public class Node
    {
        /// 
        /// 节点信息
        /// 

        public Train point{get;set;}
        /// 
        /// 左子树
        /// 

        public Node leftNode { get; set; }  
        /// 
        /// 右子树 
        /// 

        public Node righNode { get; set; }
        /// 
        /// 分割的方向轴序号
        /// 

        public int split { get; set; } 
        /// 
        /// 父节点
        /// 

        public Node parent { get; set; }
        /// 
        /// 空间节点
        /// 

        public List range { get; set; }
    }
    /// 
    /// 节点类
    /// 

    public class Train
    {
        public double positionX { get; set; }
        public double positionY { get; set; }
        public double positionZ { get; set; }
        public Int32 AvgRssi { set; get; }

    }
    /// 
    ///节点优先 
    /// 

    public class PriorityList
    {
        public Node node { get; set; }
        public double priority { get; set; }
    }
    /// 
    /// k最近邻点
    /// 

    public class KNearestPoint
    {
        public Node node { get; set; }
        public double distance { get; set; }
    }

    /// 
    /// KD树
    /// 

    public class KDTree
    {
        private Dictionary clientRSSI;

        private List priorityList = new List(); //优先队列
        public List kNearestList = new List();//K最近邻点

        public KDTree()
        {
            clientRSSI = new Dictionary();
            clientRSSI.Add(“0060B3139D94“ -34);
            clientRSSI.Add(“002389B9AE6A“ -46);
            clientRSSI.Add(“0060B313A299“ -67);
            priorityList.Clear();       //清空队列          
        }

        #region 创建KD树
        /// 
        /// 创建KD树
        /// 

        /// 点集
        /// KD树
        public Node CreatKDTree(List train)
        {
            //创建节点
            Node node = new Node();
            node.range = train;

            if (

评论

共有 条评论