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?
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 > 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("Coeficiente da 1° reta");
System.out.print("Valor de a: ");
a1 = input.nextDouble();
System.out.print("Valor de b: ");
b1 = input.nextDouble();
System.out.println("CCoeficiente da 2° reta");
System.out.print("Valor de a: ");
a2 = input.nextDouble();
System.out.print("Valor de b: ");
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("Não existe ponto de intersecção");
}else{
System.out.println("Ponto de intersecção: ("+x+" , "+y+")");
}
}
}
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.
[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
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!!!