Comparação entre vetores

Eu estou com um problema. Eu tenho um prédio que é definido por 4 vetores, onde ele é criado randomicamente. É preciso construir uma cidade com prédios, mas como eu estou criando ele randomicamente, antes da criação de um novo prédio, eu preciso comparar com todos os prédios anteriores se eles não serão sobrepostos.

Eu estou iniciando no c++, mas entendo alguma coisa sobre java, normalmente, eu iria usar um compareTo ou algo parecido. Alguém tem uma ideia de como eu posso criar esse método?

Tenho esse código do método que deixa que cria os prédios.

void criaPrediosRand()
{
	//pra utilizar o rand é rand() %. Um ex: face = 1 + rand() % 6; /* random number from 1 to 6
	int x = rand() % 7;
	int y = rand() % 7;
	int divisaoAndares = 0;
	
	int num_predios = rand() % 20;

	//for da cidade
	for (int i = 0; i < num_predios; i++)
	{
		std::cout <<" criando predio "<< std::endl;

		int x = rand() % 10;
		int y = rand() % 10;
		int divisaoAndares = rand() % 10;
		//ERRO
		int andares = rand() % 10;


		//ARRUMAR A MOVIMENTAÇÃO


		//Comparação
		if (!colidiuComPredio(0,0))
		{
			std::cout << " nao colidiu " << std::endl;

			Building b1(x, 0, y, andares, divisaoAndares, 1, 1);
			planos.push_back(b1.predio[0].plano);
			planos.push_back(b1.predio[1].plano);
			planos.push_back(b1.predio[2].plano);
			planos.push_back(b1.predio[3].plano);
			planos.push_back(b1.predio[4].plano);
			city.push_back(b1);
		}

	}

O que define um prédio ser “sobreposto” ao outro? Estar na mesma coordenada? (em termos reais, estar no mesmo endereço e número).

Um prédio pode ocupar mais de 1 coordenada x/y ?

Qual o objetivo desse algoritmo? Se você quer preencher a cidade (uma matriz, suponho) com prédios em algumas posições (x, y), poderia percorrer as posições dessa matriz e, a cada posição, criar ou não um prédio ali, de acordo com o resultado do random (digamos que, num espaço sem prédio, pode haver uma rua ou um lote vazio).

Abraço.

1 curtida

Olá!

Assim, é meio difícil de explicar, mas eu vou tentar.
Quando eu falo sobreposto, séria quando eu crio ele randomicamente e ele acaba nascendo em cima de outro, entende? Com coordenadas onde o anterior já foi criado.
Pode ocupar mais de 1 coordenada, pois são 4 pontos. Cada canto do prédio é uma “coordenada” diferente. Assim, quando eu faço a criação do prédio eu só mando uma coordenada, mas a largura do prédio irá depender de quantos apartamentos existe por andar.
Esse algoritmo é um projeto para verificar a quantidade de luz solar cada prédio e apartamento recebe diariamente, pra evitar gastos. Isso, eu preciso preencher uma cidade, mas eu tô utilizando o vector, que no meu código é um vetor de outra classe que inicializa o que eu preciso para criar o prédios. A cada criação de prédio eu tenho que verificar se ele não está sobreposto (dentro) dos anteriores.

Eu sei que ficou ruim de entender, mas é que é confuso de explicar.
Obrigada, abraço.

Otra vez a mesma pergunta?

Não consegui entender naquela explicação

O problema parece ser que você não entende o que quer resolver, não o fato de ser Java ou C++. Teste de interseção de polígonos pouco tem a ver com compareTo() ou coisa do tipo.

Como fazer esse teste de interseção eu expliquei na versão anterior desta pergunta.

Se o novo prédio intersectar algum prédio já existente então há sobreposição.

Se não entendeu a explicação, peça esclarecimentos no mesmo tópico, para evitar encher o fórum da mesma pergunta.

De todo modo, acredito que ficará mais claro se você desenhar (não estou zombando). Por exemplo, sua cidade começa assim?

# # # # # # # 
# # # # # # # 
# # # # # # # 
# # # # # # # 
# # # # # # # 
# # # # # # # 

Cada # corresponde a um local na cidade onde é possível construir um prédio. Se for inserido um prédio de 3 andares, como ficaria?

Deixe as estruturas (vetores, matrizes) e algoritmos de lado e nos explique qual é o seu estado inicial (visualmente) e qual o estado após inserir 1 prédio, 2 prédios, 3 prédios. Considere o melhor caso (ou seja, toda vez que é inserido um prédio, ele sempre é colocado em um local com espaço suficiente, não há colisões).

Abraço.

TerraSkilll, eu já cheguei a desenha a minha cidade com prédios.
No teu exemplo de construir um prédio de 3 andares não interferiria em nada em expansão de coordenada, mas se fosse número de apartamentos por andar, dai sim mudaria, e então ele ficaria mais “gordo”.
Meu estado inicial seria um terreno, na primeira inserção de prédio eu não teria problemas, mas na segunda já tenho que levar em conta o fato que eu não posso inserir esse novo prédio aonde o outro já esta criado. O meu problema é na hora de escrever o código, não sei para o que eu posso recorrer para que faça essa verificação.