Ho preparato uno script di base..
Lo script crea un box in cui viene poi disegnato il grafico secondo i valori indicati.
Dovrai giusto mettere due campi di testo sullo stage e nominarli rispettivamente: 'freq' e 'volt'
Ovviamente potrebbe essere perfezionato.
Infatti tieni conto che l'andamento dell'onda non l'ho calcolato con un tempo reale ma è rallentato ed in oltre è relativo alla frequenza dei fotogrammi impostata nel filmato perché ho adoperato una semplice variabile che viene incrementata in un evento onEnterFrame, quindi senza ricalcolare il tempo.
Ti consiglio comunque di impostare la frequenza fotogrammi almeno a 30..
Inoltre.. l'andamento della linea perde di definizione per valori della frequenza maggiori di 30, perché i punti dell'interpolazione sono calcolati singolarmente per ogni ricorrenza dell'enterFrame.
Per avere una maggiore definizione bisognerebbe calcolare, attraverso un ciclo, delle serie di punti per ogni enterFrame anziché singoli punti.
Comunque sia è già qualcosa se ancora non hai trovato nient'altro:
Codice PHP:
// valori iniziali
var f:Number = 1;
var v:Number = 40;
var t:Number = 0;
freq.text = f;
volt.text = v;
// dimensioni grafico
var gw:Number = 450;
var gh:Number = 200;
// posizione grafico
var gx:Number = 50;
var gy:Number = 100;
// aggiornamento valori
var aggiorna = function () {
f = freq.text;
v = volt.text;
};
var key:Object = new Object();
key.onKeyDown = function() {
if (Key.getCode() == 13) {
aggiorna();
}
};
Key.addListener(key);
freq.onKillFocus = volt.onKillFocus=aggiorna;
// creo contenitore per il grafico
_root.createEmptyMovieClip('grafico', 0);
grafico.createEmptyMovieClip('monitor', 100);
with (grafico) {
beginFill(0xeeeeee);
lineStyle(0, 0xaaaaaa);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 100);
lineTo(0, 100);
lineTo(0, 0);
endFill();
moveTo(0, 50);
lineTo(100, 50);
_x = gx;
_y = gy;
_width = gw;
_height = gh;
monitor._y = 50;
}
// reset del grafico
var reset = function () {
with (grafico.monitor) {
clear();
lineStyle(0, 0xff0000, 70);
moveTo(0, 0);
}
};
reset();
// aggiorno il grafico
_root.onEnterFrame = function() {
var p:Number = Math.sin(t/100*(f*2)*Math.PI)*(v/2);
grafico.monitor.lineTo(t, p);
t += .5;
(t>(t %= 100)) && reset();
};