Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cavernah

buscar ponto mais próximo

Recommended Posts

Olá! Sou iniciante em C++ e já estou com problemas! Tenho uma imagem de um bit, ou seja, se tem pixel, seu valor eh 1, se nao tem, seu valor eh 0.

 

Ex de imagem:

x>12345678910

y

01 0000000000

02 0010000010

03 0000000000

04 0000000000

05 0000011111

06 0000000000

07 0001000000

08 0010000000

09 0100000000

10 1000000000

 

Correndo a imagem de cima para baixo e da esquerda pra direita, temos entao os pontos: (1,10), (2,9), (3,2), (3,8), (4,7), (6,5), (7,5), (8,5), (9,2), (9,5), (10,5). Assim quero percorrer esta imagem para retirar os pontos: (3,2) e (9,2) isolados na imagem e salvar os pontos que quero em um arraytemp. Mas gostaria de salvar tipo em array[0] os pontos (1,10), (2,9), (3,8), (4,7) e em array[1] os pontos (6,5), (7,5), (8,5), (9,5), (10,5). Alguém tem alguma idéia de como melhor fazer isto?

 

Aqui está minha tentativa de código com falhas que não sei onde está para retirar os pontos isolados:

int z = 0;
int arraytempx[z];
int arraytempy[z];
int dy = 9; // altura da image em y
int dx = 9;	// largura da imagem em x
int pic[dy][dx]; //originalmente pic é dinamico
	
	for (int y=0; y<dy; y++)
	{
		for (int x=0; x<dx; x++)
	   {
			if (pic[y][x]==0) {continue;}
			if (pic[y][x]-pic[y][x+1] == 0) {arraytempx[z++]=x;arraytempy[z++]=y;continue;}
			if (pic[y][x]-pic[y+1][x] == 0) {arraytempx[z++]=x;arraytempy[z++]=y;continue;}
			if (pic[y][x]-pic[y+1][x+1] == 0) {arraytempx[z++]=x;arraytempy[z++]=y);continue;}
		}
	}

Valeu galera!

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Ponto {

private:
	int x,y;


public:
	Ponto(int X,int Y){
		x = X;
		y = Y;
	}

	void imprimirPonto() {
		cout << "(" << x << "," << y << ")";
	}
};


class Imagem {

private:
	int x,y;
	vector<string> linhas;

public:
	Imagem(int X, int Y) {
		x = X;
		y = Y;
	}

	void lerImagem() {
		string tmp;
		int indice;
		tmp.reserve(x);
		for(indice = 0; indice < y; indice++) {
			cin >> tmp;
			linhas.push_back(tmp);
		}
	}


	/* SE  S  SD
	 * E   C   D
	 * IE  I  ID */
	bool eIsolado(const int linha,const int coluna) {
		if (coluna < x-1 && linhas[linha].at(coluna+1) == '1') return false; //D
		if (coluna && linhas[linha].at(coluna-1) == '1') return false; //E
		if (linha < y-1 && linhas[linha+1].at(coluna) == '1') return false; //I
		if (linha && linhas[linha-1].at(coluna) == '1') return false; //S
		if (linha < y-1 && coluna < x-1 && linhas[linha+1].at(coluna+1) == '1') return false;
		if (linha && coluna < x-1 && linhas[linha-1].at(coluna+1) == '1') return false;
		if (linha < y-1 && coluna && linhas[linha+1].at(coluna-1) == '1') return false;
		if (linha && coluna && linhas[linha-1].at(coluna-1) == '1') return false;
		return true;
	}

	const vector<Ponto> procurarIsolados() {
		int indice;
		string::size_type inicio_busca;
		vector<Ponto> isolados;
		for(indice = 0; indice < y; indice++){
			inicio_busca = 0;
			while (true) {
				if (inicio_busca >= string::npos) break;
				inicio_busca = linhas[indice].find('1',inicio_busca);
				if (inicio_busca == string::npos) break;
				/* Se for encontrado um ponto verifica se é isolado. */

				if(eIsolado(indice,inicio_busca)) {
					Ponto tmp(indice,inicio_busca);
					isolados.push_back(tmp);
				}
				inicio_busca++;
			}
		}
		return isolados;
	}
};


int main (int argc, char *argv[]) {
Imagem I(10,10);
cout << "Digite a imagem:\n";
I.lerImagem();
vector<Ponto> pontosIsolados = I.procurarIsolados();
int tamanho = pontosIsolados.size();
if (!tamanho) cout << "Não existem pontos isolados.\n";
else
	for(int i=0;i<tamanho;i++)
		pontosIsolados[i].imprimirPonto();
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.