Professional Documents
Culture Documents
O objetivo do trabalho é construir um programa capaz de estimar a posição de um alvo em um terreno, a partir do
conhecimento de medições fornecidas por n radares. Cada radar é capaz de fornecer a própria latitude, longitude e
a direção do alvo, codificada na forma de um vetor unitário do plano, que aponta para o alvo. Os radares são
incapazes de fornecerem a distância até o alvo. Estamos considerando também que, devido às limitações de
engenharia, as medições fornecidas apresentam imprecisões.
Ex:
A figura acima mostra 3 radares localizando um alvo, e ilustra o fato de que suas medições apresentam
imprecisões. Uma alternativa para lidar com a imprecisão e quantidade de medidas fornecidas é a utilização do
método dos mínimos quadráticos.
Essa função recebe uma matriz A = [ x y ], de n linhas e 2 colunas, ou seja, x e y representam as duas colunas de
A. Ao ser chamada, deve ser retornado em a[2][2] o valor de . Object 1
Essa função recebe a matriz A, da mesma forma que o item anterior, e retorna em atb[2] o vetor definido por
Object 2
, onde b é um vetor de dimensão n, tal que todas suas componentes possuem valor 1.
d) void insert_line( float *x, float *y, int i, float pos[2], float dir[2] );
Essa função deve receber em pos[2] as coordenadas de latitude e longitude de um radar, e em dir[2] as
coordenadas da medição fornecida por ele. Como resultado da chamada da função, devem ser colocados em x[i]
e y[i] valores tais que, sendo a = x[i] e b = y[i], tenhamos como a equação da reta que
Object 5
passa pelo radar e cuja direção é a medição fornecida por ele. Ou seja, sendo , como definido no
Object 4
item a), tem-se que essa função especifica apropriadamente a i-ésima linha de A.
e) Adicione a seguinte função main( ) às funções definidas por você nos items anteriores. Leia essa função, e
entenda o que o programa faz:
int main( void )
{
float ata[2][2], atb[2];
float r[2], x[1000], y[1000], pos[2], dir[2];
int i, nradares;
Pronto !!! Seu programa está completo agora vamos testá-lo !!!
f) A lista de valores abaixo corresponde às informações de 20 radares, que precisa ser passada para
seu programa estimar a posição de um alvo.
20
4.866398 2.700413 -0.269522 0.962994
4.876274 0.201553 -0.181030 0.983478
0.833843 7.614788 0.999980 -0.006358
8.632368 5.572530 -0.929943 0.367703
6.588511 0.463489 -0.376960 0.926229
1.797176 7.151463 0.964801 0.262982
7.623816 1.560028 -0.551488 0.834183
1.659821 9.138008 0.768865 -0.639411
7.030430 6.648807 -0.964704 0.263338
1.285347 7.126536 0.977304 0.211844
5.696925 6.749360 -0.933118 0.359570
5.815790 8.877946 -0.860177 -0.509995
5.968438 7.630244 -0.999993 0.003644
3.145547 8.826492 0.305121 -0.952314
4.133265 2.171890 -0.111330 0.993783
9.446834 0.694130 -0.641035 0.767512
2.320968 5.239624 0.464832 0.885399
6.468970 6.755063 -0.962898 0.269865
9.407033 6.776791 -0.990523 0.137349
0.976272 6.071567 0.859530 0.511085
Queremos neste item que você utilize seu programa para estimar o posicionamento do alvo a partir
das medições desses radares. Como você não aprendeu a manipular arquivos em Linguagem C,
explore o fato de que, no LINUX, é possível fazer com que a origem dos dados fornecidos para a
função scanf deixe de ser o teclado, e passe a ser um arquivo texto.
Mais precisamente, se o seu programa se chama “radares”, basta você salvar a lista de valores acima
em um arquivo dados.txt, e executar o programa digitando “./radares < dados.txt” para
que seu programa exiba as coordenadas estimadas do alvo.
g) Monte 5 arquivos, adaptando o arquivo utilizado no item anterior, de forma que, em cada um
deles sejam levados em consideração apenas a informação de um par de radares selecionado no
conjunto dos 20 radares fornecidos. Ou seja, encontre 5 soluções ingênuas, descartando parte da
informação dos radares para obter uma modelagem através de um sistema linear de duas linhas e
duas colunas.