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 - sinusoide
Forum - Pascal - sinusoide

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 22:13
Venerdì, 18/11/2011
Ciao a tutti stavo pensando di fare un programma con tanto di grafica che rappresenti un moto armonico, mi spiego meglio: a scuola abbiamo studiato che il moto armonico è la proiezione di un punto che gira in una circonferenza su un diametro e se il tutto viene illuminato con dei proiettori e l'ombra va su una pellicola si formerà una sinusoide... volevo provare a farlo in pascal ma non ho la più pallida idea di come poter fare a farlo... qualcuno che mi possa dare un idea?
se non avete capito il pezzo sopra ecco un immagine:
http://fisicaondemusica.unimore.it/250px_V_t_armonico.png
un esempio di quello che vorrei fare si vede in questa immagine (intendo con anche il movimento): http://fisicaondemusica.unimore.it/Trigonometria_animata.gif

Ultima modifica effettuata da luca95 il 18/11/2011 alle 22:13
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:05
Venerdì, 18/11/2011
Ciao!

In Pascal, è possibile disegnare semplici grafici.
In questo sito c' è un esempio: http://www.pierotofy.it/pages/guide/Guida_Pascal/Appendice ...
Da principio comincia semplicemente ad aprire e chiudere la modalità grafica.

PM Quote
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 18:29
Sabato, 19/11/2011
con la grafica ci so già lavorare è che volevo provare a fare qualcosa di più complesso... e questa mi sembrava una bella cosa tutto qui :)

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:46
Sabato, 19/11/2011
Vuoi dare l' illusione del movimento?
In questo caso disegna una figura, sovrascrivila usando lo stesso colore dello sfondo, ed infine la ridisegni in un' altra posizione.

PM Quote
Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 23:13
Sabato, 19/11/2011
nn so se ho capito la domanda, ti mando il programma che ho fatto e mi dici se è di questo tipo, poi fammi tutte le domande del caso:
uses graph,wincrt;
const r= 100;
var a,b:smallint;
i,x1,y1,k1:REAL;
k,yr,xr,nk,u,ang:INTEGER;
n:string;
c_1,c_2,delta_x,delta_y,delta,xp,yp,coef_1,coef_2:real;
x,y:array[0..10]of real;
procedure negativa;
begin
c_1:=(-coef_1*x[0]+y[0]);
c_2:=(-coef_2*x[0]+y[0]+r*sqrt(coef_2*coef_2+1));
delta:=(coef_2-coef_1);
delta_x:=(c_1-c_2);
delta_y:=(coef_2*c_1)-(coef_1*c_2);
xp:=delta_x/delta;
yp:=delta_y/delta;
setcolor(blue);
//line(trunc(x[0]),trunc(y[0]),trunc(xp),trunc(yp));
setcolor(trunc(k1));
//setfillstyle(1,trunc(k1));
fillellipse(trunc(xp),trunc(yp),trunc(k1)div 3,trunc(k1)div 2);
delay(50);
end;
procedure positiva;
begin
setcolor(blue);
c_1:=(-coef_1*x[0]+y[0]);
c_2:=(-coef_2*x[0]+y[0]-r*sqrt(coef_2*coef_2+1));
delta:=(coef_2-coef_1);
delta_x:=(c_1-c_2);
delta_y:=(coef_2*c_1)-(coef_1*c_2);
xp:=delta_x/delta;
yp:=delta_y/delta;
//line(trunc(x[0]),trunc(y[0]),trunc(xp),trunc(yp));
setcolor(trunc(k1));
//setfillstyle(1,trunc(k1));
fillellipse(trunc(xp),trunc(yp),trunc(k1)div 3,trunc(k1)div 2);
delay(50);
end;
begin
a:=detect;
initgraph(a,b,'');
xr:=(getmaxx div 2);
yr:=(getmaxy div 2);
x[0]:=(getmaxx div 2);
y[0]:=(getmaxy div 2);
i:=0;
//circle(trunc(x[0]),trunc(y[0]),r);
i:=2;
repeat
//circle(trunc(x[0]),trunc(y[0]),r);
if i>=14.4 then begin i:=2;x[1]:=0;y[1]:=0;xp:=0;yp:=0;end;
i:=(i+0.2); writeln(i);
k1:=k1+0.2;
setcolor(white);
x[1]:= ((x[0])*cos(i)-y[0]*sin(i));
y[1]:= ((x[0])*sin(i)+y[0]*cos(i));
coef_1:= (y[0]-y[1])/(x[0]-x[1]);
coef_2:=-1*(x[0]-x[1])/(y[0]-y[1]);
if(i<=8.6)then negativa;
if(i>8.6) then positiva;
if(trunc(k1)>=260)then k1:=0;
until keypressed;
closegraph;
end.
probabilmente ci saranno un po di variabili che nn sono state usate ma nn ci fare caso.

PM Quote
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 16:57
Domenica, 20/11/2011
devo dire che è un bel programma però forse mi sono spiegato io ma non è proprio quello di cui avevo bisogno... a me servirebbe una circonferenza di fondo su cui farci girare un'altro tondino più piccolo come hai fatto tu ma senza far ingrandire ogni volta la dimensione del tondino e senza far rimanere tutti i tondini disegnati ma deve vedersene uno solo... sostanzialmente il mio serio problema è come trovare i punti della circonferenza sui quali impostare il centro dei tondini più piccoli... probabilmente nel programma che mi hai postato lo hai fatto perché giravano in cerchio ma non capisco quale sia la parte :)

PM Quote
Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 23:45
Domenica, 20/11/2011
il mio programma funziona come quello che vuoi fare tu, solo che l'ho modificato per renderlo + bello.
comunque il procedimento che ho seguito è quello che devi applicare tu per risolvere il programma:

1) determini il centro della circonferenza x,y e lo fai ruotare utilizzando il seno e il coseno:
Codice sorgente - presumibilmente Plain Text

  1. x_ruotato:=x*cos(ang)-y*sin(ang); y_ruotato:=x*sin(ang)+y*cos(ang);



2) a questo punto ti calcoli le rette passanti per il punto ruotato                       P(x_ruotato,y_ruotato); e per il centro della circonferenza(x,y); dopo fai passare una retta perpendicolare a quella ruotata per il centro(x,y)

3) a questo devi cercare una retta parallela alla perpendicolare appena trovata con uguale ddistanza dal raggio utilizzando la formula della distanza punto retta
Attenzione! perchè applicando questa formula trovi 2 rette.

4) trovate le due rette eqidistanti dal centro le intersechi con la retta perpendicolare loro passante per il centro. per risolvere il sistema ti consiglio di usare Cramer.

Ovviamente ti basta trovare i coefficenti angolari delle rette per implementare tutti i calcoli nel programma. Probabilmente non sono ancora stato abbastanza chiaro così domani ti posto un foglio in cui spiego passo a passo cosa ho fatto nel programma!  

PM Quote
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 21:07
Lunedì, 21/11/2011
allora aspetto il tuo foglio :) grazie mille per l'aiuto che mi stai dando :)

PM Quote
Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 0:26
Martedì, 22/11/2011

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo