[RESOLVIDO]Ponto de Intersecção entres duas Retas de coeficiente a1 e b1 e a2 e b2

Pessoal me ajudem a resolver isso,
preciso achar o ponto de intersecçao entre duas retas de coeficiente a1 e b1 e a2 e b2 respectivamente
fiz o código abaixo em alguns caso da certo mas em outros em vez de exibir o valor de X e Y ex: (4,3) exibe uma msg assim (infinity,infinity)

/* Imagine duas retas no plano cartesiano, onde seus coeficientes respectivos são a1 e b1, e 
a2 e b2. Faça um programa em Java para calcular quais as coordenadas do ponto de interseção 
entre as duas retas (mostre uma mensagem caso não haja intersecção).*/

//uma reta é formada por 2 pontos no plano
// um ponto é formado por cordenadas(x,y)
// formula geral da reta ax+by+c=0
//coeficiente angular > m = 
/*
* Autor: Janerson Douglas
* 
* Prof: Rafael Leal
*/


import java.util.*;

public class Exercicio25{
    public static void main(String[] args ) {
        Scanner input = new Scanner(System.in);
        // coletando dados para formar um reta
       double xa ,ya , xb,yb;  // Reta R composta pelo ponto A e B
       double xc ,yc , xd,yd;  // Reta S composta pelo ponto C e D
       double m,m1,x,y,y1,y2;
       
       // Lendo os Pontos A e B
        System.out.println("Cordenadas do Ponto A");
        System.out.print("Valor de X: ");
        xa = input.nextDouble();
        System.out.print("Valor de Y: ");
        ya = input.nextDouble();
        System.out.println("Cordenadas do Ponto B");
        System.out.print("Valor de X: ");
        xb = input.nextDouble();
        System.out.print("Valor de Y: ");
        yb = input.nextDouble();
                   
         // Lendo os Pontos C e D
        System.out.println("Cordenadas do Ponto C");
        System.out.print("Valor de X: ");
        xc = input.nextDouble();
        System.out.print("Valor de Y: ");
        yc = input.nextDouble();
        System.out.println("Cordenadas do Ponto D");
        System.out.print("Valor de X: ");
        xd = input.nextDouble();
        System.out.print("Valor de Y: ");
        yd = input.nextDouble();
        
        // CALCULANDO O COEFICIENTE ANGULAR DA RETA R QUE PASSA PELOS PONTOS A E B
        // m = (yb-ya)/(xb-xa)
        // calculo da reta que passa por dois pontos y-y1=m(x-x1)
        m = (yb-ya)/(xb-xa); 
        // y1=(m*(x))-(m*(xa))+ya;       
         // CALCULANDO O COEFICIENTE ANGULAR DA RETA R QUE PASSA PELOS PONTOS C E D
        // m1 = (yd-yc)/(xd-xc)
        m1 = (yd-yc)/(xd-xc);
        // y2=(m1*(x))-(m1*(xc))+yc; 
        x = ((m*(xa))+ya + (m*(xa))-ya)/((yd*yb)+yd)*-1;
        y = (m1*(x)-(m1*(xc))+yc);
       if(m==m1 || m<0 || m1<0){
           System.out.println("Não existe ponto de intersecção");
       }else{
           System.out.println("Ponto de intersecção: ("+x+" , "+y+")");
       }
    }
}
1 curtida

posta o erro junto com a stacktrace

Olá amigo o erro não está na execução e sim nos cálculos
o erro a que me refiro é que fazendo o teste de mesa e usando o aplicativo geogebra eu chego a um valor x e y
mas no algoritmo que fiz no java não encontra esse valor…e as vezes aparece (inifinty , - infinity) em vez de aparecer por exemplo (3,4) referente aos valores de x e y

Olá, desculpe a minha ignorância, mas o que seria stacktrace?

http://www.inf.pucrs.br/~pinho/CG/Aulas/OpenGL/Interseccao/CalcIntersec.html

Vlw ViniGodoy !!! :lol:

já tinha visto sobre o uso do intersectline…mas eu estava procurando algo mais simples
e com a ajuda do meu Professor cheguei a isso…

