Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com gráfico


VDLR

Pergunta

Pessoal tudo bem.

Estou precisando montar um gráfico de linha com os seguintes parâmetros.

Tenho um valor inicial e um final, só que para chegar no valor final a algumas condições.

Exemplo:

Valor inicial 300 pontos

Valor final 1000 pontos

Só que para chegar a 1000 pontos, o gráfico teria que subir 200 pontos por minuto e se manter a 1000 pontos por 10 minutos e depois cair a 300 pontos da mesma forma que subiu.

Tem como fazer isto.

Espero que tenha dado para entender.

Abraço

Valdecir :blink:

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
Só que para chegar a 1000 pontos, o gráfico teria que subir 200 pontos por minuto e se manter a 1000 pontos por 10 minutos e depois cair a 300 pontos da mesma forma que subiu.

Se entendi direito, o seu grafico seria pontos X minutos

a dúvida é: seu grafico é animado ? ou seja , voce quer ver o grafico sendo alterado minuto a minuto ? ou só o resultado final

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Se entendi direito, o seu grafico seria pontos X minutos

a dúvida é: seu grafico é animado ? ou seja , voce quer ver o grafico sendo alterado minuto a minuto ? ou só o resultado final

Jhonas beleza.

Seria só o resultado final.

Abraço

Valdecir

Link para o comentário
Compartilhar em outros sites

  • 0
Estou precisando montar um gráfico de linha com os seguintes parâmetros.

Valor inicial 300 pontos

Valor final 1000 pontos

Só que para chegar a 1000 pontos, o gráfico teria que subir 200 pontos por minuto e se manter a 1000 pontos por 10 minutos e depois cair a 300 pontos da mesma forma que subiu.

Tem como fazer isto.

Voce poderia fazer isso de maneira muito simples usando o Excel

mas se quiser fazer isto no delphi, voce tera que usar o componente TDBChart da paleta Data Controls para montar o grafico.

terá que criar uma tabela com os campos Pontos e Minutos com os respectivos valores

exemplo:

Pontos Minutos

300 0

400

500 1

600

700 2

800

900 3

1000 4

1000 5

1000 6

1000 7

1000 8

1000 9

1000 10

1000 11

1000 12

1000 13

1000 14

900 15

800

700 16

600

500 17

400

300 18

usar um componente table ou query para linkar a tabela ao TDBChar atraves do Dataset

coloque o componente TDBChar no form e de dois cliques sobre ele ... voce vera o Editor do DBchart

na aba Chart sub-aba Series clique no botao Add e selecione o grafico Line e clique no botão OK

na aba Chart sub-aba Axis voce vai definir o titulo dos eixos X e Y , para isso selecione a aba Titles

a primeira posição Axis Left já estara selecionada, basta voce digitar em Title: Pontos , depois voce clique em Axis: Bottom e digita em Title: Minutos

voltando para a primeira aba Chart ( no topo ) voce verá do lado a aba Series .. clique nela para fazer a ligação da tabela ao componente.

na aba Series, voce verá uma sub-aba chamada Datasource

a prmeira opção da lista deverá ser DataSet e a segunda opção voce colocara ou a table ou a query que voce colocou no form

No eixo X selecione o campo da sua tabela Minutos e no eixo Y o campo da sua tabela Pontos .... clique no botão Close e ative a sua tabela ou query... voce vera a formação do grafico

Se não quiser usar uma tabela, voce pode usar a idéia que o Micheus já passou para voce neste post

http://scriptbrasil.com.br/forum/index.php...st&p=474726

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas beleza.

Caçamba, pensei que desse para fazer isto de forma mais simples, com um Tchart e alguns edits, tipo um valor inicial, um valor final, um valor da taxa de subida, um para descida e outro de tempo.

Será que não tem como?

Já quebrei a cabeça e não achei.

Abraço

Valdecir :wacko:

Link para o comentário
Compartilhar em outros sites

  • 0
Caçamba, pensei que desse para fazer isto de forma mais simples, com um Tchart e alguns edits, tipo um valor inicial, um valor final, um valor da taxa de subida, um para descida e outro de tempo.

Será que não tem como?

Voce poderia fazer isso de maneira muito simples usando o Excel, basta colocar os valores dos pontos na celula A e os valores dos minutos a celula B e gerar o grafico.

ou usar da maneira que o Micheus passou

http://scriptbrasil.com.br/forum/index.php...st&p=474726

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Tenho um valor inicial e um final, só que para chegar no valor final a algumas condições.

Exemplo:

Valor inicial 300 pontos

Valor final 1000 pontos

Só que para chegar a 1000 pontos, o gráfico teria que subir 200 pontos por minuto e se manter a 1000 pontos por 10 minutos e depois cair a 300 pontos da mesma forma que subiu.

VDLR, esse valor inicial e final não estariam trocados no seu exemplo ou você falou do gráfico em ordem inversa de tempo (esquerda 10min -> direita 0min)?

Essa variação (subida e descida) obedece a que critério? É para gerá-los aleatoriamente?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
VDLR, esse valor inicial e final não estariam trocados no seu exemplo ou você falou do gráfico em ordem inversa de tempo (esquerda 10min -> direita 0min)?

Essa variação (subida e descida) obedece a que critério? É para gerá-los aleatoriamente?

Micheus, tudo bem.

Os valores não estão trocados.

Os valores de subida e descida obedeceriam a uma taxa especificada e a um tempo determinado e seria gerado de acordo com os valores digitados nos edits.

