Ajuda: Lógica para testar se um triângulo contém um ponto

Boa Tarde a todos,

Estou tentando fazer a lógica de verificar se um ponto está contido em um triangulo, mas não tenho a mínima idéia de como fazer isso!
Alguém teria alguma dica ou site que eu possa pesquisar?
Já procurei no google, mas não tive resultados

Agradeço desde já!
Abs e um feliz ano novo para todos

Edit:
Corrigi o título para o que eu realmente quero.

Mas o que vc quer testar?
Se um triângulo intercepta outro?
Se algo intercepta um ponto específico do triângulo?

Eu queria definir um triângulo, ou um vetor deles, e desenhar eles na tela…

Então vamos dizer que eu coloquei um triangulo com suas pontas nas posicoes:

p1 = [0,0]
p2 = [10,10]
p3 = [15,5]

E agora digamos que eu queira desenhar o pixel [5,5] está contido no triangulo…

Vendo agora parece que intersecção não é a palavra certa, eu quero testar se um ponto está contido no triângulo,
mas conforme for a intersecção entre dois triângulos pode me dar uma dica de como fazer isso.

Fazer essa verificação manualmente é um tanto trabalhosa. É cabível usar a classe Polygon que tem um método contains() que faz exatamente o que você precisa. Um exemplo:

// primeiro, as coordenadas X, depois as coordenadas Y e o número de pontos
System.out.println(new Polygon(new int[] { 0, 10, 15 },
						new int[] { 0, 10, 5 }, 3).contains(5, 5)); // imprime true

Vc pode fazer como o marco disse, ou também usando a classe Path2D do pacote java.awt.geom (a partir do Java 6)

Segue um exemplo:

Arquivo PainelTriangulo.java

[code]/**
*

  • @author David Buzatto
    */
    public class PainelTriangulo extends JPanel {

    private Path2D.Float triangulo;

    public PainelTriangulo() {
    triangulo = new Path2D.Float();
    triangulo.moveTo( 50, 100 );
    triangulo.lineTo( 100, 100 );
    triangulo.lineTo( 75, 50 );
    triangulo.closePath();
    }

    @Override
    protected void paintComponent( Graphics g ) {
    super.paintComponent( g );
    Graphics2D g2d = ( Graphics2D ) g;
    g2d.fill( triangulo );
    }

    public Path2D.Float getTriangulo() {
    return triangulo;
    }

}[/code]

Arquivo Frame.java

[code]/**
*

  • @author David Buzatto
    */
    public class Frame extends JFrame {

    private PainelTriangulo p;
    private JLabel label;

    public Frame() {

     p = new PainelTriangulo();
     label = new JLabel( "Clique no painel..." );
    
     add( p, BorderLayout.CENTER );
     add( label, BorderLayout.SOUTH );
    
     p.setCursor( new Cursor( Cursor.CROSSHAIR_CURSOR ) );
     p.addMouseListener( new PainelMouseListener() );
    
     setSize( 300, 300 );
     setDefaultCloseOperation( EXIT_ON_CLOSE );
     setVisible( true );
    

    }

    private class PainelMouseListener extends MouseAdapter {

     @Override
     public void mouseClicked( MouseEvent e ) {
         boolean contem = p.getTriangulo().contains( e.getX(), e.getY() );
         if ( contem ) {
             label.setText( "Você clicou DENTRO do triângulo" );
         } else {
             label.setText( "Você clicou FORA do triângulo" );
         }
         
     }
    

    }

    public static void main( String[] args ) {
    new Frame();
    }

}[/code]

[]´s

Os pontos do seu triângulo são definidos por vetores? Se sim, é possível tirar o produto vetorial formado pelos vetores de cada par de pontos da borda do triângulo, e verificar se o ponto em questão está no interior ou não do triângulo.

Procurei um site que explica a técnica e achei. Tem até a descrição de um algoritmo melhor:
http://www.blackpawn.com/texts/pointinpoly/default.html