/* Imagine duas retas no plano cartesiano, onde seus coeficientes respectivos são a1 e b1, e 
a2 e b2. Faça um programa em Java para calcular quais as coordenadas do ponto de interseção 
entre as duas retas (mostre uma mensagem caso não haja interse¬ção).*/

//uma reta é formada por 2 pontos no plano
// um ponto é formado por cordenadas(x,y)
// formula geral da reta ax+by+c=0
//coeficiente angular &gt; m = 
/*
* Autor: Janerson Douglas
* 
* Prof: Rafael Leal
*/


import java.util.*;

public class Exercicio25{
    public static void main(String[] args ) {
        Scanner input = new Scanner(System.in);
        // coletando dados para formar um reta
       double a1,b1,a2,b2,x,y;  // 
     
       
       // Lendo os Coeficientes a1 e b1
        System.out.println(&quot;Coeficiente da 1° reta&quot;);
        System.out.print(&quot;Valor de a: &quot;);
        a1 = input.nextDouble();
        System.out.print(&quot;Valor de b: &quot;);
        b1 = input.nextDouble();
        System.out.println(&quot;CCoeficiente da 2° reta&quot;);
        System.out.print(&quot;Valor de a: &quot;);
        a2 = input.nextDouble();
        System.out.print(&quot;Valor de b: &quot;);
        b2 = input.nextDouble();
        /*
         Temos duas retas com as equações:
y = a1 * x + b1 
y = a2 * x + b2

Como queremos verificar a intersecção, fazemos y(reta1) = y(reta2) onde teremos:
a1 * x + b1 = a2 * x + b2 
Isolando o valor de x temos:

 x = ( b2 - b1 ) / (a1 - a2)

Se a1 == a2 teremos um erro (divisão por zero), o que indica que as retas são paralelas (não têm intersecção).

Utilizaremos o valor de x em alguma das equações acima:
y = a1 * x + b1
*/
        x= (b2-b1)/(a2-a1);
        y= a1*x+b1;
       if(a1==a2){
           System.out.println(&quot;Não existe ponto de intersecção&quot;);
       }else{
           System.out.println(&quot;Ponto de intersecção: (&quot;+x+&quot; , &quot;+y+&quot;)&quot;);
       }
    }
}
1 curtida

Ok, você mudou o formato de entrada. Ao invés de fornecer os pontos, está fornecendo agora no formato y = mx + b

Assim fica bem mais fácil mesmo. :slight_smile:

[quote=ViniGodoy]Ok, você mudou o formato de entrada. Ao invés de fornecer os pontos, está fornecendo agora no formato y = mx + b

Assim fica bem mais fácil mesmo. :)[/quote]
Isto correto
não me atentei ao enunciado do exercício onde era preciso ler apenas os coeficientes a1 ,b1 e a2 ,b2
não tinha a necessidade de ler as coordenadas dos pontos que formam a reta…
falta de atenção essa minha hehehehhe :smiley:

Um detalhe que pode ser melhorado:

x= (b2-b1)/(a2-a1); y= a1*x+b1; if(a1==a2){ System.out.println("Não existe ponto de intersecção");
Você primeiro faz a conta e depois verifica se existe a situação excepcional (divisão por zero). É mais correto checar primeiro as condições necessárias para que a solução exista (no caso, as retas terem coeficientes angulares diferentes) e só depois fazer o cálculo.
Inclusive dependendo da situação isso pode estourar uma exceção (por exemplo se estiver trabalhando com inteiros a tentativa de dividir por zero dá uma ArithmeticException).

[quote=gomesrod]Um detalhe que pode ser melhorado:

x= (b2-b1)/(a2-a1); y= a1*x+b1; if(a1==a2){ System.out.println("Não existe ponto de intersecção");
Você primeiro faz a conta e depois verifica se existe a situação excepcional (divisão por zero). É mais correto checar primeiro as condições necessárias para que a solução exista (no caso, as retas terem coeficientes angulares diferentes) e só depois fazer o cálculo.
Inclusive dependendo da situação isso pode estourar uma exceção (por exemplo se estiver trabalhando com inteiros a tentativa de dividir por zero dá uma ArithmeticException).[/quote]

como eu poderia fazer isso? sou iniciante no java

É só colocar as contas no else.

Ok !!! ja testei aqui e rodou beleza vlw!!!