zoukankan      html  css  js  c++  java
  • rrt tree

    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));
      }

    }

  • 相关阅读:
    Failure [INSTALL_FAILED_ALREADY_EXISTS]
    在CentOS 7上构建RAID5、LVM和SAMBAserver(5)——架设SAMBAserver
    adb命令具体解释(二)——手机缺失sqlite3时操作数据库的多种解决方式
    【环境配置】Linux的经常使用命令
    windowsclient开发--使你的client执行时记住上次关闭的大小和位置
    【13】以对象管理资源
    C++ 初始化与赋值
    C++ 变量初始化规则
    C++ 构造和析构
    【20】宁以pass-by-reference-to-const替换pass-by-value
  • 原文地址:https://www.cnblogs.com/herd/p/10988020.html
Copyright © 2011-2022 走看看