Exemplo n.º 1
0
bool KMeans::agruparPontos(vector<Ponto *> * pontos, vector<Ponto> centroides)
{
    bool mudanca = false;

    for (size_t indice_ponto = 0; indice_ponto < pontos->size(); indice_ponto++)
    {
        Ponto * ponto = pontos->at(indice_ponto);
        float menor_distancia = std::numeric_limits<float>::max();
        int melhor_cluster = -1;
        for (int cluster = 0; cluster < _k; cluster++)
        {
            Ponto * centroide = &centroides.at(cluster);
            float distancia_centroide = _distancia.distancia(ponto, centroide);
            if (distancia_centroide < menor_distancia)
            {
                menor_distancia = distancia_centroide;
                melhor_cluster = cluster;
            }
        }
        if (melhor_cluster != ponto->classe())
        {
            mudanca = true;
        }
        ponto->classe(melhor_cluster);
    }

    return mudanca;
}
Exemplo n.º 2
0
void KMeans::agrupar(ConjuntoDeDados *dados)
{
    ConjuntoDeDados * dados_estandardizados = dados->estandardizar();
    vector<Ponto*> pontos = dados->pontos();
    vector<Ponto*> pontos_estandardizados = dados_estandardizados->pontos();

    for (size_t indice_ponto = 0; indice_ponto < pontos_estandardizados.size(); indice_ponto++)
    {
        Ponto * ponto = pontos_estandardizados.at(indice_ponto);
        int cluster = rand() % _k;
        ponto->classe(cluster);
    }

    bool mudanca = true;
    while (mudanca)
    {
        vector<Ponto> centroides = atualizarCentroides(pontos_estandardizados);
        mudanca = agruparPontos(&pontos_estandardizados, centroides);
    }

    for (size_t indice_ponto = 0; indice_ponto < pontos_estandardizados.size(); indice_ponto++)
    {
        Ponto * ponto = pontos_estandardizados.at(indice_ponto);
        pontos.at(indice_ponto)->classe(ponto->classe());
    }
}
Exemplo n.º 3
0
vector<Ponto> KMeans::atualizarCentroides(vector<Ponto *> pontos)
{
    vector<Ponto> centroides;
    int dimensoes = pontos.at(0)->dimensoes();
    for (int cluster = 0; cluster < _k; cluster++)
    {
        Ponto ponto(dimensoes, cluster);
        centroides.push_back(ponto);
    }

    vector<int> contador_cluster;
    contador_cluster.resize(_k, 0);

    for (size_t indice_ponto = 0; indice_ponto < pontos.size(); indice_ponto++)
    {
        Ponto * ponto = pontos.at(indice_ponto);
        int cluster = ponto->classe();

        contador_cluster.at(cluster) = contador_cluster.at(cluster) + 1;

        Ponto * centroide = &centroides.at(cluster);
        *centroide = *centroide + *ponto;
    }

    for (int cluster = 0; cluster < _k; cluster++)
    {
        Ponto * centroide = &centroides.at(cluster);
        if (contador_cluster.at(cluster) > 0)
        {
            *centroide = *centroide / contador_cluster.at(cluster);
        }
    }

    return centroides;
}
Exemplo n.º 4
0
void Filho::preparar() {
	int tpontos = pontos.size(), lados = tpontos / 3, j;
	buffer = buffer = (GLuint*)malloc(sizeof(GLuint)*tpontos * 3);

	nvertices = tpontos * 3;
	glEnableClientState(GL_VERTEX_ARRAY);

	float *vertexB = (float *)malloc(sizeof(float)* nvertices);

	j = 0;
	for (int i = 0; i<tpontos; i++) {
		Ponto xyz = pontos.at(i);

		vertexB[j + 0] = xyz.getX();
		vertexB[j + 1] = xyz.getY();
		vertexB[j + 2] = xyz.getZ();

		j += 3;
	}
	nvertices = j;

	glGenBuffers(1, buffer);
	glBindBuffer(GL_ARRAY_BUFFER, buffer[0]);
	glBufferData(GL_ARRAY_BUFFER, nvertices*sizeof(float), vertexB, GL_STATIC_DRAW);

	free(vertexB);
}
int main(int argc, char* argv[])
{
	Ponto* p = new Ponto(5, 7);
	p->Print();
	printf("module = %f\n", p->getModule());
	free(p);
	return 0;
}
Exemplo n.º 6
0
int main(int argc, char * argv[])
{
	Ponto* p = new Ponto(5,7, 9);
	p->print();
	printf("p._x = %d\n", p->_x);
	free(p);
	return 0;
}
Exemplo n.º 7
0
double Calculo::DistanciaPontos(Ponto & pontoA, Ponto & pontoB)
{
	double deltaX= fabs(pontoA.PosicaoX() - pontoB.PosicaoX());
	double deltaY= fabs(pontoA.PosicaoY() - pontoB.PosicaoY());

	double deltaXElevado2= pow(deltaX,2);
	double deltaYElevado2= pow(deltaY,2);

	double distanciaEntreOsPontos= sqrt(deltaXElevado2 + deltaYElevado2);

	return distanciaEntreOsPontos;
}
Exemplo n.º 8
0
void Curva::calculaViewPort(Ponto min, Ponto max, int w, int h) {
    vp_parametricas.clear();
    vp_pontos.clear();
    vp_tangentes.clear();

    foreach (Ponto p, getParametricas()) {
        Ponto vpponto;
        vpponto.setX((w - 2*W_PONTO) * (p.getX() - min.getX()) / (max.getX() - min.getX()) + W_PONTO);
        vpponto.setY((h - 2*W_PONTO) * (p.getY() - min.getY()) / (max.getY() - min.getY()) + W_PONTO);
        vp_parametricas.append(vpponto);
    }
Exemplo n.º 9
0
void Clipping::clip(ObjetoGeometrico* objeto) {
	Ponto* ponto = dynamic_cast<Ponto*>(objeto);
	Reta* reta = dynamic_cast<Reta*>(objeto);
	Poligono* poligono = dynamic_cast<Poligono*>(objeto);
	Curva* curva = dynamic_cast<Curva*>(objeto);
	if (ponto) {
		clippingPonto(ponto->clone());
	} else if (reta) {
		clippingReta(reta->clone());
	} else if (poligono) {
		if (poligono->aberto) {
			this->clippingObjetoGeometricoToRetas(poligono);
		} else {
			this->clippingPoligonoFechado(poligono);
		}
	} else if(curva){
		this->clippingObjetoGeometricoToRetas(curva);
	}
}
Exemplo n.º 10
0
int main() {
        Ponto a(10, 20);
        Ponto b(30, 40);
        Ponto c = a + b; //<=> a.operator +(b);

        a.print();
        b.print();
        c.print();

        /*IPonto t = a;
        t.print();
        IPonto *m = &a;
        m->print();*/

//        Ponto x = m; //Nao funciona. Do pai para o filho dah erro!
//        x.print();

        cout << soma<int>(10.0, 20.0) << endl;
        cout << soma<float>(10.0, 20.0) << endl;
        cout << soma<double>(10.0, 20.0) << endl;


    /*{ // Escopo temporario
        Ponto p(10,20);
        p.print();
        p.filho = new Ponto(20, 30);
        p.filho->print();

    }

    Ponto **ppt = new Ponto*[2];
    ppt[0] = new Ponto;
    ppt[0]->print();
    ppt[1] = new Ponto(70, 80);
    ppt[1]->print();*/

    return 0;
}
Exemplo n.º 11
0
bool KMeans::testeF(ConjuntoDeDados *dados)
{
    vector<Ponto*> pontos = dados->estandardizar()->pontos();

    vector<Ponto> centroides = atualizarCentroides(pontos);
    vector<int> contador_cluster;
    contador_cluster.resize(_k, 0);
    Ponto media_global(dados->dimensoes());

    for (size_t indice_ponto = 0; indice_ponto < pontos.size(); indice_ponto++)
    {
        Ponto * ponto = pontos.at(indice_ponto);
        int cluster = ponto->classe();

        contador_cluster.at(cluster) = contador_cluster.at(cluster) + 1;

        media_global = media_global + *ponto;
    }

    media_global = media_global / pontos.size();

    Ponto sq_entre(dados->dimensoes());
    for (size_t cluster = 0; cluster < centroides.size(); cluster++)
    {
        Ponto sq_cluster(dados->dimensoes());
        sq_cluster = centroides.at(cluster) - media_global;
        sq_cluster = sq_cluster * sq_cluster * contador_cluster.at(cluster);

        sq_entre = sq_entre + sq_cluster;
    }

    Ponto sq_total(dados->dimensoes());
    for (size_t indice_ponto = 0; indice_ponto < pontos.size(); indice_ponto++)
    {
        Ponto * ponto = pontos.at(indice_ponto);
        Ponto sq_ponto(dados->dimensoes());

        sq_ponto = *ponto - media_global;
        sq_ponto = sq_ponto * sq_ponto;

        sq_total = sq_total + sq_ponto;
    }

    Ponto sq_dentro = sq_total - sq_entre;

    int d1 = min(_k - 1, DistribuicaoF::_max_d1);
    int d2 = min((int)pontos.size() - _k, DistribuicaoF::_max_d2);
    pair<int, int> indice_f(d1, d2);

    Ponto sq_entre_bar = sq_entre / d1;
    Ponto sq_dentro_bar = sq_dentro / d2;

    Ponto f_score = sq_entre_bar / sq_dentro_bar;

    for (int dimensao = 0; dimensao < dados->dimensoes(); dimensao++)
    {
        float valor_critico = DistribuicaoF::_distribuicao[indice_f];
        if (f_score.at(dimensao) < valor_critico)
        {
            return false;
        }
    }

    return true;
}
Exemplo n.º 12
0
int MemoriaInterna::pontoToKey(const Ponto& p) {
	int x = p.getX();
	int y = p.getY();
	int ret = ((unsigned char)p.getX() << 8) | (unsigned char)(p.getY());
	return ret; 
}
Exemplo n.º 13
0
int MemoriaInterna::pontoToKey(const Ponto& p) {
	int x = p.getX();
	int y = p.getY();
	int ret = (x - MAP_MIN) * MAP_DIM + (y - MAP_MIN);
	return ret;
}
Exemplo n.º 14
0
/*Acha pontos*/
pair<Ponto, Ponto> achaPonto(Ponto a, Ponto b, Ponto c){
    Ponto p , q;
    double ab, ac, bc, perimetro;
    double semiperimetro;
    double aq, ap, delta;
    ab = a.len(b);
    ac = a.len(c);
    bc = b.len(c);
    perimetro = ab + ac + bc;
    semiperimetro = perimetro/2;
   
    /***/
    if(TESTE_NIVEL_1){
        cout << "ACHAPONTO: AB = " << ab << endl;
        cout << "ACHAPONTO: AC = " << ac << endl;
        cout << "ACHAPONTO: BC = " << bc << endl;
        cout << "ACHAPONTO: PERIMETRO = " << perimetro << endl;
    }
    /***/
    delta = perimetro*perimetro - 8*ab*ac;
    if(abs(delta) <= EPSILON) delta = 0;
    if(delta >= 0){
        aq = (perimetro + sqrt(delta))/4;
        ap = (perimetro - sqrt(delta))/4;
        if(ap > 0){
            q = b - a;
            q.setIntensidade(aq);
            q = a + q;
            if(a.len(q) < a.len(b) + EPSILON){
                p = c - a;
                p.setIntensidade(ap);
                p = a + p;
                if(a.len(p) < a.len(c) +  EPSILON){
                    return make_pair(p,q);
                }
            }
            else{
                q = c - a;
                q.setIntensidade(aq);
                q = a + q;
                if(a.len(q) < a.len(b) + EPSILON){
                    p = b - a;
                    p.setIntensidade(ap);
                    p = a + p;
                    if(a.len(p) < a.len(b) + EPSILON){
                       return make_pair(p,q);
                    }
                }
            }
        }
        else{
            /***/
            if(TESTE_NIVEL_1){
                cout << "ACHAPONTO: ap negativo!" << endl;
            }
            /***/
        }
    }
    else{
        /***/
        if(TESTE_NIVEL_1){
            cout << "ACHAPONTO: delta negativo!" << endl;
        }
        /***/
    }
    return make_pair(inf, inf);
}
Exemplo n.º 15
0
 foreach (Ponto p, getPontos()) {
     Ponto vpponto;
     vpponto.setX((w - 2*W_PONTO) * (p.getX() - min.getX()) / (max.getX() - min.getX()) + W_PONTO);
     vpponto.setY((h - 2*W_PONTO) * (p.getY() - min.getY()) / (max.getY() - min.getY()) + W_PONTO);
     vp_pontos.append(vpponto);
 }