Calculo Intersección de rectangulos

Iniciado por guillehampp, 9 Abril 2015, 01:15 AM

0 Miembros y 3 Visitantes están viendo este tema.

guillehampp

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!!

engel lex

intersección de rectangulos... primero imagen explicativa...



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!  ::)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

guillehampp


Gh057

#3
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
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

guillehampp

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

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Gh057

#6
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!  
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

Soquita

Cita de: engel lex en  9 Abril 2015, 02:23 AM
intersección de rectangulos... primero imagen explicativa...



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;
}

r32

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.