2014-11-22 166 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