Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Problema unit Graph di pascal: costruzione di un orologio
Forum - Pascal - Problema unit Graph di pascal: costruzione di un orologio

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Ciao a tutti ho un problema con la contruzione di un orologio a lancette utilizzando la unit graph:
Dopo aver costruito lo scheletro dell'orologio semplicemente con Circle(xC, yC, r), ho pensato di vedere le lancette (per adesso solo quelle dei secondi) semplicemente come delle rette per due punti: un punto è fisso ed è il centro della circonferenza dell'orologio, mentre l'altro è mobile ogni secondo. Il problema che mi sono incartato nell'individuare questo secondo punto.
Parto dalle 12.00 cioè quando ho la lancetta esattamente verticale. Ragionando matematicamente la lancetta si deve muore di 6° ogni secondo (infatto se 360° vengono persorsi in 60 secondi, allora in un secondo verranno percorsi 6°). Matematicamente quindi il nostro punto al secondo 2 sarà dato dal seno di 6° con le opportune operazioni sulle coordinate. Solo che non posso poi specificare delle coordinate real per la funzione LINE(X1,Y1,X2,Y2).
Come posso fare a conciliare i real con le coordinate? Avete dei consigli?
Grazie comunque
Saluti

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:53
Domenica, 07/02/2010
Ciao!

Il tuo ragionamento è giusto,ma tieni presente che il senso di rotazione delle lancette dell' orologio è appunto orario, mentre quello delle funzioni trigonometriche è anti orario.

Quindi le coordinate del secondo punto saranno:

x=RaggioLancetta*coseno(90°-alfa)
y=RaggioLancetta*seno(90°-alfa)

(Ricorda inoltre che, per le funzioni trigonometriche, devi usare gli angoli espressi in radianti).

Per quanto riguarda la trasformazione delle variabili real in integer, basta usare la funzione "round( <VaribileReal> );"

Esempio di utilizzo:

Codice sorgente - presumibilmente Delphi

  1. program EsempioRound;
  2.  
  3.  uses crt;
  4.  
  5. begin
  6.   Writeln(1.4, ' rounds to ', Round(1.4));
  7.   Writeln(1.5, ' rounds to ', Round(1.5));
  8.   Writeln(-1.4, ' rounds to ', Round(-1.4));
  9.   Writeln(-1.5, ' rounds to ', Round(-1.5));
  10.   readln;
  11. end.



Io da poco ho appena pubblicato un programma simile, anche se un po macchinoso!
Tu che ne pensi?

Ultima modifica effettuata da Poggi Marco il 07/02/2010 alle 20:56
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 13:42
Lunedì, 08/02/2010
ciao! intanto grazie mille dell'aiuto.
Ho visto il tuo programmino sul sito e non mi sembrava vero! Infatti avevo proprio ieri in mente di provare a fare questo orologio quando ho visto sul sito il tuo programma. Veramente molto bello anche se come dicevi un po' macchinoso almeno per me. Infatti quando ho visto la struttura del codice sinceramente mi sono perso. Infatti non ho conoscenze approfondite di pascal quindi sono ancora ancorato alle operazioni semplici come punti rette e cerchi.
Essendo in tema, come faccio a richiamare in pascal l'orario del computer?
Grazie mille comunque.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:59
Lunedì, 08/02/2010
Innanzitutto grazie per aver visionato il mio programma.
Ti assicuro però che non è nulla di trascendentale, scusa se lo trovi complicato, avrei dovuto commentarlo.
Per capirne di più leggi questo tutorial sulle unità in pascal: http://www.pierotofy.it/pages/guide/Guida_Pascal/Scrivere_ ....


Per quanto riguarda l' orario, basta richiamare la procedura GetTime, facente parte della libbreria dos.
Essa richiede 4 varibili (necessariamente di tipo word), nelle quali salva rispettivamente   l' ora, il minuto, il secondo e nell' ultima il centesimo di secondo.

Riporto un semplice programma dimostrativo:

Codice sorgente - presumibilmente Delphi

  1. program EsempioOraLocale;
  2.  
  3. uses dos, crt;
  4.  
  5. var
  6.   h, m, s, hund : Word;
  7.  
  8. function LeadingZero(w : Word) : String;
  9. var
  10.   s : String;
  11. begin
  12.   Str(w:2, s);
  13.   LeadingZero := s;
  14. end;
  15.  
  16. begin
  17.   GetTime(h,m,s,hund);
  18.   Writeln('It is now ',LeadingZero(h),':',
  19.           LeadingZero(m),':',LeadingZero(s),
  20.           '.',LeadingZero(hund));
  21.   readln;
  22. end.

  


Ultima modifica effettuata da Poggi Marco il 11/02/2010 alle 18:48
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:52
Lunedì, 01/03/2010
Scusate l'intrusione nella discussione..ma dato che parlate di graph..avrei bisogno di sapere come avere la libreria graph in fpc..uso ubuntu 9.04..ho provato a scaricare la versione 2.4.0-2..ma purtroppo non va..la libreria è mancante..mi potete suggerire qualche alternativa o un modo per risolvere? avevo pensato di utilizzare le opengl..però sono ancora un niubbo (è da solo due mesi che nel weekend mi dedico al pascal) e quindi non credo che sia un ottima idea iniziare con qualcosa di già abbaastanza complesso..

grazie dell'aiuto

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:31
Lunedì, 01/03/2010
Davvero molto strano!
A me non è mai capitata una cosa simile.
Prova a postare qualche programma, magari l' errore è nel codice.

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 17:44
Mercoledì, 03/03/2010
Prova a guardare il file  graph.ppu è stato installato in una cartella diversa da quella dove il compilatore cerca le unit

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 2:01
Giovedì, 04/03/2010
Ho aggiunto i repositories di testing da Debian e con la versione 2.4.0-2 di fpc sono anche disponibili tutte le normali librerie..grazie comunque :D ..ora avrei un altro problema..ho postato qui:

http://www.pierotofy.it/pages/extras/forum/71/82764-cross_ ...

PM Quote