| 
      		
    
           | 
       
      
			Chapter: 1. Source code download, 
						2. Test results, 3. Test item and method, 
						4. Comment on the resuls, 5. Test code
  
      1. Source code downloadreturn=>page top 
      =>
          RegionHitTest.zip
       
      
  
      2. Test resultsreturns=>page top 
      
        
          
             
               | 
           
          
             Figure1 Shapes to be tested 
            The "mouse hit test" using the contains method defined in the java.awt.Shape interface is effective for a closed shape. However, the test is also
            performed for an open shape just for reference. 
             | 
           
          
             
               | 
           
          
             Figure2 Test resuls; 
            Performs the hit test for each gridpoint and display the result by color. 
            blue:inside the closed shape,  gray:outside,  red:on the boundary | 
           
        
       
      
  
      3. Test item and methodreturns=>page top 
      This test checks whether the contains method defined in the java.awt.Shape interface is effective or not to a closed shape in "mouse hit test". Here
      the "mouse hit test" is a test to determine where the mouse
      position is located for the closed shape on the screen. 
      It is enough if the mouse position is classified into three cases: 
      (1) inside the closed shape, (2) outside the shape, or (3) on the boundary
      of the shape. 
      The "mouse hit test" is used for shape selection operation
      in practice, that is, when the boundary of the shape is clicked, then the
      shape is selected and the operations like moving or resizing the shape
      becomes available. 
      For this reason, the test should be performed on assumption
      that the shape's boundary has some width, at least 6 pixels or more. If
      the width of the boundary is assumed as 0 pixel, the shape selection
      operation may be very difficult for human operation, and
      it is not practical. 
       
      rNow, the above mentioned contains method tests if the specified point are inside the shape's boundary. This
      test is performed on the assumption that the the width of the shape's boundary
      is 0 pixel. So the "mouse hit test" can be executed as follows: 
       
      We define four test points around the current mouse position and tests
      whether each test point is inside the shape's boundary or not. 
      Here the distance from the mouse position to a test point nealy corresponds
      to the half width of the shape's boundary. 
       
       
      (1)If all the four test points are contained in the shape, the mouse position
      is considered to be located inside the shape.  
      (2)If all the four test points aren't contained in the shape, the mouse
      position is considered to be located outside the shape.  
      (3)Otherwise, the mouse position is considered to be on the boundary of
      the shape. 
       
      
        
          
               
             | 
               
             | 
               | 
           
          
            |  (1) Inside the closed shape | 
             (2) Outside the closed shape | 
             (3) On the boundary of the closed shape | 
           
        
       
      
  
      4. Comment on the resulsreturns=>page top 
      As you can see in the Figure 2, this test cannot be applicable to the unclosed shapes, for example, Ex1,
      Ex5, Ex6 and Ex9. If the mouse is located on the connecting line from
      the start point of the unclosed shape to its end point, the mouse position
      is regarded as it is on the boundary of the unclosed shape. So the unclosed
      shape will be selected by the mouse click, if the mouse is located on the
      nonexistent connecting line. 
      Therefore other method is necessary for unclosed shapes. 
       =>Mouse hit test for an unclosed shape 
      
  
5. Test codereturns=>page top 
 
