Autor
|
Tema: Ayuda ordenar ejes (Leído 2,289 veces)
|
majojimu
Desconectado
Mensajes: 6
|
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
|
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
Mensajes: 6
|
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. #include "OrdenGraham.h" #include <iostream> using namespace std; angulo::angulo() { }; angulo::~angulo() { }; float distsqr(const point &a, const point &b) { return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y); }; float dist(const point &a, const point &b) { return sqrt(distsqr(a, b)); }; float cross(const point &a, const point &b, const point &c){ float d = (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x); if(fabs(d) < 1e-9) return 0.0; return d; }; bool angleCmp(const point &self, const point &that) { //angulo a; float t = cross(an.pivote, that, self); if(t < 0.0) return true; if(t == 0) { return (distsqr(an.pivote, self) < distsqr(an.pivote, that)); } return false; }; Vect graham(Vect p) { angulo an; for(int i = 1; i < p.size(); ++i) { if(p[i].y < p[0].y || (p[i].y == p[0].y && p[i].x < p[0].x )) swap(p[0], p[i]); } an.pivote = p[0]; cout <<"orden"<<endl; for(int i = 0; i < p.size(); ++i) { cout << p[i].x << " " << p[i].y << endl; } return p; };
#ifndef ORDEN_GRAHAM #define ORDEN_GRAHAM #include <cmath> #include <iostream> #include <vector> struct point { float x, y; point() {} point(float X, float Y): x(X), y(Y) {} }; typedef std::vector<point> Vect; float distsqr(const point &a, const point &b); float dist(const point &a, const point &b); float cross(const point &a, const point &b, const point &c); bool angleCmp(const point &self, const point &that); Vect graham(Vect p); class angulo { public: angulo(); ~angulo(); point pivote; }; #endif
Gracias
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
AYUDA ORDENAR LISTA SIMPLE[C]
Programación C/C++
|
HRSLASH
|
0
|
9,307
|
23 Abril 2011, 04:22 am
por HRSLASH
|
|
|
ayuda para ordenar en c
Programación C/C++
|
marrison
|
9
|
3,511
|
4 Septiembre 2012, 16:10 pm
por marrison
|
|
|
necesito ayuda para ordenar en c
Programación C/C++
|
marrison
|
3
|
2,180
|
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
|
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
|
19 Marzo 2016, 18:37 pm
por bengy
|
|