Achar intersecção de duas retas

3 respostas
E

Olá pessoal,

Alguém conhece uma classe ou método que retorna uma classe Point,
contendo a interseção de duas retas ?

public Point getIntersec
( Point reta1_inic, Point reta1_fim, Point reta2_inic, Point reta2_fim)

Obrigado,
Evandro :oops:

3 Respostas

J

Olá,

Não sei se existe na api do java… mas isto não é difícil fazer… é algo mais ou menos assim:

class Ponto {
	public double x;
	public double y;
	
	public Ponto(double x, double y) {
		this.x = x;
		this.y = y;
	}
	
	public Ponto(Ponto p) {
		this.x = p.x;
		this.y = p.y;
	}
	
	public Ponto() {
	}

}


	public static Ponto getInterseccao(Ponto r1I, Ponto r1F, Ponto r2I, Ponto r2F) {
		Ponto r = new Ponto();
		
		// http://astronomy.swin.edu.au/~pbourke/geometry/lineline2d/
		// 1 = r1I
		// 2 = r1F
		// 3 = r2I
		// 4 = r2F
		// Numerador
		double na = (((r2F.x - r2I.x) * (r1I.y - r2I.y)) - ((r2F.y - r2I.y) * (r1I.x - r2I.x)));
		double nb = (((r1F.x - r1I.x) * (r1I.y - r2I.y)) - ((r1F.y - r1I.y) * (r1I.x - r2I.x)));
		// Denominador
		double da = (((r2F.y - r2I.y) * (r1F.x - r1I.x)) - ((r2F.x - r2I.x) * (r1F.y - r1I.y)));
		double db = (((r2F.y - r2I.y) * (r1F.x - r1I.x)) - ((r2F.x - r2I.x) * (r1F.y - r1I.y)));
		
		double ua = na / da;
		double ub = nb / db;

		// Se elas são paralelas ou coincidentes
		if (da == 0 && db == 0) {
			if (na == 0 && nb == 0) {
				// Coincidentes
				return null;
			}
			// Paralelas
			return null;
		}

		r.x = r1I.x + ua * (r1F.x - r1I.x);
		r.y = r1I.y + ub * (r1F.y - r1I.y);
		
		return r;
	}

Espero ter ajudado…
Abraços…

E

Valeu mesmo, obrigado.

3

Tem um pequeno erro no código que pode ser concertado com:
pontoInterseccao.x = p1.x + ua * (p2.x - p1.x);
pontoInterseccao.y = p1.y + ua * (p2.y - p1.y);// <----

Criado 30 de junho de 2005
Ultima resposta 27 de out. de 2011
Respostas 3
Participantes 3