package com.bim.rrt_20190529;

import static java.lang.Math.pow;
import static java.lang.Math.sqrt;

import java.util.ArrayList;

public class Tree {
Node root;//起点位置
  ArrayList<Node> nodeArrayList;

  
  public Tree(Node node) {
    root = new Node(node, 0, Double.POSITIVE_INFINITY, null);
    nodeArrayList = new ArrayList<Node>();
    nodeArrayList.add(root);
  }

  /**
   * 存入节点
   * @param parent
   * @param child
   */
  public void add(Node parent, Node child) {
    parent.addChild(child);
    nodeArrayList.add(child);
    child.setParent(parent);
  }

  /**
   * 移除点
   * @param node
   */
  public void remove(Node node) {
    node.getParent().removeChild(node);
    nodeArrayList.remove(node);
  }

  /**
   * 点是否存在
   * @param nodeReq
   * @return
   */
  public boolean contains(Node nodeReq) {
    return nodeArrayList.contains(nodeReq);
  }

  /**
  * 选择离随机点最近的点
  * @param randomNode
  * @return
  */
  public Node nearestNode(Node randomNode) {
   //System.out.println("计算距离:x="+randomNode.getX()+" y="+randomNode.getX()+" z="+randomNode.getZ());
   //System.out.println("计算距离:x="+root.getX()+" y="+root.getX()+" z="+root.getZ());
    double minDistance = distance(root, randomNode);//随机点和起点之间的距离
    Node nearestNode = root;
    for (Node node : nodeArrayList) {//遍历树上所有节点
      double currentDistance = distance(node, randomNode);//随机点和遍历点之间的距离
      if (currentDistance < minDistance) {
        minDistance = currentDistance;
        nearestNode = node;
      }
    }
    return nearestNode;
  }

  /**
  * 计算两个点之间的距离
  * @param node1
  * @param node2
  * @return
  */
  private double distance(Node node1,Node node2) {
    return sqrt(pow(node1.getX() - node2.getX(), 2) + pow(node1.getY() - node2.getY(), 2));
  }

}

最新文章

  1. iOS10字体
  2. linux文件上传,给文件或目录添加apache权限
  3. 用minidwep-gtk研究wifi
  4. 【leetcode】13. Roman to Integer
  5. sencha touch 框架的几种核心脚本文件之间的区别
  6. java 服务端解决ajax跨域问题
  7. NetAnalyzer笔记 之 五 一些抓包技巧分享(不定期更新)
  8. 一个简单的Java集合范围过滤的多个方式对比
  9. C语言中strcpy,strcmp,strlen,strcat函数原型
  10. [项目记录] 用c语言完成的一个学生成绩管理系统
  11. 使用 EclEmma 进行覆盖测试
  12. grep 同时满足多个关键字、满足任意关键字和排除关键字
  13. Java进阶(三十四)Integer与int的种种比较你知道多少?
  14. python3字典练习(重要)
  15. 基本标签-html-1
  16. 如何配置Linux系统防火墙,以防止DDOS攻击?
  17. 巧用style的另类写法
  18. Mysql中的delimiter详解
  19. python数据分析基础——numpy和matplotlib
  20. 算法与数据结构实验题 4.2 小 F 打怪

热门文章

  1. springboot 使用 @data 插件,减少代码量
  2. 向量的一种特殊乘法 element wise multiplication
  3. sklearn线性回归实现房价预测模型
  4. webpac4k运行webpack .\src\main.js .\dist\bundle.js打包出错
  5. Vue.js项目中使用 Ajax 和 FormDate 对象上传文件
  6. 001-官网安装openstack之-安装前基础环境准备
  7. python3.6中 字典类型和字符串类型互相转换的方法
  8. hibernate配置和映射文件
  9. centos 7.3 开放端口并对外开放
  10. 004_linuxC++之_函数的重载