Ajuda: Lógica para testar se um triângulo contém um ponto
6 respostas
G
GuilhermeAmorim
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?
G
GuilhermeAmorim
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.
M
marcobiscaro2112
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 pontosSystem.out.println(newPolygon(newint[]{0,10,15},newint[]{0,10,5},3).contains(5,5));// imprime true
davidbuzatto
Vc pode fazer como o marco disse, ou também usando a classe Path2D do pacote java.awt.geom (a partir do Java 6)
/** * * @author David Buzatto */publicclassFrameextendsJFrame{privatePainelTriangulop;privateJLabellabel;publicFrame(){p=newPainelTriangulo();label=newJLabel("Clique no painel...");add(p,BorderLayout.CENTER);add(label,BorderLayout.SOUTH);p.setCursor(newCursor(Cursor.CROSSHAIR_CURSOR));p.addMouseListener(newPainelMouseListener());setSize(300,300);setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);}privateclassPainelMouseListenerextendsMouseAdapter{@OverridepublicvoidmouseClicked(MouseEvente){booleancontem=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");}}}publicstaticvoidmain(String[]args){newFrame();}}
[]´s
ViniGodoy
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.