5.1 Classes Overview 
      
        
          
            | 
             Class 
             | 
            
             Description 
             | 
           
          
            | 
             HRegionHitTest 
             | 
            
             public class RegionHitTest extends JFrame 
            Creates and assembles the objects of the Jframe, JScrollPane, JViewport
            and the Panel. 
             | 
           
          
            | RegionHitPanel | 
            
             public class RegionHitPanel extends JPanel 
            Draws several closed shapes and their test results on this object 
							shown as the Figure 1 and the Figure 2. 
             | 
           
          
            | TestCase | 
            
            class TestCase 
							Stores each test configuration. 
             | 
           
          
            | TestCurve | 
            
             public class Curve 
            Creates curves needed for the tests. 
             | 
           
          
            | Parametric Curves | 
            
              Segment2D, 
							Curve2D, 
							Rectangle2DE, 
							RoundRectangle2DE, 
							Ellipse2DE, 
							Line2DE, 
							Polyline2DE,
              CubicCurve2DE, 
							GeneralCurve2DE, 
							FergusonCurve2D  
						 | 
           |  
          
            | Geometric library | 
            
							Matrix, 
							Matrix2D 
             | 
           
        
       
      
  
			5.2 Specifications 
      5.2.1 public class RegionHitPanel extends JPanel 
      
        
          
            | 
             Method 
             | 
            
             Description 
             | 
           
          
            | createTestCase | 
            
             public void createTestCase() 
            Creates TestCase objects. 
             | 
           
          
            | getEnlargedBoundingBox | 
            
             public Rectangle2D getEnlargedBoundingBox(Rectangle2D boundingBox, double
            wideEx, double heightEx) 
            Parameters: 
            box - The Rectangle2D object. 
            wideEx - The horizontal amount of expanding. 
            heightEx - The vertical amount of expanding. 
            Returns: 
            The Enlarged Rectangle2D object. 
            Processing: 
            Returns the Enlarged Rectangle2D object. Its width is the width of
            box + 2*wideEx andits height width is the height of box + 2*heghtEx. 
             | 
           
          
            | getGridPoints | 
            
             public Point2D[] getGridPoints(Rectangle2D box) 
            parameters: 
            box - The Rectangle2D object. 
            Returns: The created grid points in the box. 
            Processing: 
            Creates a set of the grid points in the box and returns it. 
             =>The grid point shown in the Figue 2. 
             | 
           
          
            | containsPT | 
            
             public int containsPT(Shape shape, Point2D point) 
            parameters: 
            shape - The closed shape. 
            point - The point to be tested. 
            Returns: 
            0 - outside the shape. 
            1 - inside the shape. 
            2 - on the boundary of the shape. 
            Processing: 
            Tests whether the point is inside the shape, ot outside the shapeR or on the boundary of the shape, and returns the test result by 0, 1 or 2. 
             | 
           
          
            | paint | 
            
             public void paint(Graphics g) 
            Draws the shapes in the TestCase objects on this panel by the paintShape
            method, and draws their test results by the paintContainsTest method.  
             | 
           
          
            | paintShapes | 
            
             public void paintShapes(Graphics g) 
            Draws the shapes in the TestCase objects on this panel (Figure1). 
             | 
           
          
            | paintContainsTest | 
            
             public void paintContainsTest(Graphics g) 
            Draws the test resuls on this panel (Figure2).  
             | 
           
        
       
       
       
      5.2.2 public class TestCase 
       
     
        
          
            | 
             Field 
             | 
            
             Description 
             | 
           
          
            | title | 
            
             public String title = ""; 
            Testcase title. Figure 1, Figure 2 
             | 
           
          
            | targetShape | 
            
            public Curve2D targetShape 
            Stores the target shape object. The shape object => 
							Curve2D
             | 
           
          
            | targetShapes | 
            
							public Curve2D[] targetShapes 
							Stores the multiple target shape objects. The shape object => 
							Curve2D 
							This field is used in NormalLinesBetweenShapesBasic, NormalLinesBetweenShapes.
             | 
           
          
            | testShape | 
            
							public Curve2D testShape 
							Stores the test shape object. 
             | 
           
          
            | testShapes | 
            
							public Curve2D[] testShapes 
							Stores the multiple test shape objects. 
							This field is used in NormalLinesBetweenShapesBasic, NormalLinesBetweenShapes.
             | 
           
          
            | testPoints | 
            
							public Point2D[] testPoints 
							Returns the grid points created by the getGridPoints method as testPoints. 
							The created grid points are shown in Figure 2 
							and each grid point is shown by colors according to it lies outside or 
							inside the targetshape.
             | 
           
          
            | moveVector | 
            
            public Vector2D moveVector 
						Specify the moveVector when the test is executed by translating and copying 
						testShape etc.
             | 
           
          
            | moveMax | 
            
            public int moveMax=0 
						The number of the times for translating and copying.
             | 
           
          
            | drawRectangle | 
            
            public Rectangle2D drawRectangle 
						Display area of the test.
             | 
           
          
            | maxBoundingBox | 
            
							public Rectangle2D maxBoundingBox 
							Set this field by setMaxBoundingBoxで method. 
							Stores the rectangle which covers all given boundingBoxes.
             | 
           
        
       
       
			
      
        
          
            | 
             Method 
             | 
            
             Description 
             | 
           
          
            | moveTestShape | 
            
            public static Curve2D moveTestShape(Curve2D testShape, double moveX, double moveY); 
            Returns the Curve2D objects which are created by translating and copying the 
						testShape etc.
             | 
           
          
            | setMaxBoundingBox | 
            
							public void setMaxBoundingBox(Rectangle2D box); 
							Updates the the field variable maxBoundingBox 
							to be able to cover both rectangles given by the current field value maxBoundingBox 
							and given by the parameter box.
             | 
           
          
            | setMaxBoundingBox | 
            
            ublic void setMaxBoundingBox(Point2D point); 
							Updates the the field variable maxBoundingBox 
							to be able to cover the rectangles given by the current field value maxBoundingBox 
							and the point given by the parameter point.
             | 
           
        
       
			
  
      5.2.3 public class TestCurve 
       
        
          
            | Creates the shapes below. | 
           
          
            
              
						 
             | 
           
        
       
      
  
      
       |