Distancia entre 2 objetos de una matriz

Kaoticbcn
Primera duda de distancias resuelta

El 2º problema que tengo, es que recorro una matriz empezando desde un punto aleatorio, tengo que hacer un bucle que recorra todo esa matriz, ya he simulado mediante un while, lo que serían los 2 "fors" para recorrer la matriz, así, cogiendo el valor anterior como último recorro toda la matriz.

El problema está que para optimizarlo, miro una cosa (que no influye para el problema) para no tener que mirar 1 por 1 todas las posiciones de la matriz, eso implica, que si tenemos una matriz de 10x10 y empezamos a mirar en el punto (5,5) el anterior será el (4,5). Pero como tengo hecho el algoritmo es posible que solo mire los puntos (6,8), (7,6) y (1,4). Con lo cual, nunca llegaría a mirar el punto (4,5) para comprobar que ya hemos recorrido toda la matriz.

Como lo tengo ahora mismo: Como ayer tuve que presentar que funcionase, hice una chapucilla y cree una colección que me iba guardando estos puntos, con lo cual, cuando se repetía 1 punto, significaba que ya había recorrido toda la matriz.

Mientras escribía esto, se me ha ocurrido que no puedo mirar que el punto que estamos mirando sea > que el inicial, ya que nada mas empezar, ya será superior y aún no ha dado la vuelta, pero lo que puedo hacer para solucionar esto, es guardarme siempre el punto anterior, y compararlo con el actual. Una vez el actual sea mas pequeño que el anterior, significará que hemos dado la vuelta, con lo cual, la próxima vez que la posición actual sea mayor que la de origen, significará que ya hemos dado la vuelta entera. No creo que se optimice mucho respecto al anterior pero bueno, alguna idea?

kraneok

#1 ¿ Como lo haces ahora mismo ?

Kaoticbcn

a ver, tengo 2 formas, una es especifica para el problema que tengo que es marca las distancias que tiene alrededor como que no se puede poner un objeto del mismo tipo, pero claro, si la distancia es muy grande tarda mucho en asignar eso.

Así que la otra opción es mirar todo el perímetro de capa objeto y calcular la distancia punto por punto. Pero esto consume mas que lo otro incluso por que tengo que mirar que desde 1 punto del perímetro del objeto A, distancia entre el resto de puntos del perímetro de B (esto se puede optimizar mirando que si el sig punto está mas lejos que el anterior, dejar de mirar su perímetro).

Y la última forma que es la que estaba intentado ahora en papel, era coger los valores de las esquinas opuestas y sacar algún algoritmo para mirar distancias, pero no me sale :/ Quiero cambiar el primer método por que estoy cambiando valores a una matriz, en cambio el que intento buscar sería operaciones básicas que de forma directa.

Kaoticbcn

Ole, fui a tomar algo con los amigos y cuando volví me vino la inspiración y lo saque de una forma super básica y super optimizada, dudo mucho que exista algo mejor.

Se trata de coger las X y la Y por separado y calcular su diferencia, cogemos la suma de las diferencias positivas y obtenemos la distancia, tan sencillo como eso. Pongo el código por si a alguien le interesa:

codigo

P.D: Ya que estamos, alguna empresa necesita personal para optimizar algoritmos? :P
P.D.2: Por si alguien se interesa, voy a poner otro algoritmo que me tengo que sacar de la manga en #1

1

Usuarios habituales

  • Kaoticbcn
  • kraneok