⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 placenode2.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	ns = r.getChild(noa).getTarget();      }      //m_groups[f].gap =      //              Math.ceil((a.amount / (double)ps) + m_groups[f].gap);      //note for this method i do not need the group gap ,but i will leave      //it for the other methods;      Vector o_pos = new Vector(20,10);      for (int noa = 0;(e = r.getChild(noa)) != null;noa++) {	if (e.getTarget().getParent(0) == e) {	  Double tem = new Double(e.getTarget().getCenter());	  o_pos.addElement(tem);	}      }      pf--;      double inc = a.m_amount / (double)ps;      for (int noa = 0;(e = r.getChild(noa)) != null;noa++) {	ns = e.getTarget();	if (ns.getParent(0) == e) {	  if (noa > pf + ps) {	    ns.adjustCenter(a.m_amount);	  }	  else if (noa > pf) {	    ns.adjustCenter(inc * (double)(noa - pf));	  }	}      }      nf = r.getChild(0).getTarget();      inc = ns.getCenter() - nf.getCenter();      m_groups[f].m_size = inc;      m_groups[f].m_left = r.getCenter() - inc / 2;       m_groups[f].m_right = m_groups[f].m_left + inc;      inc = m_groups[f].m_left - nf.getCenter();      double shift;      int g_num = 0;      for (int noa = 0;(e = r.getChild(noa)) != null;noa++) {	ns = e.getTarget();	if (ns.getParent(0) == e) {	  ns.adjustCenter(inc);	  shift = ns.getCenter() - 	    ((Double)o_pos.elementAt(noa)).doubleValue();	  if (ns.getChild(0) != null) {	    moveSubtree(m_groups[f].m_start + g_num,shift);	    g_num++;	  }	}	//ns.adjustCenter(-shift);      }      //zero_offset(r);            //x_placer(f);    }  }  /**   * This will recursively shift a sub there to be centered about   * a particular value.   * @param n The first group in the sub tree.   * @param o The point to start shifting the subtree.   */  private void moveSubtree(int n,double o) {    Edge e;    Node r = m_groups[n].m_p;    for (int noa = 0;(e = r.getChild(noa)) != null;noa++) {      if (e.getTarget().getParent(0) == e) {	e.getTarget().adjustCenter(o);      }    }    m_groups[n].m_left += o;    m_groups[n].m_right += o;    if (m_groups[n].m_start != -1) {      for (int noa = m_groups[n].m_start;noa <= m_groups[n].m_end;noa++) {	moveSubtree(noa,o);      }    }  }  /**   * This will untangle the nodes in the tree so that they fall on the   * correct side of each other.   */  private void untangle() {    Ease a;    Edge e;    Node r,nf = null,ns = null,mark;    int l = 0,times = 0;    int f,s,tf = 0,ts = 0,pf,ps;    while ((a = overlap(l)) != null) {      times++;      //System.out.println(group_num);      f = a.m_place;      s = a.m_place + 1;      while (f != s) {	a.m_lev--;	tf = f;	ts = s;	f = m_groups[f].m_pg;	s = m_groups[s].m_pg;      }      l = a.m_lev;      pf = 0;      ps = 0;      r = m_groups[f].m_p;      mark = m_groups[tf].m_p;      nf = null;      ns = null;      for (int noa = 0; nf != mark;noa++) {	pf++;	nf = r.getChild(noa).getTarget();      }      mark = m_groups[ts].m_p;      for (int noa = pf; ns != mark;noa++) {	ps++; //the number of gaps between the two nodes	ns = r.getChild(noa).getTarget();      }      m_groups[f].m_gap =	Math.ceil((a.m_amount / (double)ps) + m_groups[f].m_gap);            xPlacer(f);    }  }    /**   * This will find an overlap and then return information about that overlap   * @param l The level to start on.   * @return null if there was no overlap , otherwise an object containing   * the group number that overlaps (only need one) how much they overlap by,   * and the level they overlap on.   */  private Ease overlap(int l) {    Ease a = new Ease();    for (int noa = l;noa < m_levelNum;noa++) {      for (int nob = m_levels[noa].m_start;nob < m_levels[noa].m_end;nob++) {	a.m_amount = m_groups[nob].m_right - m_groups[nob+1].m_left + 2;	//System.out.println(m_groups[nob].m_right + " + " + 	//	       m_groups[nob+1].m_left + " = " + a.amount);	if (a.m_amount >= 0) {	  a.m_amount++;	  a.m_lev = noa;	  a.m_place = nob;	  return a;	}      }    }    return null;  }    /* private int count_m_groups(Node r,int l)  {    Edge e;    if (r.getChild(0) != null)      {	l++;      }    for (int noa = 0;(e = r.getChild(noa)) != null;noa++)      {	l = count_groups(e.getTarget(),l);      }    return l;  }  */  /**   * This function sets up the height of each node, and also fills the   * levels array with information about what the start and end groups on that   * level are.   */  private void yPlacer() {    //note this places the y height and sets up the levels array    double changer = m_yRatio;    int lev_place = 0;    if (m_groupNum > 0) {      m_groups[0].m_p.setTop(m_yRatio);      m_levels[0].m_start = 0;            for (int noa = 0;noa < m_groupNum;noa++) {	if (m_groups[noa].m_p.getTop() != changer) {	  m_levels[lev_place].m_end = noa - 1;	  lev_place++;	  m_levels[lev_place].m_start = noa;	  changer = m_groups[noa].m_p.getTop();	}	nodeY(m_groups[noa].m_p);      }      m_levels[lev_place].m_end = m_groupNum - 1;    }  }  /**   * This will set all of the children node of a particular node to their   * height.   * @param r The parent node of the children to set their height.    */  private void nodeY(Node r) {    Edge e;    double h = r.getTop() + m_yRatio;    for (int noa = 0;(e = r.getChild(noa)) != null;noa++) {      if (e.getTarget().getParent(0) == e) {	e.getTarget().setTop(h);	if (!e.getTarget().getVisible()) {	  //System.out.println("oh bugger");	}      }    }  }    /**   * This starts to create the information about the sibling groups.   * As more groups are created the for loop in this will check those groups   * for lower groups.   * @param r The top node.   */  private void groupBuild(Node r) {    if (m_groupNum > 0) {      m_groupNum = 0;      m_groups[0].m_p = r;      m_groupNum++;      //note i need to count up the num of groups first      //woe is me      for (int noa = 0;noa < m_groupNum ;noa++) {	groupFind(m_groups[noa].m_p,noa);      }    }  }    /**   * This is called to build the rest of the grouping information.   * @param r The parent of the group.   * @param pg The number for the parents group.   */  private void groupFind(Node r,int pg) {    Edge e;    boolean first = true;    for (int noa = 0;(e = r.getChild(noa)) != null;noa++) {      if (e.getTarget().getParent(0) == e) {	if (e.getTarget().getChild(0) != null && e.getTarget().getCVisible()) {	  if (first) {	    m_groups[pg].m_start = m_groupNum;	    first = false;	  }	  m_groups[pg].m_end = m_groupNum;	  m_groups[m_groupNum].m_p = e.getTarget();	  m_groups[m_groupNum].m_pg = pg;	  m_groups[m_groupNum].m_id = m_groupNum; //just in case I ever need	  //this info	  m_groupNum++;	}      }    }  }    //note these three classes are only to help organise the data and are  //inter related between each other and this placer class  //so don't mess with them or try to use them somewhere else  //(because that would be a mistake and I would pity you)    /**   * Inner class for containing the level data.   */  private class Level {    /** The number for the group on the left of this level. */    public int m_start;    /** The number for the group on the right of this level. */    public int m_end;    /** These two params would appear to not be used. */    public int m_left;    public int m_right;  }  /**   * Inner class for containing the grouping data.   */  private class Group {    /** The parent node of this group. */    public Node m_p;    /** The group number for the parent of this group. */    public int m_pg;    /** The gap size for the distance between the nodes in this group. */    public double m_gap;    /** The leftmost position of this group. */    public double m_left;    /** The rightmost position of this group. */    public double m_right;    /** The size of this group. */    public double m_size;    /** The start node of this group. */    public int m_start;    /** The end node of this group. */    public int m_end;    /** The group number for this group. (may not be used!?). */    public int m_id;  }    /**   * An inner class used to report information about any tangles found.    */  private class Ease {    /** The number of the group on the left of the tangle. */    public int m_place;    /** The distance they were tangled. */    public double m_amount;    /** The level on which they were tangled. */    public int m_lev;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -