Como fazer um sistema de equivalencia

Delphi

02/06/2014

Galera, estou com um pequeno problema que gostaria de compartilhar e ver se consigo uma idéia ou solução. vamos ao problema, tenho uma medida de 70 cm, esta é minha referencia métrica, montei um dispositivo que recebe 2 informações onde seus pontos máximos seria os extremos da medida um em 0 e outro em 70, vamos supor que tenho uma leitura idêntica em ambos dispositivos, isso significa que a leitura é exatamente no centro da régua, ou seja 35,cm, outra hipótese, se um dos dispositivos receber mais leitura que o outro indicaria uma aproximação ao inicio ou no final, e isso teria que ser convertido em centímetros. sóa para entendimento, no programa que vai fazer a leitura destes dados no primeiro exemplo seria 0 e 0 para retornar 35 cm e no segundo exemplo seria -6 e -12 para retornar 50cm ou -12 e -6 para retornar 20cm ..se alguém puder ajudar neste racicocinio agradeceria demais mesmo...vlw
Gilmar Moraes

Gilmar Moraes

Curtidas 0

Respostas

Gilmar Moraes

Gilmar Moraes

02/06/2014

[img]http://arquivo.devmedia.com.br/forum/imagem/301124-20140603-000036.jpg[/img]

Esta seria a idéia de como ficaria..o programa teria que tirar a média das amostras e associar isso a um sistema de medida..
GOSTEI 0
Paulo Freire

Paulo Freire

02/06/2014

Bom Gigatel, eu tenho um .pas que fiz a muito tempo e que uma grande vidraçaria usa para corte em vidros temperados, cortes especiais de box e etc, seria o mesmo raciocínio ?
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Bom Gigatel, eu tenho um .pas que fiz a muito tempo e que uma grande vidraçaria usa para corte em vidros temperados, cortes especiais de box e etc, seria o mesmo raciocínio ?


amigo, deixa explicar o que estou tentando fazer, sou estudante de eng. elétrica e fizemos um aparelho que simula descargas atmosférica, igual uma bobina de tesla, más em tempos regulados, estou usando 2 microfones eletreto para registrar gravações de queda, com são dois canais independentes tenho capturas de Decibéis onde um canal pegará menos que o outro me informando onde ocorreu a descarga..por isso fiz aquele gráfico. vlw
GOSTEI 0
Marco Salles

Marco Salles

02/06/2014

Porque que

A1 = 20 e B3=60 o resultado tem que dar 50 ??? não seria 40 ???

Porque que

A3 = 0 e B1 = 40 o resultado tem que dar 10 ??? Não seria 20 ???
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

02/06/2014

Vê se essa função te ajuda:


function equivalencia(val1, val2: string): Integer;
var
  letra: string;
  numero, eqA, eqB: Integer;
begin
  letra := Copy(val1, 1, 1);
  numero := StrToInt(Copy(val1, 2, length(val1)));

  if letra = 'A' then
  begin
    eqA := 30 - (10 * numero);
  end;

  letra := Copy(val2, 1, 1);
  numero := StrToInt(Copy(val2, 2, length(val1)));

  if letra = 'B' then
  begin
    eqB := 30 + (10 * numero);
  end;

  Result := Trunc((eqA + eqB) / 2);
end;

GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Porque que

A1 = 20 e B3=60 o resultado tem que dar 50 ??? não seria 40 ???

Porque que

A3 = 0 e B1 = 40 o resultado tem que dar 10 ??? Não seria 20 ???


Obrigado por responder, para quebrar o galho estou fazendo uma média dos dois valores como vc sugere, más entendo que os dois pontos estão fixos e estes valores não pode ser tratados como media, pois valores diferentes podem dar medias iguais, pense o seguinte o range não pode mudar por que a intensidade da captura sempre terá dois pontos fixos é como se eu colasse estes valores em uma regua por exemplo e se um ponto de valor mudasse o outro mudaria proporcionalmente..vou postar uma foto..
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Este é o projeto que fizemos, é para dá uma ideia de como funciona.
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Este é o projeto que fizemos, é para dá uma ideia de como funciona.


