2014-11-22 61 views
2

我需要使程序中有一个三角形,当我点击三角形的消息框时会显示“在三角形”,如果点击外部然后“外面的三角形”如何获得该点击的形状或形状之外。

有代码的三角形,并获得点击坐标。但我无法对上面提到的逻辑进行描述。

如果有更好的方法来绘制三角形然后告诉我那。 或者如果这项工作在matlab中很容易,那么也建议我这样做。

1类绘制三角形

public class Triangle extends JComponent 
    { 
     public void paintComponent(Graphics g) 
     { 
      Graphics2D g2 = (Graphics2D) g; 
      g2.draw(new Line2D.Double (100, 100, 200, 100)); 
      g2.draw(new Line2D.Double (100, 100, 150, 200)); 
      g2.draw(new Line2D.Double (150, 200, 200, 100)); 
       } 
     } 

2类

public class Tri_Angle extends MouseAdapter {   
Tri_Angle(){ 
     addMouseListener(new MouseAdapter() { 
     public void mousePressed(MouseEvent me) { 
     int x= me.getX(); 
     int y=  me.getY(); 
     System.out.println("clicked at (" + x + ", " + y + ")"); 
     } 
    }); 
} 


public static void main(String[] args) { 
    Triangle component = new Triangle(); 
    JFrame frame = new JFrame();   
    final int FRAME_WIDTH = 250; 
    final int FRAME_HEIGHT = 250; 
    frame.setSize (FRAME_WIDTH, FRAME_HEIGHT);   
     frame.addMouseListener(new MouseAdapter() { 
     public void mousePressed(MouseEvent me) { 
     int x= me.getX(); 
     int y= me.getY(); 
     System.out.println("clicked at (" + x + ", " + y + ")"); 
     } 
    }); 
    frame.setTitle("A Test Frame"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    frame.add(component); 
} 

回答

0

这是很简单的。

  • 取三角形顶点:p1(100,100),p2(200,100),p3(150,200);
  • 恢复每条线的线方程;
  • 对于点击坐标和对角线函数的每个三角形顶点符号应该是相同的。

Java代码:

public class Point { 
    public final double x; 
    public final double y; 
    ... 
} 

// -1 - point is "below" line, 0 - point is on line, +1 - point is "above" line 
private int getPointPosition(Point p, Point p1, Point p2) { 
    // Line equation: (p.x - p1.x)/(p1.x - p2.x) - (p.y - p1.y)/(p1.y - p2.y)) = 0 
    // Canonical form: F = Ax + By + C 
    return Double.sign((p.x - p1.x) * (p1.y - p2.y) - (p.y - p1.y) * (p1.x - p2.x)); 
} 

private boolean isInTriangle(Point p, Point p1, Point p2, Point p3) { 
    return getPointPosition(p, p1, p2) == getPointPosition(p3, p1, p2) && 
     getPointPosition(p, p1, p3) == getPointPosition(p2, p1, p3) && 
     getPointPosition(p, p2, p3) == getPointPosition(p1, p2, p3); 
} 

为了更好地理解这个数学的,你可以在纸上绘制图像,并与方程玩。

+0

请你解释一下代码。我没有得到它。 – 2014-11-22 19:32:28