Na realidade eu preciso de algo como exposto no post inicial, onde a pessoa digitaria uma valor inicial, um valor final, uma valor de subida para se chegar ao valor final, um valor que indicaria quanto tempo ele levará para chegar no valor final, um valor que demonstraria quanto tempo ele permaneceria no valor final, um valor de descida para se chegar ao valor inicial e um valor que indicaria quanto tempo ele levará para chegar no valor inicial.

Valor inicial : 300 pontos

Valor final : 1000 pontos

Valor de subida : 200 pontos

Valor tempo1 : 1 min (a cada 1 min sobe 200 pontos até chegar a 1000 pontos)

Valor permanência : 5 min (ficaria durante 5 min em 1000 pontos)

Valor descida : 150 pontos

Valor tempo2 : 3 min (a cada 3 min desce 150 pontos até chegar a 50 pontos)

Valor final descida : 50 pontos

Espero ter conseguido explicar.

Abraços

Valdecir :wacko: :blink:

Link para o comentário
Compartilhar em outros sites

  • 0

VDLR, eu também fiquei meio :wacko:

Então, vou por aqui apenas um esqueleto do que você citou, mas já dará para você saber como você poderia adicionar valores à série em run-time, bem como remover e adicionar a série. Coloque apenas um componente TChart no seu form, os edits e um botão (foi como comecei):

procedure TForm1.Button1Click(Sender: TObject);
var
  Idx :Integer;
  ...
  VlFinal,
  VlFinalDescida,
  VlTempo,
  VlTempo1,
  VlTempo2,
  VlSubida,
  VlDescida,
  Pontos :Integer;
  LineSerie :TLineSeries;
begin
 // libera qualquer série alocada para o TChart
  for Idx := 0 to Chart1.SeriesList.Count -1 do
    Chart1.Series[Idx].Free;
 // elimina séries da lista do TChart
  Chart1.SeriesList.Clear;

  VlFinal := StrToInt(Edit2.Text);
  VlSubida := StrToInt(Edit3.Text);
  VlTempo1 := StrToInt(Edit4.Text);
  VlDescida := StrToInt(Edit6.Text);
  VlTempo2 := StrToInt(Edit7.Text);
  VlFinalDescida := StrToInt(Edit8.Text);
  ... // inicializações outras variáveis
  VlTempo := 0;  // início do tempo
  Pontos := 0;

 // criação da série do tipo Linha 
  LineSerie := TLineSeries.Create(Self);

  repeat
    Inc(VlTempo);
    if (VlTempo mod VlTempo1) and (Pontos < VlFinal) then
      Pontos := Pontos +VlSubida;
    if (VlTempo mod VlTempo2) and (Pontos > VlFinalDescida) then
      Pontos := Pontos -VlDescida;

    LineSerie.AddXY(VlTempo, Pontos); // parâmetros: X, Y[, label][, cor]
  until <condição>;
 // adiciona a série ao TChar, mostrando-a ao usuário
  Chart1.AddSeries(LineSerie);
end;

tem a questão da permanência que eu não entendi direito (imagino que permaneça apenas quando atingir o topo, e não processe os outros tempos neste período), bem como se ao avaliar o tempo1, se poderá avaliar o tempo2 também (com isso, pode ocorrer se somar e em seguida diminuir)

Mas se pintar dúvida a gente tenta ajudar.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus, tudo bem

Não consegui executar, estou recebendo todos estes erros.

if (VlTempo mod VlTempo1) and (Pontos < VlFinal) then

[Error] Unit1.pas(72): Operator not applicable to this operand type

if (VlTempo mod VlTempo2) and (Pontos > VlFinalDescida) then

[Error] Unit1.pas(74): Operator not applicable to this operand type

until <condição>;

[Error] Unit1.pas(78): Expression expected but '<' found

[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

que condição eu coloco aqui ?

until <condição>;

Não teria que ter um valor inicial também ?

Abraços :rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0
until <condição>;

[Error] Unit1.pas(78): Expression expected but '<' found

Ele quis dizer que vai uma condição para que se repita o código um pouco acima... não pra você colocar a linha "until <condição>;" em seu código.

abraço. :D

Editado por K!ko
Link para o comentário
Compartilhar em outros sites

  • 0
if (VlTempo mod VlTempo1) and (Pontos < VlFinal) then

[Error] Unit1.pas(72): Operator not applicable to this operand type

if (VlTempo mod VlTempo2) and (Pontos > VlFinalDescida) then

[Error] Unit1.pas(74): Operator not applicable to this operand type

Bem, eu disse que era um esqueleto e acabei assumindo que você conseguiria ir completando o que faltava...

O erro com o Mod é que acabei esquecendo de por justamente como deve ser o resultado para mostrar que é um número divisível pelo informado. Mude de:

if (VlTempo mod VlTempo2) and (Pontos > VlFinalDescida) then

if (VlTempo mod VlTempo2) and (Pontos > VlFinalDescida) then

para:

if ((VlTempo mod VlTempo2) = 0) and (Pontos > VlFinalDescida) then

if ((VlTempo mod VlTempo2) = 0) and (Pontos > VlFinalDescida) then

until <condição>;

[Error] Unit1.pas(78): Expression expected but '<' found

[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

que condição eu coloco aqui ?

until <condição>;

Não teria que ter um valor inicial também ?

é como o K!ko disse.

Eu não sei qual a condição... É com você.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...