[..Software IDG..] Colisiones e intersecciones entre rectas y segmentos

30
[..Software IDG..] Colisiones e intersecciones entre rectas y segmentos http://ingenieria-dragogear.blogspot.mx/

Transcript of [..Software IDG..] Colisiones e intersecciones entre rectas y segmentos

[ . .Software IDG..]

Colisiones e intersecciones entre rectas y segmentoshttp://ingenieria-dragogear.blogspot.mx/

Introducción

En esté documento se explicara como calcular si existen colisiones entre rectas y/o segmentos para luego aplicarlo a un lenguaje de programación. Se aclara que los fundamentos expuestos aquí se pueden usar en cualquier lenguaje de programación pero “mi lenguaje favorito es python” así que cuando se llegue a la sección de programación será desarrollado en base a código python.

Conceptos

Recta: Las definiciones que se encuentran en libros y en la internet nos dice; Es una sucesión de puntos infinitos acomodados en la misma dirección, para mi es una linea muy larga es decir infinita.

Segmento: Es un pedazo de una recta, esta se puede definirse ubicando dos puntos que pasen por la recta. Los puntos son una condición que le ponemos a la recta para obtener un segmento.

Creando una recta

En geometría analítica existen ecuaciones matemáticas que al ser graficadas(dibujadas) describen una figura geométrica, en nuestro caso solo nos interesa la recta. Para graficar una de estas ecuaciones se le da cualquier valor a una variable, por lo regular “X” y se resuelven las operaciones matemáticas descritas en la ecuación y se obtiene el valor de otra variable “Y”. Un ejemplo para que se entienda.

La ecuación de esta recta es Y=1+1X:

Si a “X” le damos un valor por ejemplo 5 entonces “Y” será 6 y si le damos cualquier otro valor a “X” entonces “Y ” será un valor que en conjunto con “X” nos dará un punto (X,Y) que se ubicará en algún lugar de la recta.

Por ejemplo X=4:Y = 1+1*4Y = 1+4Y = 5

Ahora aremos lo inverso, obtener una recta partiendo de dos puntos. Lo primero que hay que saber es que las rectas en genera se basan en la misma ecuación que vimos anterior mente. Esta ecuación es;

Y= b+mX.

Donde:

Y = Ubicación del punto en el eje de las ordenadas (Altura).

X = Ubicación del punto en el eje de las abscisas (Lugar en la ralla horizontal con números).

b = Indica la altura por la cual la recta toca al eje de las ordenas

(eje Y), también llamada intersección en “Y”.

m = Indica la inclinación de la recta, también llamada pendiente .

Para obtener la “b” y la pendiente “m” se deben elegir primero dos puntos los cuales definiran nuestra recta, por ejemplo los puntos C(1,5) y D(7,1).

Ahora debemos obtener la pendiente “m” con la formula:

Esto sería:

Una vez obtenida la pendiente de esta recta y la de la otra ya se puede saber si existe intersección entre ambas rectas. Para esto solo se comparan las pendientes de ambas rectas. Si son iguales no hay intersección, si son distintas entonces si hay intersección.

Ahora obtendremos la intersección en “Y”, es decir obtendremos “b”, con cualquiera de las formulas siguientes:

Los que saben un poco de álgebra se darán cuenta de que las formulas solo son la ecuación de la recta pero esta vez “b” esta despejada.

Vamos a resolver los dos casos con los puntos C y D

Para el punto C(1,5); Para el punto D(7,1)

Muy bien ahora para terminar de construir nuestra recta, solo hay que poner los valores de “m” y “b”. m = 0.666666b = 5.666666

Creando un segmento

Existen dos formas de construir segmentos, una es formulando una ecuación nueva que no dibuja puntos fuera de los que en un principio hemos propuesto para definir el segmento, y otra donde nosotros condicionamos una recta para formar un segmento. En esta ocasión utilizaremos el segundo método.

Sin darnos cuenta ya hemos definido nuestros segmentos. En la primera recta que vimos nuestro segmento es el que se encuentra entre los dos puntos, y en la segunda recta nuestro segmento se dio al colocar los dos puntos que utilizamos para construir la recta.

Nuestro segmentos esta definidos por condiciones, las condiciones son los puntos que nos indican los limites de nuestro segmento.