estranho a foto não está aparecendo..rsrsrs
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Vê se essa função te ajuda:


function equivalencia(val1, val2: string): Integer;
var
  letra: string;
  numero, eqA, eqB: Integer;
begin
  letra := Copy(val1, 1, 1);
  numero := StrToInt(Copy(val1, 2, length(val1)));

  if letra = 'A' then
  begin
    eqA := 30 - (10 * numero);
  end;

  letra := Copy(val2, 1, 1);
  numero := StrToInt(Copy(val2, 2, length(val1)));

  if letra = 'B' then
  begin
    eqB := 30 + (10 * numero);
  end;

  Result := Trunc((eqA + eqB) / 2);
end;



Obrigado por responder, más não precisa usar letras só usei como referencia..será usado dois valores que este definirá um ponto métrico válido, será analisado duas amostras de um mesmo registro, isso será feito por microfones e o registros será um descarga elétrica, o microfone deve captura onde ocorreu, onde um terá um captura maior e o outro menor, e estes 2 valores devem corresponder a um ponto de uma régua..informado então a origem estimada da descarga.
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Vê se essa função te ajuda:


function equivalencia(val1, val2: string): Integer;
var
  letra: string;
  numero, eqA, eqB: Integer;
begin
  letra := Copy(val1, 1, 1);
  numero := StrToInt(Copy(val1, 2, length(val1)));

  if letra = 'A' then
  begin
    eqA := 30 - (10 * numero);
  end;

  letra := Copy(val2, 1, 1);
  numero := StrToInt(Copy(val2, 2, length(val1)));

  if letra = 'B' then
  begin
    eqB := 30 + (10 * numero);
  end;

  Result := Trunc((eqA + eqB) / 2);
end;



Obrigado por responder, más não precisa usar letras só usei como referencia..será usado dois valores que este definirá um ponto métrico válido, será analisado duas amostras de um mesmo registro, isso será feito por microfones e o registros será um descarga elétrica, o microfone deve captura onde ocorreu, onde um terá um captura maior e o outro menor, e estes 2 valores devem corresponder a um ponto de uma régua..informado então a origem estimada da descarga.
GOSTEI 0
Valquiria Silva

Valquiria Silva

02/06/2014

Olá Gigatel, talvez seja interessante criar dois vetores inteiros

Dispositivo A []
Dispositivo B []

então grave os valores capturados na posição correspondente dos vetores.

E depois faça as conversões.

Espero ter ajudado e não ter falado besteira rsrsrs.
GOSTEI 0
Marco Salles

Marco Salles

02/06/2014

Amigo Gigatel , existem vários tipos de média ( Aritmética , geométrica ,Ponderada etc... )

Eu não defini que o ideal fosse a Média Aritmética , apenas comparei com os resultados que vc apresentou que sugerem ser esta a média utilizada por VC mesmo

Seria bom uma figura e mais detalhes ,

[]sds
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

[img:descricao=Projeto]http://arquivo.devmedia.com.br/forum/imagem/301124-20140609-132532.png[/img]

Imagine agora uma régua de 80cm por baixo do aluminio que indica ponto a e b, acho que agora ficará mais claro.
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Olá Gigatel, talvez seja interessante criar dois vetores inteiros

Dispositivo A []
Dispositivo B []

então grave os valores capturados na posição correspondente dos vetores.

E depois faça as conversões.

Espero ter ajudado e não ter falado besteira rsrsrs.


Obrigado por responder, então só preciso mesmo arrumar um jeito de converter pois os dados de entrada é visualizado e depois os valores são inseridos manualmente..se existisse um plugin ou uma função que pegasse os picos máximos de uma fonte de áudio não precisaria inserir manualmente..atualmente faço a captura no sound forge e coloco os valores manualmente, como mostrado na foto.

[img]http://arquivo.devmedia.com.br/forum/imagem/301124-20140609-133856.png[/img]
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

02/06/2014

Cara deu pra entender um pouco melhor, mas ainda continua sem entender como você chegou nos resultados do primeiro exemplo seu:


segundo exemplo seria -6 e -12 para retornar 50cm ou -12 e -6 para retornar 20cm


Tentei aplicar o raciocínio da sua segunda explicação mas não consegui chegar nos resultados!
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Cara deu pra entender um pouco melhor, mas ainda continua sem entender como você chegou nos resultados do primeiro exemplo seu:


segundo exemplo seria -6 e -12 para retornar 50cm ou -12 e -6 para retornar 20cm


Tentei aplicar o raciocínio da sua segunda explicação mas não consegui chegar nos resultados!


Acho que agora vai dá certinho..rsrs

[img]http://arquivo.devmedia.com.br/forum/imagem/301124-20140609-134832.jpg[/img]
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Cara deu pra entender um pouco melhor, mas ainda continua sem entender como você chegou nos resultados do primeiro exemplo seu:


segundo exemplo seria -6 e -12 para retornar 50cm ou -12 e -6 para retornar 20cm


Tentei aplicar o raciocínio da sua segunda explicação mas não consegui chegar nos resultados!


Acho que agora vai dá certinho..rsrs

[img]http://arquivo.devmedia.com.br/forum/imagem/301124-20140609-134832.jpg[/img]


Aliás 3cm não, são 3 casas mesmo aí com isso chego ao valor em centímetros.. más como podem notar os valeres no exemplo estão em inteiros más só para exemplo o valor pode ocorrer fracionados tbm..
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

02/06/2014

Acho que agora minha função esta funcionando como você precisa, fiz uns testes e consegui chegar nos valores no seu primeiro exemplo:



function equivalencia(valorReferencia, val1, val2: integer): integer;
var
eqA, eqB: integer;
begin
if val1 > 0 then
eqA := Trunc((valorReferencia / 2) - (val1 * 5))
else
eqA := Trunc((valorReferencia / 2) + (val1 * 5));

if val2 > 0 then
eqB := Trunc((valorReferencia / 2) + (val2 * 5))
else
eqB := Trunc((valorReferencia / 2) - (val2 * 5));


Result := Trunc((eqA + eqB) / 2);
end;

GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Acho que agora minha função esta funcionando como você precisa, fiz uns testes e consegui chegar nos valores no seu primeiro exemplo:



function equivalencia(valorReferencia, val1, val2: integer): integer;
var
eqA, eqB: integer;
begin
if val1 > 0 then
eqA := Trunc((valorReferencia / 2) - (val1 * 5))
else
eqA := Trunc((valorReferencia / 2) + (val1 * 5));

if val2 > 0 then
eqB := Trunc((valorReferencia / 2) + (val2 * 5))
else
eqB := Trunc((valorReferencia / 2) - (val2 * 5));


Result := Trunc((eqA + eqB) / 2);
end;



Vou testa-la aki..e vejo se deu certo.
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

Acho que agora minha função esta funcionando como você precisa, fiz uns testes e consegui chegar nos valores no seu primeiro exemplo:



function equivalencia(valorReferencia, val1, val2: integer): integer;
var
eqA, eqB: integer;
begin
if val1 > 0 then
eqA := Trunc((valorReferencia / 2) - (val1 * 5))
else
eqA := Trunc((valorReferencia / 2) + (val1 * 5));

if val2 > 0 then
eqB := Trunc((valorReferencia / 2) + (val2 * 5))
else
eqB := Trunc((valorReferencia / 2) - (val2 * 5));


Result := Trunc((eqA + eqB) / 2);
end;



Vou testa-la aki..e vejo se deu certo.




este valorReferencia seria o que na função ?
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

02/06/2014

tenho uma medida de 70 cm, esta é minha referencia métrica


Você passa medida da régua, 70cm, 60cm, 80cm
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

02/06/2014

tenho uma medida de 70 cm, esta é minha referencia métrica


Você passa medida da régua, 70cm, 60cm, 80cm


massa demais cara..vlw..já estou fazendo os testes aqui..bom no relatório que estou fazendo tenho que citar as referencia e ajudas que tive posso te citar ou posso citar o forum como ajudas no programa ?
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

02/06/2014

Opa, que bom Gigatel, pode citar sim, sem problemas!!!
Qualquer coisa se precisar de mais alguma adaptação ou não estiver 100% da um toque que a gente vai refatorando!!!
GOSTEI 0
POSTAR