Programación General => C/C++ => Mensaje iniciado por: Faustox en Martes 19 de Julio de 2005, 17:18
Título: Ayuda Con Quick Hull
Publicado por: Faustox en Martes 19 de Julio de 2005, 17:18
Estoy tratando de trazar la envolvente convexa de una nube de puntos que se seleccionan haciendo click con el mouse en la pantalla. Para resumir quiero guardar las coordenadas de puntos donde se hace click con el mouse y eso va bien, necesito comparar los puntos buscando los puntos extremos es decir el que esta mas a la izquierda, más a la derecha, más arriba y más abajo y apartir de ellos trazar lineas que los unan. Luego de eso me imagino que debo de usar el criterio de la izquierda; pero no paso de lo de los puntos extremos por que me resultan "otras cosas" He aqui el codigo, ya se que a nadie le gusta detenerce a estar revisando codigo pero creo que es mejor asi.
#define ENTER 13 #define DIM 2 #define PMAX 100 #define ESC 27
void inicio (void);
/* MAIN */
void main (void) { int i,n; int P[PMAX][DIM]; /*este array me guardará los puntos*/ int izq[1][1],der[1][1],sup[1][1],inf[1][1]; /* cada uno de estos un punt extremo*/ n=0; i=0;
inicio(); cleardevice(); mtest(); mver();
inf[0][1]=P[0][1];
der[0][0]=P[0][0];
izq[0][0]=P[0][0];
sup[0][1]=P[0][1];
while((mclick()!=2) && (i <= PMAX)){ if (mclick() == 1) { mocultar(); circle(mxpos(1)+1,mypos (1)+1,2); P[0] = mxpos(1); P[1] = mypos(1);
Título: Re: Ayuda Con Quick Hull
Publicado por: rir3760 en Martes 19 de Julio de 2005, 17:58
Código: Text
void main (void)
Tomando en consideracion que no indicas el compilador y plataforma que utilizas seria mejor la definicion int main(void) o int main(), no hace daño, es mas portable y evita modificar el codigo cuando este se compila en compiladores en el modo mas estricto posible.
Código: Text
int izq[1][1],der[1][1],sup[1][1],inf[1][1];
Aqui defines cuatro arrays cuyo unico elemento es array[0][0], seria mejor que utilizaras la instruccion typedef en esta forma:
Código: Text
typedef struct punto {
int x;
int y;
} Punto;
/* mas codigo ... */
Punto izq, der, sup, inf;
Código: Text
inicio();
cleardevice();
mtest();
mver();
Y en esta parte llamas a un bloque de funciones pero la operacion de estas no tiene impacto en la funcion main ya que: 1) No defines variables globales que las funciones puedan modificar y 2) No les pasas argumentos que pudieran modificar.
Código: Text
inf[0][1] = P[0][1];
der[0][0] = P[0][0];
izq[0][0] = P[0][0];
sup[0][1] = P[0][1];
En este bloque modificas el valor de los arrays inf, der, etc. en base al valor de los elementos del array P pero: 1) El valor de los elementos del array P no esta definido, en buen cristiano esto elementos pueden tener cualquier valor y 2) En C los indices de los arrays inician en 0: inf[0][1] y sup[0][1] no son indices validos.
Un saludo
Título: Re: Ayuda Con Quick Hull
Publicado por: Faustox en Miércoles 20 de Julio de 2005, 01:18