elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda ordenar ejes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda ordenar ejes  (Leído 2,289 veces)
majojimu

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda ordenar ejes
« en: 3 Julio 2013, 21:19 pm »

Hola.
Necesito ayuda para ordenar los vértices de un polígono convexo.
Tengo los siguientes vértices (x,y).
-9.75, 1.12.
-5.5, -0.5
-9.75, -1.12
-8, 1
-7.75, -1.4

Pues bien, lo que quiero es organizar dichos vértices para formar un polígono convexo.

Muchas gracias de antemano.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ayuda ordenar ejes
« Respuesta #1 en: 3 Julio 2013, 23:08 pm »

algo que le digo a todoslos nuevos practicamente...

1- escribe lo que quieres (ya lo hiciste)
2- muestra lo que tienes (coloca tu codigo, procura usar las etiquetas GeSHi de la edicion de textos del foro)
3- di donde te trancaste o que te causa problemas

estamos aqui para ayudarnos... no para hacer trabajos o tareas


En línea

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.
majojimu

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda ordenar ejes
« Respuesta #2 en: 4 Julio 2013, 09:21 am »

Hola.
Necesito ayuda para ordenar los vértices de un polígono convexo.
Tengo los siguientes vértices (x,y).
-9.75, 1.12.
-5.5, -0.5
-9.75, -1.12
-8, 1
-7.75, -1.4

Pues bien, lo que quiero es organizar dichos vértices para formar un polígono convexo.

Muchas gracias de antemano.

Tengo el siguiente código escrito, pero me falla el punto pivote, que cambia de valor en la funcion angleCmp. Los datos que se toman en Vect p, son los indicados arriba.

Código
  1. #include "OrdenGraham.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. angulo::angulo()
  7. {
  8.  
  9. };
  10. angulo::~angulo()
  11. {
  12.  
  13. };
  14.  
  15. float distsqr(const point &a, const point &b)
  16. {
  17. return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);
  18. };
  19.  
  20. float dist(const point &a, const point &b)
  21. {
  22. return sqrt(distsqr(a, b));
  23. };
  24.  
  25. float cross(const point &a, const point &b, const point &c){
  26. float d = (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
  27. if(fabs(d) < 1e-9) return 0.0;
  28. return d;
  29. };
  30.  
  31. bool angleCmp(const point &self, const point &that)
  32. {
  33.    //angulo a;
  34. float t = cross(an.pivote, that, self);
  35. if(t < 0.0) return true;
  36. if(t == 0)
  37. {
  38. return (distsqr(an.pivote, self) < distsqr(an.pivote, that));
  39. }
  40. return false;
  41. };
  42.  
  43.  
  44. Vect graham(Vect p)
  45. {
  46.     angulo an;
  47.     for(int i = 1; i < p.size(); ++i)
  48. {
  49. if(p[i].y < p[0].y || (p[i].y == p[0].y && p[i].x < p[0].x ))
  50. swap(p[0], p[i]);
  51. }
  52.  
  53.     an.pivote = p[0];
  54.  
  55. cout <<"orden"<<endl;
  56. for(int i = 0; i < p.size(); ++i)
  57. {
  58.             cout << p[i].x << "  " << p[i].y << endl;
  59.     }
  60.     return p;
  61. };
  62.  

Código
  1. #ifndef ORDEN_GRAHAM
  2. #define ORDEN_GRAHAM
  3.  
  4. #include <cmath>
  5. #include <iostream>
  6. #include <vector>
  7.  
  8. struct point
  9. {
  10. float x, y;
  11. point() {}
  12. point(float X, float Y): x(X), y(Y) {}
  13. };
  14.  
  15. typedef std::vector<point> Vect;
  16. float distsqr(const point &a, const point &b);
  17. float dist(const point &a, const point &b);
  18. float cross(const point &a, const point &b, const point &c);
  19. bool angleCmp(const point &self, const point &that);
  20. Vect graham(Vect p);
  21.  
  22.  
  23. class angulo
  24. {
  25.      public:
  26.             angulo();
  27.             ~angulo();
  28.             point pivote;
  29. };
  30.  
  31. #endif



Gracias
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda ordenar ejes
« Respuesta #3 en: 4 Julio 2013, 09:37 am »

Si es un polígono convexo se entiende que debería tener un centro de gravedad (CG)... es decir, un punto central que esté equidistante de todos sus vértices.

Con todo, para que sea convexo, se entiende que si la secuencia de vértices es V1, V2, V3, ..., entonces el ángulo CG^V1 es menor que CG^V2 y este a su vez menor que CG^V3... y así

Es como un reloj, el CG será el eje de las manecillas, si suponemos V0 las 12, V1 la 1, V2 las 2, etc...
CG^V0 = 0
CG^V1 = 360/12 = 30
CG^V2 = 360/6 = 60
CG^V3 = 90
...

Solo habría que ordenar esos ángulos y ya tendrías el orden de los vértices.

Bueno, técnicamente CG^V0 es un vector, lo que tienes que hacer es coger un primer vector como referencia y después calcular el ángulo del resto de vectores con respecto al de referencia.
« Última modificación: 4 Julio 2013, 09:39 am por eferion » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA ORDENAR LISTA SIMPLE[C]
Programación C/C++
HRSLASH 0 9,307 Último mensaje 23 Abril 2011, 04:22 am
por HRSLASH
ayuda para ordenar en c
Programación C/C++
marrison 9 3,511 Último mensaje 4 Septiembre 2012, 16:10 pm
por marrison
necesito ayuda para ordenar en c
Programación C/C++
marrison 3 2,180 Último mensaje 23 Diciembre 2012, 13:08 pm
por marrison
Robots y la gobernanza de la red, ejes del Día de Internet 2014
Noticias
wolfbcn 0 1,365 Último mensaje 8 Mayo 2014, 01:23 am
por wolfbcn
ayuda ordenar la catidad de letras repetidas en un string [C]
Programación C/C++
Xiray 1 2,316 Último mensaje 19 Marzo 2016, 18:37 pm
por bengy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines