Como vas a determinar quien ganaGana el primero que implemente un algoritmo que funcione correctamente. Se puede imponer cualquier otro criterio, pero todo depende de cuanta gente participe(por el momento solo tu).
Creo que seria mejor enviar por PMNo creo que nadie tenga ningún motivo para hacer trampas. Quiero decir, el objetivo del concurso es que la gente se entretenga un poco desarrollando el algoritmo, no ganar la postal de felicitación...Si los concursantes ADJUNTAN la solución en el propio hilo otras personas que no quieran participar pueden consultar los algoritmos.
Sí, por favor, publicad los algoritmos a la vista de todos.Ok. Las posibles soluciones serán enviadas en un archivo adjunto con el formato del main.c original.
Se me ha metido la mosca en la oreja y me pasé toda la noche dándole vueltas...Para mi resulto interesante porque es muy fácil determinar que puntos están dentro del polígono echando un simple vistazo. Pero aun siendo tan evidente que puntos están dentro o fuera, uno no sabe nada sobre que ha echo el cerebro para saberlo. Cuando intentas implementar el algoritmo te das cuenta de que es mas complejo de lo que parecía...
Sería bueno que jgpeiro publicara el algoritmo que él usó para resolverlo. ¿Qué tal si se lo dejaron de tarea y no lo ha hecho?Bueno, lo cierto es que no tengo la solución en mano. Me plantearon este reto hace 3 años y estuve unas semanas escribiendo programas hasta que la encontré, pero tengo que reconocer que no se donde estará el código. De todas maneras creo que podría volverlo a implementar.
Sería bueno que jgpeiro publicara el algoritmo que él usó para resolverlo. ¿Qué tal si se lo dejaron de tarea y no lo ha hecho? :D
Gana el primero que implemente un algoritmo que funcione correctamente. Se puede imponer cualquier otro criterio, pero todo depende de cuanta gente participe(por el momento solo tu).
otras personas que no quieran participar pueden consultar los algoritmos.
staría bueno proponer por ahí un problema en el que sea un poco más fácil y posible usar la lógica y no solo la matemática...Creo que solo se puede usar la lógica para resolver un algoritmo así. Una vez uno tiene una solución planteada que cree que es correcta, usa la programación ("lógica+matemática") para implementarlo.
Aunque supongo que has implementado un algoritmo que ya conocías, la solución es correcta.
Ya te he enviado la postal a las 2 direcciones que aparecen en tu perfil de todopic. Disfrutalas...
Citarstaría bueno proponer por ahí un problema en el que sea un poco más fácil y posible usar la lógica y no solo la matemática...Creo que solo se puede usar la lógica para resolver un algoritmo así. Una vez uno tiene una solución planteada que cree que es correcta, usa la programación ("lógica+matemática") para implementarlo.
Si uno(no se si es tu caso) encuentra una descripción detallada del algoritmo puede implementarlo en C sin comprender realmente su funcionamiento, pero te aseguro que la persona que lo invento lo hizo usando la lógica.
o se vale, ustedes ya hasta programan en 3D y nosotros apenas si podemos encender leds.
Ahora que ya hay ganador, os dejo unos interesantes links que encontré sobre la resolución del problema:
- Estrategias de resolución (http://tog.acm.org/editors/erich/ptinpoly/)
- Distintos algoritmos en C (http://www.visibone.com/inpoly/)
/***************************************************************************
* *
* INPOLY.C *
* *
* Copyright (c) 1995-1996 Galacticomm, Inc. Freeware source code. *
* *
* Please feel free to use this source code for any purpose, commercial *
* or otherwise, as long as you don't restrict anyone else's use of *
* this source code. Please give credit where credit is due. *
* *
* Point-in-polygon algorithm, created especially for World-Wide Web *
* servers to process image maps with mouse-clickable regions. *
* *
* http://www.visibone.com/inpoly/inpoly.c *
* *
* 6/19/95 - Bob Stein & Craig Yap *
* stein@visibone.com *
* craig@cse.fau.edu *
* *
***************************************************************************/
int /* 1=inside, 0=outside */
inpoly( /* is target point inside a 2D polygon? */
unsigned int poly[][2], /* polygon points, [0]=x, [1]=y */
int npoints, /* number of points in polygon */
unsigned int xt, /* x (horizontal) of target point */
unsigned int yt) /* y (vertical) of target point */
{
unsigned int xnew,ynew;
unsigned int xold,yold;
unsigned int x1,y1;
unsigned int x2,y2;
int i;
int inside=0;
if (npoints < 3) {
return(0);
}
xold=poly[npoints-1][0];
yold=poly[npoints-1][1];
for (i=0 ; i < npoints ; i++) {
xnew=poly[i][0];
ynew=poly[i][1];
if (xnew > xold) {
x1=xold;
x2=xnew;
y1=yold;
y2=ynew;
}
else {
x1=xnew;
x2=xold;
y1=ynew;
y2=yold;
}
if ((xnew < xt) == (xt <= xold) /* edge "open" at left end */
&& ((long)yt-(long)y1)*(long)(x2-x1)
< ((long)y2-(long)y1)*(long)(xt-x1)) {
inside=!inside;
}
xold=xnew;
yold=ynew;
}
return(inside);
}
if ((xnew < xt) == (xt <= xold) /* edge "open" at left end */
.
.
.
Código: [Seleccionar]if ((xnew < xt) == (xt <= xold) /* edge "open" at left end */No me queda muy claro que pregunta ahi.
.
.
.
En este apartado (Lenguaje C para PICs) deberia haber un concurso de programacion pic, ya que lo anterior aplicado es matematicas, sin embargo de C hay poca cosa, es decir, si alguien sabe las formulas es facil transformarlo a C, pero algo que haya que comerse la cabeza programandolo es distinto a saber matematicas xD.
A ver si haceis uno asi, pero que no sea nada del otro mundo, por ejemplo que un pic haga una cosa, con otra cosa, y con otra cosa... Nose un juego de logica, usando interrupciones, timers... Y el ganador sera el que mas optimice el codigo, ya que hay veces que 200 lineas se pueden transformar en 50 mas eficientes xD
no no, yo queria que lo hiciese alguien para apuntarme yo :D