Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

98
Visualizações
Detectar interceptación con línea

¿Cómo puedo hacer un algoritmo que detecte si un punto (x, y) se intercepta con una línea? (x1, y1, x2, y2)?

Ya he probado:

 boolean onLine(float a, float b, float c, float d, float x, float y){ boolean answer = false; float[] p1 = new float[] {a, b}; float[] p2 = new float[] {c, d}; float x_spacing = (p2[0] - p1[0]) / ((a+c)/2 + (b+d)); float y_spacing = (p2[1] - p1[1]) / ((a+c)/2 + (b+d)); List<float[]> line = new ArrayList(); float currentX = 0; float currentY = 0; while(currentX+a<c&&currentY+b<d){ currentX += x_spacing; currentY += y_spacing; line.add(new float[]{a+currentX, b+currentY}); } for(int j = 0; j < line.size(); j++){ if(x > line.get(j)[0]-x_spacing && x < line.get(j)[0]+x_spacing && y > line.get(j)[1]- y_spacing && y < line.get(j)[1]+y_spacing){ answer = true; println("Hit line!"); break; } } return answer;

}

Esto funciona a veces, pero no siempre es consistente.

Estoy poniendo esto con un juego de física, y lo necesito para que la pelota pueda rodar por una línea.

¿Cuáles son algunas formas en que puedo mejorarlo para que funcione?

EDITAR: Gracias a Felix Castor lo hice funcionar. Aquí está el código final:

 boolean onLine(float x1, float y1, float x2, float y2, float xt, float yt, float wid, float hit){ float Y = (y2 - y1)/(x2 - x1)* xt + y1 -(y2 - y1)/(x2 - x1) * x1; boolean answer = false; if(abs(Y - yt) < 5) answer = true; if(abs(Y - yt-hit) < 5) answer = true; if(abs(Y - yt-(hit/2)) < 5) answer = true; if(abs(Y - yt+hit) < 5) answer = true; if(abs(Y - yt+(hit/2)) < 5) answer = true; return answer;

}

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Usando el formulario de intercepción de la pendiente, puede conectar su x y ver si las y son iguales.

y = m*x + b

m = (y2 - y1)/(x2 - x1)

b = y1 - (y2 - y1)/(x2 - x1) * x1

Entonces la ecuación se convierte en

Y = (y2 - y1)/(x2 - x1)* X + y1 -(y2 - y1)/(x2 - x1) * x1

dado un punto (xt, yt) puede conectar xt a X y evaluar y luego comparar el resultado con yt. Si son iguales, entonces el punto está en la línea.

si Y == yt dada xt entonces el punto está en la línea.

Deberá manejar el caso en el que tiene líneas estrictamente horizontales como casos de borde. Esos harán explotar la ecuación.

Editar: condiciones cambiadas

Como desea determinar qué tan lejos de la línea está un punto, diría que la fórmula para la distancia entre un punto y una línea en el espacio cartesiano sería el camino a seguir. Consulte la sección Distancia de un punto a una línea Línea definida por dos puntos . La fórmula se ve fea pero es sencilla.

ingrese la descripción de la imagen aquí

 double numerator = Math.abs((y2 - y1) * xt - (x2 - x1) * yt + x2 * y1 - y2 * x1); double denominator = Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2)); double distance = numerator / denominator;

Como antes, su punto de prueba es (xt, yt) y su línea está definida por dos puntos (x1, y1) y (x2, y2). Debido a que la distancia siempre es> = 0, su prueba sería:

 if( distance <= tolerance) return true

Creo que este es un mejor enfoque si está interesado en una tolerancia.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda