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

📄 visualizepanel.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
			   intValue(), 			   ((Double)m_shapePoints.elementAt(2)).intValue(),			   ((Double)m_shapePoints.elementAt(3)).intValue() -			   ((Double)m_shapePoints.elementAt(1)).intValue(), 			   ((Double)m_shapePoints.elementAt(4)).intValue() -			   ((Double)m_shapePoints.elementAt(2)).intValue());				g.dispose();		if (checkPoints(((Double)m_shapePoints.elementAt(1)).				doubleValue(), 				((Double)m_shapePoints.elementAt(2)).				doubleValue()) &&		    checkPoints(((Double)m_shapePoints.elementAt(3)).				doubleValue(), 				((Double)m_shapePoints.elementAt(4)).				doubleValue())) {		  //then the points all land on the screen		  //now do special check for the rectangle		  if (((Double)m_shapePoints.elementAt(1)).doubleValue() <		      ((Double)m_shapePoints.elementAt(3)).doubleValue() 		      &&		      ((Double)m_shapePoints.elementAt(2)).doubleValue() <		      ((Double)m_shapePoints.elementAt(4)).doubleValue()) {		    //then the rectangle is valid		    if (m_shapes == null) {		      m_shapes = new FastVector(2);		    }		    m_shapePoints.setElementAt(new 		      Double(m_plot2D.convertToAttribX(((Double)m_shapePoints.					       elementAt(1)).					      doubleValue())), 1);		    m_shapePoints.setElementAt(new 		      Double(m_plot2D.convertToAttribY(((Double)m_shapePoints.					       elementAt(2)).					      doubleValue())), 2);		    m_shapePoints.setElementAt(new 		      Double(m_plot2D.convertToAttribX(((Double)m_shapePoints.					       elementAt(3)).					      doubleValue())), 3);		    m_shapePoints.setElementAt(new 		      Double(m_plot2D.convertToAttribY(((Double)m_shapePoints.					       elementAt(4)).					      doubleValue())), 4);		    		    m_shapes.addElement(m_shapePoints);		    		    m_submit.setText("Submit");		    m_submit.setActionCommand("Submit");		    		    m_submit.setEnabled(true);		    PlotPanel.this.repaint();		  }		}		m_shapePoints = null;	      }	    }	  }	});            this.addMouseMotionListener(new MouseMotionAdapter() {	  public void mouseDragged(MouseEvent e) {	    //check if the user is dragging a box	    if (m_createShape) {	      if (((Double)m_shapePoints.elementAt(0)).intValue() == 1) {		Graphics g = m_plot2D.getGraphics();		g.setColor(Color.black);		g.setXORMode(Color.white);		g.drawRect(((Double)m_shapePoints.elementAt(1)).intValue(), 			   ((Double)m_shapePoints.elementAt(2)).intValue(),			   ((Double)m_shapePoints.elementAt(3)).intValue() -			   ((Double)m_shapePoints.elementAt(1)).intValue(), 			   ((Double)m_shapePoints.elementAt(4)).intValue() -			   ((Double)m_shapePoints.elementAt(2)).intValue());				m_shapePoints.setElementAt(new Double(e.getX()), 3);		m_shapePoints.setElementAt(new Double(e.getY()), 4);				g.drawRect(((Double)m_shapePoints.elementAt(1)).intValue(), 			   ((Double)m_shapePoints.elementAt(2)).intValue(),			   ((Double)m_shapePoints.elementAt(3)).intValue() -			   ((Double)m_shapePoints.elementAt(1)).intValue(), 			   ((Double)m_shapePoints.elementAt(4)).intValue() -			   ((Double)m_shapePoints.elementAt(2)).intValue());		g.dispose();	      }	    }	  }	  	  public void mouseMoved(MouseEvent e) {	    if (m_createShape) {	      if (((Double)m_shapePoints.elementAt(0)).intValue() == 2 || 		  ((Double)m_shapePoints.elementAt(0)).intValue() == 3) {		Graphics g = m_plot2D.getGraphics();		g.setColor(Color.black);		g.setXORMode(Color.white);		g.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);				m_newMousePos.width = e.getX();		m_newMousePos.height = e.getY();				g.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);		g.dispose();	      }	    }	  }	});            m_submit.addActionListener(new ActionListener() {	  public void actionPerformed(ActionEvent e) {	 	    if (e.getActionCommand().equals("Submit")) {	      if (m_splitListener != null && m_shapes != null) {		//then send the split to the listener		Instances sub_set1 = new Instances(m_plot2D.getMasterPlot().						   m_plotInstances, 500);		Instances sub_set2 = new Instances(m_plot2D.getMasterPlot().						   m_plotInstances, 500);				if (m_plot2D.getMasterPlot().		    m_plotInstances != null) {		  		  for (int noa = 0 ; noa < m_plot2D.getMasterPlot().			 m_plotInstances.numInstances(); noa++) {		    if (!m_plot2D.getMasterPlot().			m_plotInstances.instance(noa).isMissing(m_xIndex) &&			!m_plot2D.getMasterPlot().			m_plotInstances.instance(noa).isMissing(m_yIndex)){		      		      if (inSplit(m_plot2D.getMasterPlot().				  m_plotInstances.instance(noa))) {			sub_set1.add(m_plot2D.getMasterPlot().				     m_plotInstances.instance(noa));		      }		      else {			sub_set2.add(m_plot2D.getMasterPlot().				     m_plotInstances.instance(noa));		      }		    }		  }		  FastVector tmp = m_shapes;		  cancelShapes();		  m_splitListener.userDataEvent(new 		    VisualizePanelEvent(tmp, sub_set1, sub_set2, m_xIndex, 					m_yIndex));		}	      }	      else if (m_shapes != null && 		       m_plot2D.getMasterPlot().m_plotInstances != null) { 		Instances sub_set1 = new Instances(m_plot2D.getMasterPlot().						   m_plotInstances, 500);		int count = 0;		for (int noa = 0 ; noa < m_plot2D.getMasterPlot().		       m_plotInstances.numInstances(); noa++) {		  if (inSplit(m_plot2D.getMasterPlot().			      m_plotInstances.instance(noa))) {		    sub_set1.add(m_plot2D.getMasterPlot().				 m_plotInstances.instance(noa));		    count++;		  }		  		}		int [] nSizes = null;		int [] nTypes = null;		int x = m_xIndex;		int y = m_yIndex;		if (m_originalPlot == null) {		  //this sets these instances as the instances 		  //to go back to.		  m_originalPlot = m_plot2D.getMasterPlot();		}		if (count > 0) {		  nTypes = new int[count];		  nSizes = new int[count];		  count = 0;		  for (int noa = 0; noa < m_plot2D.getMasterPlot().			 m_plotInstances.numInstances(); 		       noa++) {		    if (inSplit(m_plot2D.getMasterPlot().				m_plotInstances.instance(noa))) {		      nTypes[count] = m_plot2D.getMasterPlot().			m_shapeType[noa];		      nSizes[count] = m_plot2D.getMasterPlot().			m_shapeSize[noa];		      count++;		    }		  }		}		cancelShapes();		PlotData2D newPlot = new PlotData2D(sub_set1);		try {		  newPlot.setShapeSize(nSizes);		  newPlot.setShapeType(nTypes);				  m_plot2D.removeAllPlots();		  		  VisualizePanel.this.addPlot(newPlot);		} catch (Exception ex) {		  System.err.println(ex);		  ex.printStackTrace();		}		try {		  VisualizePanel.this.setXIndex(x);		  VisualizePanel.this.setYIndex(y);		} catch(Exception er) {		  System.out.println("Error : " + er);		  //  System.out.println("Part of user input so had to" +		  //		 " catch here");		}	      }	    }	    else if (e.getActionCommand().equals("Reset")) {	      int x = m_xIndex;	      int y = m_yIndex;	      m_plot2D.removeAllPlots();	      try {		VisualizePanel.this.addPlot(m_originalPlot);	      } catch (Exception ex) {		System.err.println(ex);		ex.printStackTrace();	      }	      try {		VisualizePanel.this.setXIndex(x);		VisualizePanel.this.setYIndex(y);	      } catch(Exception er) {		System.out.println("Error : " + er);	      }	    }	  }  	});      m_cancel.addActionListener(new ActionListener() {	  public void actionPerformed(ActionEvent e) {	    cancelShapes();	    PlotPanel.this.repaint();	  }	});      ////////////    }        /**     * @return The FastVector containing all the shapes.     */    public FastVector getShapes() {            return m_shapes;    }        /**     * Sets the list of shapes to empty and also cancels     * the current shape being drawn (if applicable).     */    public void cancelShapes() {             if (m_splitListener == null) {	m_submit.setText("Reset");	m_submit.setActionCommand("Reset");	if (m_originalPlot == null || 	    m_originalPlot.m_plotInstances == m_plotInstances) {	  m_submit.setEnabled(false);	}	else {	  m_submit.setEnabled(true);	}      }      else {	m_submit.setEnabled(false);      }            m_createShape = false;      m_shapePoints = null;      m_shapes = null;      this.repaint();    }    /**     * This can be used to set the shapes that should appear.     * @param v The list of shapes.     */    public void setShapes(FastVector v) {      //note that this method should be fine for doubles,      //but anything else that uses something other than doubles       //(or uneditable objects) could have unsafe copies.      if (v != null) {	FastVector temp;	m_shapes = new FastVector(v.size());	for (int noa = 0; noa < v.size(); noa++) {	  temp = new FastVector(((FastVector)v.elementAt(noa)).size());	  m_shapes.addElement(temp);	  for (int nob = 0; nob < ((FastVector)v.elementAt(noa)).size()		 ; nob++) {	    	    temp.addElement(((FastVector)v.elementAt(noa)).elementAt(nob));	    	  }	}      }      else {	m_shapes = null;      }      this.repaint();    }        /**      * This will check the values of the screen points passed and make sure      * that they land on the screen     * @param x1 The x coord.     * @param y1 The y coord.     */    private boolean checkPoints(double x1, double y1) {      if (x1 < 0 || x1 > this.getSize().width || y1 < 0 	  || y1 > this.getSize().height) {	return false;      }      return true;    }        /**     * This will check if an instance is inside or outside of the current     * shapes.     * @param i The instance to check.     * @return True if 'i' falls inside the shapes, false otherwise.     */    public boolean inSplit(Instance i) {      //this will check if the instance lies inside the shapes or not            if (m_shapes != null) {	FastVector stmp;	double 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 = ((Double)stmp.elementAt(1)).doubleValue();	    y1 = ((Double)stmp.elementAt(2)).doubleValue();	    x2 = ((Double)stmp.elementAt(3)).doubleValue();	    y2 = ((Double)stmp.elementAt(4)).doubleValue();	    if (i.value(m_xIndex) >= x1 && i.value(m_xIndex) <= x2 &&		i.value(m_yIndex) <= y1 && i.value(m_yIndex) >= y2) {	      //then is inside split so return true;	      return true;	    }	  }	  else if (((Double)stmp.elementAt(0)).intValue() == 2) {	    //then polygon	    if (inPoly(stmp, i.value(m_xIndex), i.value(m_yIndex))) {	      return true;	    }	  }	  else if (((Double)stmp.elementAt(0)).intValue() == 3) {	    //then polyline	    if (inPolyline(stmp, i.value(m_xIndex), i.value(m_yIndex))) {	      return true;	    }	  }	}      }      return false;    }        /**     * Checks to see if the coordinate passed is inside the ployline     * passed, Note that this is done using attribute values and not there     * respective screen values.     * @param ob The polyline.     * @param x The x coord.     * @param y The y coord.     * @return True if it falls inside the polyline, false otherwise.     */    private boolean inPolyline(FastVector ob, double x, double y) {      //this works similar to the inPoly below except that      //the first and last lines are treated as extending infinite in one       //direction and       //then infinitly in the x dirction their is a line that will       //normaly be infinite but      //can be finite in one or both directions            int countx = 0;      double vecx, vecy;      double change;      double x1, y1, x2, y2;            for (int noa = 1; noa < ob.size() - 4; noa+= 2) {	y1 = ((Double)ob.elementAt(noa+1)).doubleValue();	y2 = ((Double)ob.elementAt(noa+3)).doubleValue();	x1 = ((Double)ob.elementAt(noa)).doubleValue();	x2 = ((Double)ob.elementAt(noa+2)).doubleValue();		//System.err.println(y1 + " " + y2 + " " + x1 + " " + x2);	vecy = y2 - y1;	vecx = x2 - x1;	if (noa == 1 && noa == ob.size() - 6) {	  //then do special test first and last edge	  if (vecy != 0) {	    change = (y - y1) / vecy;	    if (vecx * change + x1 >= x) {	      //then intersection	      countx++;	    }	  }

⌨️ 快捷键说明

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