Hola, me han dado un problema, como calcular la intersección de dos rectángulos?
La verdad que eh googleado y no me ha quedado del todo claro.
Alguien sabe como?, muchas gracias!!
intersección de rectangulos... primero imagen explicativa...
(http://i.imgur.com/enjMRQj.png)
en caso de estar paralelos al eje
lo primero que hay que hallar son los 2 vertices más extremos horizontales y verticales
horizontales: 1,3,7,8
verticales: 1,2,3,4
la interseccion en cada eje son los vertices que no pertenecen a los extremos
así que
horizotales: 2,4,5,6
verticales: 5,6,7,8
como estamos separandolos por eje entonces sabemos que (le daré nombre)
X2 = X4 -> XI
X5 = X6 -> XII
Y5 = Y7 -> YI
Y6 = Y8 -> YII
lo que nos resulta en 2 X y 2 Y para crear 4 coordenadas
(XI,YI) -> punto A en el grafico
(XI,YII) -> punto B en el grafico
(XII,YI) -> punto 5 en el grafico
(XII,YII) -> punto 6 en el grafico
y con esto ya tenemos todas las coordenadas de nuestro rectángulo intersección
espero se entienda! ::)
Muy Claro!!, Muchas Gracias!
Hola! tan solo una pequeña observación, lo que consultas puedes localizarlo como "colisiones". La misma puede calcularse tanto para objetos irregulares, esferas, o en su forma más simple, rectángulos; detectándose mediante la diferencia de sus extremos. Saludos.
(agrego) una pequeña referencia en el motor de búsqueda del foro, es referido a como "evitarlos" mas, puede serte útil para redondear el concepto...
http://foro.elhacker.net/buscador2-t426904.0.html;msg1986728#msg1986728
Claro, lo que pasa que no es propiamente una Colisión, yo tomo 4 valores por pantalla de 1 rectángulo (largo, alto, X , Y), y de otro rectángulo lo mismo.
Según las medidas que yo de y la ubicación, tendría que saber en que puntos se intersectan.
No se si me explico bien
eso se llama una colisión... una colisión es una intersección...
si explicas un poco más sobre tu tema, podríamos caer en detalle
me cito a mí mismo...
Cita de: Gh057 en 9 Abril 2015, 06:05 AM
detectándose mediante la diferencia de sus extremos.
mirando el gráfico propocionado por engel lex se puede entender perfectamente, detectas mediante diferencia que el punto 5 está
dentro del rango del vector 12, tu coordenada de corte es sobre X la misma que 2 (colisión por derecha, puede suceder que el punto 5 no corte, pero si lo haga el punto 7 por izquierda...) misma lógica para el eje Y y obtienes los puntos que te permiten armar tu rectángulo por proyección...
Por lo mismo indicaba lo de los tres puntos necesarios para formar el par de vectores. Espero haber sido más claro, sino por favor indícanos con más detalle el problema y podríamos ser más específicos... saludos!
Cita de: engel lex en 9 Abril 2015, 02:23 AM
intersección de rectangulos... primero imagen explicativa...
(http://i.imgur.com/enjMRQj.png)
en caso de estar paralelos al eje
lo primero que hay que hallar son los 2 vertices más extremos horizontales y verticales
horizontales: 1,3,7,8
verticales: 1,2,3,4
la interseccion en cada eje son los vertices que no pertenecen a los extremos
así que
horizotales: 2,4,5,6
verticales: 5,6,7,8
como estamos separandolos por eje entonces sabemos que (le daré nombre)
X2 = X4 -> XI
X5 = X6 -> XII
Y5 = Y7 -> YI
Y6 = Y8 -> YII
lo que nos resulta en 2 X y 2 Y para crear 4 coordenadas
(XI,YI) -> punto A en el grafico
(XI,YII) -> punto B en el grafico
(XII,YI) -> punto 5 en el grafico
(XII,YII) -> punto 6 en el grafico
y con esto ya tenemos todas las coordenadas de nuestro rectángulo intersección
espero se entienda! ::)
Entiendo todo lo que explicas y te lo agradezco porque se nota que esta persona también también estuvo en el mismo curso que estoy ahora. Mi problema es llevarlo al código, por favor me puedes indicar si me quedó bien escrito o esta perverso?... Gracias
// ¡Declara tu estructura rectangular aquí!
struct rectangle {
int x, y, width, height;
};
// ESCRIBE ESTA FUNCION
rectangle canonicalize(rectangle r) {
r.x=abs(r.x);
r.y=abs(r.y);
r.width=abs(r.width);
r.height=abs(r.height);
return r;
}
rectangle intersection(rectangle r1, rectangle r2) {
// ESCRIBE ESTA FUNCION
r1.x=(r1.x,r2.x);
r1.y= (r1.y,r2.y);
r1.width=(r1.width,r2.width);
r1.height=(r1.height,r2.height);
return r1;
}
Hola Soquita, probablemente no te has dado cuenta que el tema es de hace 4 años, con lo que no esperes una respuesta.
Abre un nuevo tema y se te atenderá.
Gracias y un saludo.