Nota: En un próximo [..Software IDG..] veremos otro método de colisión de segmentos.

Ahora ya tenemos nuestra rectas y las ecuaciones, sólo nos falta saber el punto de intercepción de las rectas. De esta forma con un método de comparación sabremos si los segmentos se tocan o no. Para esto utilizaremos formulas que fueron sacadas por el método de resolución de ecuaciones por matrices. Esta formulas fueron reducidas y adaptadas especialmente para este método de interceptación de segmentos.

Comprobando intersección

Ejemplo tomemos los valores que sacamos de ambas rectas.

Recta 1:M1 = 1B1 = 1

Recta 2:M2 = -0.66666B2 = 5.66666

Una vez que ya tenemos “Xr” y “Yr” solo es cuestión de hacer las comparaciones necesarias.

“Xr” debe ser menor que las x's de mayor valor de cada punto de ambas rectas.Xr<5.0 y Xr<7.0

Y “Xr” debe ser mayor que las x's de menor valor de cada punto de ambas rectas.Xr>1.0 y Xr>1.0

“Yr” debe ser menor que las y's de mayor valor de cada punto de ambas rectas.Yr<5.0 y Yr<6.0

Y “Yr” debe ser mayor que las y's de menor valor de cada punto de ambas rectas.Yr>2.0 y Yr>1.0

2.8<5.0 y 2.8<7.0 y 2.8>1.0 y 2.8>1.03.8<5.0 y 3.8<6.0 y 3.8>2.0 y 3.8>1.0

¿Qué pasa cuando una recta es vertical?

Cuando una recta es vertical significa que su pendiente es infinita o no existe, que es básicamente lo mismo.En este caso los cálculos son mas sencillos, el objetivo es encontrar a “Xr” y ”Yr” el punto de intersección entre ambas rectas para luego compara el punto, como se hizo anteriormente.Las formulas que se utilizan en estos caso son:

Ejemplo:Primero debemos sacar la pendiente “m” y la “b” de la recta que esta inclinada.m = -0.6666b = 5.6666

Para los que les gusta deducir y el ver el ¿por qué? de todo, estas formulas y métodos para calcular intersección entre un recta inclinada y una vertical, fueron sacadas con el teorema de Pitágoras , pues si lo notan sólo estamos calculando la proporción de un triangulo.

Como ven hemos obtenido el punto de intersección necesario para realizar las comparaciones y comprobar la existencia de una intersección o colisión entre rectas. Lo ultimo que restas es aplicar todos estos cálculos en nuestro lenguaje de programación favorito.

La programación

El lenguaje de programación en el que esta escrito el siguiente código es python.

El código, el progrma y algunos extras pueden ser descargados desde mi blog.

http://ingenieria-dragogear.blogspot.mx/

De la linea 1 hasta la 16 es código de importaciones y algunas variables.En la linea 18 y 19 se crean dos listas con las coordenadas de nuestras rectas.

Aquí definimos la función para comprobar la colisión entre segmentos.Las variables X1, Y1, X2, Y2 son para encontrar la intersección en “Y” de cada recta.Las listas Xn y Yn son para la comparación del punto de intersección.

Aquí intentamos(try) calcular las pendientes, si nos da un error de división en cero hacemos que M1 o M2 sean igual a la cadena(palabra) INFINITO .

En esta parte asemos comparaciones:Si las pendientes son iguales no existe colisión entre las rectas y la función nos devuelve un falso. Si M1 es infinito es decir, si nuestra recta 1 es vertical hace los cálculos correspondientes para la recta inclinada.

Nota: “float()” convierte a un numero entero en uno flotante. Ejemplo; al numero 3 lo combinarte en 3.0. La función solo agrega un “.0” al número.

En esta ultima sección de la función se hacen los cálculos si ambas pendientes fueron diferentes de “INFINITO”.

Luego se hacen las comparaciones de X0 y Y0 para saber si el punto sen encuentra dentro de nuestras rectas, Si es así entonces la función devuelve “Verdadero”, de lo contrario devuelve “Falso”.

Por último se crea un ciclo while para correr nuestro programa y visualizar lo que ocurres.

Capturas de pantalla.Pruebas de la función de colisión.

Autor: Jośe Iván González Torreshttp://ingenieria-dragogear.blogspot.mx/