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

📄 visualizepanel.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	}	else if (noa == 1) {	  if ((y < y2 && vecy > 0) || (y > y2 && vecy < 0)) {	    //now just determine intersection or not	    change = (y - y1) / vecy;	    if (vecx * change + x1 >= x) {	      //then intersection on horiz	      countx++;	    }	  }	}	else if (noa == ob.size() - 6) {	  //then do special test on last edge	  if ((y <= y1 && vecy < 0) || (y >= y1 && vecy > 0)) {	    change = (y - y1) / vecy;	    if (vecx * change + x1 >= x) {	      countx++;	    }	  }	}	else if ((y1 <= y && y < y2) || (y2 < y && y <= y1)) {	  //then continue tests.	  if (vecy == 0) {	    //then lines are parallel stop tests in 	    //ofcourse it should never make it this far	  }	  else {	    change = (y - y1) / vecy;	    if (vecx * change + x1 >= x) {	      //then intersects on horiz	      countx++;	    }	  }	}      }            //now check for intersection with the infinity line      y1 = ((Double)ob.elementAt(ob.size() - 2)).doubleValue();      y2 = ((Double)ob.elementAt(ob.size() - 1)).doubleValue();            if (y1 > y2) {	//then normal line	if (y1 >= y && y > y2) {	  countx++;	}      }      else {	//then the line segment is inverted	if (y1 >= y || y > y2) {	  countx++;	}      }            if ((countx % 2) == 1) {	return true;      }      else {	return false;      }    }    /**     * This checks to see if The coordinate passed is inside     * the polygon that was passed.     * @param ob The polygon.     * @param x The x coord.     * @param y The y coord.     * @return True if the coordinate is in the polygon, false otherwise.     */    private boolean inPoly(FastVector ob, double x, double y) {      //brief on how this works      //it draws a line horizontally from the point to the right (infinitly)      //it then sees how many lines of the polygon intersect this,       //if it is even then the point is      // outside the polygon if it's odd then it's inside the polygon      int count = 0;      double vecx, vecy;      double change;      double x1, y1, x2, y2;      for (int noa = 1; noa < ob.size() - 2; noa += 2) {	y1 = ((Double)ob.elementAt(noa+1)).doubleValue();	y2 = ((Double)ob.elementAt(noa+3)).doubleValue();	if ((y1 <= y && y < y2) || (y2 < y && y <= y1)) {	  //then continue tests.	  vecy = y2 - y1;	  if (vecy == 0) {	    //then lines are parallel stop tests for this line	  }	  else {	    x1 = ((Double)ob.elementAt(noa)).doubleValue();	    x2 = ((Double)ob.elementAt(noa+2)).doubleValue();	    vecx = x2 - x1;	    change = (y - y1) / vecy;	    if (vecx * change + x1 >= x) {	      //then add to count as an intersected line	      count++;	    }	  }	}      }      if ((count % 2) == 1) {	//then lies inside polygon	//System.out.println("in");	return true;      }      else {	//System.out.println("out");	return false;      }      //System.out.println("WHAT?!?!?!?!!?!??!?!");      //return false;    }    /**     * Set level of jitter and repaint the plot using the new jitter value     * @param j the level of jitter     */    public void setJitter(int j) {      m_plot2D.setJitter(j);    }    /**     * Set the index of the attribute to go on the x axis     * @param x the index of the attribute to use on the x axis     */    public void setXindex(int x) {      // this just ensures that the shapes get disposed of       //if the attribs change      if (x != m_xIndex) {	cancelShapes();      }      m_xIndex = x;      m_plot2D.setXindex(x);      if (m_showAttBars) {	m_attrib.setX(x);      }      //      this.repaint();    }        /**     * Set the index of the attribute to go on the y axis     * @param y the index of the attribute to use on the y axis     */    public void setYindex(int y) {          // this just ensures that the shapes get disposed of       //if the attribs change      if (y != m_yIndex) {	cancelShapes();      }      m_yIndex = y;      m_plot2D.setYindex(y);      if (m_showAttBars) {	m_attrib.setY(y);      }      //      this.repaint();    }    /**     * Set the index of the attribute to use for colouring     * @param c the index of the attribute to use for colouring     */    public void setCindex(int c) {      m_cIndex = c;      m_plot2D.setCindex(c);      if (m_showAttBars) {	m_attrib.setCindex(c, m_plot2D.getMaxC(), m_plot2D.getMinC());      }      m_classPanel.setCindex(c);      this.repaint();    }    /**     * Set the index of the attribute to use for the shape.     * @param s the index of the attribute to use for the shape     */    public void setSindex(int s) {      if (s != m_sIndex) {	m_shapePoints = null;	m_createShape = false;      }      m_sIndex = s;      this.repaint();    }    /**     * Clears all existing plots and sets a new master plot     * @param newPlot the new master plot     * @exception Exception if plot could not be added     */    public void setMasterPlot(PlotData2D newPlot) throws Exception {      m_plot2D.removeAllPlots();      this.addPlot(newPlot);    }    /**     * Adds a plot. If there are no plots so far this plot becomes     * the master plot and, if it has a custom colour defined then     * the class panel is removed.     * @param newPlot the plot to add.     * @exception Exception if plot could not be added     */    public void addPlot(PlotData2D newPlot) throws Exception {      if (m_plot2D.getPlots().size() == 0) {	m_plot2D.addPlot(newPlot);	if (m_plotSurround.getComponentCount() > 1 && 	    m_plotSurround.getComponent(1) == m_attrib &&	    m_showAttBars) {	  try {	    m_attrib.setInstances(newPlot.m_plotInstances);	    m_attrib.setCindex(0);m_attrib.setX(0); m_attrib.setY(0);	  } catch (Exception ex) {	    // more attributes than the panel can handle?	    // Due to hard coded constraints in GridBagLayout	    m_plotSurround.remove(m_attrib);	    System.err.println("Warning : data contains more attributes "			       +"than can be displayed as attribute bars.");	    if (m_Log != null) {	      m_Log.logMessage("Warning : data contains more attributes "			       +"than can be displayed as attribute bars.");	    }	  }	} else if (m_showAttBars) {	  try {	    m_attrib.setInstances(newPlot.m_plotInstances);	    m_attrib.setCindex(0);m_attrib.setX(0); m_attrib.setY(0);	    GridBagConstraints constraints = new GridBagConstraints();	    constraints.fill = constraints.BOTH;	    constraints.insets = new Insets(0, 0, 0, 0);	    constraints.gridx=4;constraints.gridy=0;constraints.weightx=1;	    constraints.gridwidth=1;constraints.gridheight=1;	    constraints.weighty=5;	    m_plotSurround.add(m_attrib, constraints);	  } catch (Exception ex) {	    System.err.println("Warning : data contains more attributes "			       +"than can be displayed as attribute bars.");	    if (m_Log != null) {	      m_Log.logMessage("Warning : data contains more attributes "			       +"than can be displayed as attribute bars.");	    }	  }	}	m_classPanel.setInstances(newPlot.m_plotInstances);	plotReset(newPlot.m_plotInstances, newPlot.getCindex());	if (newPlot.m_useCustomColour) {	  VisualizePanel.this.remove(m_classSurround);	  switchToLegend();	  m_legendPanel.setPlotList(m_plot2D.getPlots());	  m_ColourCombo.setEnabled(false);	}      } else  {	if (!newPlot.m_useCustomColour) {	  VisualizePanel.this.add(m_classSurround, BorderLayout.SOUTH);	  m_ColourCombo.setEnabled(true);	}	if (m_plot2D.getPlots().size() == 1) {	  switchToLegend();	}	m_plot2D.addPlot(newPlot);	m_legendPanel.setPlotList(m_plot2D.getPlots());      }    }    /**     * Remove the attibute panel and replace it with the legend panel     */    protected void switchToLegend() {      if (m_plotSurround.getComponentCount() > 1 && 	  m_plotSurround.getComponent(1) == m_attrib) {	m_plotSurround.remove(m_attrib);      }	      if (m_plotSurround.getComponentCount() > 1 &&	  m_plotSurround.getComponent(1) == m_legendPanel) {	return;      }      GridBagConstraints constraints = new GridBagConstraints();      constraints.fill = constraints.BOTH;      constraints.insets = new Insets(0, 0, 0, 0);      constraints.gridx=4;constraints.gridy=0;constraints.weightx=1;      constraints.gridwidth=1;constraints.gridheight=1;      constraints.weighty=5;      m_plotSurround.add(m_legendPanel, constraints);      setSindex(0);      m_ShapeCombo.setEnabled(false);    }    /**     * Reset the visualize panel's buttons and the plot panels instances     */    private void plotReset(Instances inst, int cIndex) {      if (m_splitListener == null) {	m_submit.setText("Reset");	m_submit.setActionCommand("Reset");	//if (m_origInstances == null || m_origInstances == inst) {	if (m_originalPlot == null || m_originalPlot.m_plotInstances == inst) {	  m_submit.setEnabled(false);	}	else {	  m_submit.setEnabled(true);	}      }       else {	m_submit.setEnabled(false);      }      m_plotInstances = inst;      if (m_splitListener != null) {	m_plotInstances.randomize(new Random());      }      m_xIndex=0;      m_yIndex=0;      m_cIndex=cIndex;      cancelShapes();    }    /**     * Set a list of colours to use for plotting points     * @param cols a list of java.awt.Colors     */    public void setColours(FastVector cols) {      m_plot2D.setColours(cols);      m_colorList = cols;    }        /**     * This will draw the shapes created onto the panel.     * For best visual, this should be the first thing to be drawn     * (and it currently is).     * @param gx The graphics context.     */    private void drawShapes(Graphics gx) {      //FastVector tmp = m_plot.getShapes();            if (m_shapes != null) {	FastVector stmp;	int x1, y1, x2, y2;	for (int noa = 0; noa < m_shapes.size(); noa++) {	  stmp = (FastVector)m_shapes.elementAt(noa);	  if (((Double)stmp.elementAt(0)).intValue() == 1) {	    //then rectangle	    x1 = (int)m_plot2D.convertToPanelX(((Double)stmp.elementAt(1)).				      doubleValue());	    y1 = (int)m_plot2D.convertToPanelY(((Double)stmp.elementAt(2)).				      doubleValue());	    x2 = (int)m_plot2D.convertToPanelX(((Double)stmp.elementAt(3)).				      doubleValue());	    y2 = (int)m_plot2D.convertToPanelY(((Double)stmp.elementAt(4)).				      doubleValue());	    	    gx.setColor(Color.gray);	    gx.fillRect(x1, y1, x2 - x1, y2 - y1);	    gx.setColor(Color.black);	    gx.drawRect(x1, y1, x2 - x1, y2 - y1);	    	  }	  else if (((Double)stmp.elementAt(0)).intValue() == 2) {	    //then polygon	    int[] ar1, ar2;	    ar1 = getXCoords(stmp);	    ar2 = getYCoords(stmp);	    gx.setColor(Color.gray);	    gx.fillPolygon(ar1, ar2, (stmp.size() - 1) / 2); 	    gx.setColor(Color.black);	    gx.drawPolyline(ar1, ar2, (stmp.size() - 1) / 2);	  }	  else if (((Double)stmp.elementAt(0)).intValue() == 3) {	    //then polyline	    int[] ar1, ar2;	    FastVector tmp = makePolygon(stmp);	    ar1 = getXCoords(tmp);	    ar2 = getYCoords(tmp);	    	    gx.setColor(Color.gray);	    gx.fillPolygon(ar1, ar2, (tmp.size() - 1) / 2);	    gx.setColor(Color.black);	    gx.drawPolyline(ar1, ar2, (tmp.size() - 1) / 2);	  }	}      }            if (m_shapePoints != null) {	//then the current image needs to be refreshed	if (((Double)m_shapePoints.elementAt(0)).intValue() == 2 ||	    ((Double)m_shapePoints.elementAt(0)).intValue() == 3) {	  gx.setColor(Color.black);	  gx.setXORMode(Color.white);	  int[] ar1, ar2;	  ar1 = getXCoords(m_shapePoints);	  ar2 = getYCoords(m_shapePoints);	  gx.drawPolyline(ar1, ar2, (m_shapePoints.size() - 1) / 2);	  m_newMousePos.width = (int)Math.ceil	    (m_plot2D.convertToPanelX(((Double)m_shapePoints.elementAt			      (m_shapePoints.size() - 2)).doubleValue()));	  	  m_newMousePos.height = (int)Math.ceil	    (m_plot2D.convertToPanelY(((Double)m_shapePoints.elementAt			      (m_shapePoints.size() - 1)).doubleValue()));	  	  gx.drawLine((int)Math.ceil		     (m_plot2D.convertToPanelX(((Double)m_shapePoints.elementAt						(m_shapePoints.size() - 2)).					       doubleValue())),		      (int)Math.ceil(m_plot2D.convertToPanelY				     (((Double)m_shapePoints.elementAt				       (m_shapePoints.size() - 1)).				      doubleValue())),		      m_newMousePos.width, m_newMousePos.height);	  gx.setPaintMode();	}      }    }        /**     * This is called for polylines to see where there two lines that     * extend to infinity cut the border of the view.     * @param x1 an x point along the line     * @param y1 the accompanying y point.     * @param x2 The x coord of the end point of the line.     * @param y2 The y coord of the end point of the line.     * @param x 0 or the width of the border line if it has one.

⌨️ 快捷键说明

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