Ir para conteúdo

POWERED BY:

Arquivado

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

danalmeida

[Resolvido] Coordenadas especificaçao e verificaçao

Recommended Posts

boa tarde

comecei recentemente a programar em C em virtude de uma materia da faculdade e estou tendo algumas dificuldades

em um certo trabalho é pedido

São dados:

• uma lista de pontos no plano cartesiano, onde cada ponto corresponde à

posição onde caiu um raio;

• as coordenadas de um retângulo que delimita uma fazenda.

As linhas que delimitam a fazenda são paralelas aos eixos cartesianos.

Sua tarefa é escrever um programa que determine quantos raios caíram dentro

da fazenda (incluindo raios que caíram exatamente sobre as linhas que delimitam a fazenda).

Entrada

Seu programa deve ler vários conjuntos de testes. A primeira linha de um

conjunto de testes quatro números inteiros X1, Y1, X2 e Y2, onde (X1, Y1) é a

coordenada do canto superior esquerdo e (X2, Y2) é a coordenada do canto inferior direito do retângulo que delimita a fazenda. A segunda linha contém um

inteiro, N, que indica o número de raios. Seguem-se N linhas, cada uma contendo dois números inteiros X e Y, correspondendo às coordenadas de cada raio. O

final da entrada é indicado por X1 = Y1 = X2 =Y2 = 0.

Exemplo de Entrada

2 4 5 1

2

1 2

3 3

2 4 3 2

3

1 1

2 2

3 3

0 0 0 0

Saída

Para cada conjunto de teste da entrada seu programa deve produzir três

linhas na saída. A primeira linha deve conter um identificador do conjunto de

teste, no formato "Teste n", onde n é numerado a partir de 1. A segunda linha

deve conter o número de raios que caíram dentro da fazenda.

Exemplo de Saída

Teste 1

1

Teste 2

2

 

fiz o inicio da implementaçao ams estou tendo muitas duvidas e meu programa nao funciona como esperado

abaixo segue meu codigo

 

#include<stdio.h>
#include<stdlib.h>

int main() 
{
  int x1,x2,y1,y2, cse[]={x1,y1}, cid[]={x2,y2};
 int N=0;
 printf("Digite o numero de raios que cairam\n");
 scanf ("%d", &N);
 int x,y;
 int raios[N][N];
 int i=0;
 int j=0;
 for (i=0;i<N;i++)
   {  j++;
  	printf(" Digite as coordenadas de onde caiu o raio %d\n", i+1); 
  	scanf("%d",&raios[i][j]);
   }
 printf("\n");
 for (i=0;i<N;i++)
   {  j++;
  	printf("%d ",raios[i][j]);
   }
 printf("\n");

return 0;
}

 

se puderem ajudar agradeço muito

att. Daniel

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, eu alterei um pouco o meu codigo e consegui melhorar alguma coisa..

a minha duvida é a seguinte, na hora que compilo o programa o meu if esta dando erro e nao sei como resolver

aqlguem teria um sugestao de melhor aplicaçao?

 

#include<stdio.h>

#include<stdlib.h>

 

int main()

{

int x1,x2,y1,y2;

int N=0;

printf("Digite o numero de raios que cairam\n");

scanf ("%d", &N);

int i=0;

int x;

int y;

int raios[N];

int j=0;

for (i=0;i<N;i++)

{

printf(" Digite as coordenadas de onde caiu o raio %d\n", i+1);

scanf("%d",&x);

scanf("%d",&y);

}

printf("\n");

if((x >= x1 && < x2) || (x > x1 && <= x2) && ((y >= y1 && < y2) || (y > y1 && <= y2))

{

j++

}

printf("\n");

printf("Teste1\n %d",j);

system("pause");

 

return 0;

}

a pergunta é: como posso melhorar esse if ou fazer algum outro comando para definir se (x,y) esta dentro de (x1,y1),(x2,y2).

:wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, nunca implementei um negócio desses, mas achei algo que pode ajudar.

http://www.blackpawn.com/texts/pointinpoly/default.html

 

Veja o título "Barycentric technique".

 

dot product significa "produto interno". É uma operação algébrica na qual você multiplica os valores das coordenadas dos vetores e os soma no final.

P/ encontrar o vetor entre os pontos A, (x1,y1) e B (x2,y2), faça (x2-x1) * i + (y2-y1) * j.

 

Mais tarde, quem sabe eu implemento isso só de curiosidade.

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.