Newsgroup: it.comp.lang.c++
Titolo: [1/2ot] trigonometria & co

salve a tutti.
vi sto per chiedere quacosa di OT, ma in realtà la domanda è se esiste la
libreria in C++ che puo' semplificarmi la vita. :)
ho la necessità di generare delle onde (sinusoidali, quadrate, a dente di sega
e triangolari) per varie cose (generare suoni, controllare dei controller MIDI
(scusate il gioco di parole)).
non conosco la trigonometria (prima o poi la studierò, ma ora sinceramente non
mi va di affrontare il problema, sono concentrato su altro). per fare quello
che mi serve devo come minimo conoscere un po' di trigonometria per calcolare
il seno per disegnare il sinusoide che mi serve, e l'interpolazione lineare
per il resto. ma vale la pena sbattermi tanto? (la risposta è si, ma per ora è
no.)
è possibile realizzare una classe (o se già esiste ditemi dove! :)) per
disegnare un sinusoide dati i parametri ampiezza, frequenza e scala(non so se
è il termine esatto. insomma il range di valori che deve riempire. es generare
un sinusoide che oscilla tra 0 e 255, o da +1.0f a -1.0f)?
è conveniente? (nel senso che comporta uno spreco di calcolo notevole, tanto
che conviene usare le funzioni sin()&co nude e crude)?
scusate se (probabilmente) sono stato poco chiaro e ho usato termini inadatti,
ma sto parlando di quello che voglio capire, e... ancora non capisco^__^.
grazie
ciao["xaero"];

 (scusate il gioco di parole)).
sei troppo ot ved de trovà un gruppo più idoneo al tuo problema
questo ot è intollerabile

 ha scritto nel messaggio
news:r%st7.11408$C15.1...@news.infostrada.it...

sono stati sufficienti 457 minuti della tua 'permanenza' su questo gruppo per
capire che tipo sei e che è necessario plonkarti.
non ho altro da aggiungere.
*PLONK!*
--


il solito troll che vole fa quello che je pare su un newsgroup
leggi il manifesto prima e magari datte na scorta alla netiquette
Maleducato!!!!!

 un sinusoide che oscilla tra 0 e 255, o da +1.0f a -1.0f)?
Beh certo che e' possibile.
Per quanto riguarda il tuo problema, dato che sin(x) oscilla tra -1 e 1
e accetta argomenti in radianti (cioe' tra 0 e 2*pi), basta riscalare
opportunamente l'output e i parametri di ingresso. Per esempio, credo
che se tu cerchi una funzione che faccia un periodo completo tra 0 e a,
e oscilli tra -M e M come il seno, basta che tu calcoli M*sin(2*pi*x/a).
Tutto questo tra tradurre in C (e C++). E la cosa si puo' anche
complicare, con una fase per esempio.
Pero' secondo me un po' di trigonometria te la devi studiare :-)
Saluti.

Maleducato!!!!!
Non penso che xaero sia un troll visto che partecipa al ng da molto
tempo senza aver mai creato problemi.
Comunque non penso che la domanda sia troppo OT e se lo è basterebbe
rispondergli educatamente di spostarsi su un altro gruppo.
E tu perché non parli in italiano?
-- 
Marco Barisione (ICQ 84277092)
Su it.news.gruppi si sta discutendo della creazione di it.comp.lang
dove si parlerà dei linguaggi senza un proprio newsgroup e dei
confronti fra i diversi linguaggi.
Se sei interessato unisciti alla discussione.

libreria in C++ che puo' semplificarmi la vita. :)
Il tuo problema non concerne prettamente il C++, per cui, in
realta', sei OT.  Anche se esistesse una libreria del
genere, sarebbe legata all'interfaccia grafica utilizzata,
quindi ti consiglio di rivolgerti ad un gruppo piu'
specializzato.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it

 specializzato.
scusa cosa c'entra l'interfaccia grafica?
la (ipotetica) libreria che cerco, deve semplicemente riempirmi un buffer di
float, con un sinusoide, di cui io decido i parametri: ampiezza (smpre da -1.0
a +1.0) e frequenza (e devo in qualche modo sapere quanto è lungo un periodo,
in campioni), oppure più semplicemente riempire un buffer con 1 periodo del
sinusoide, e ritornarmi la lunghezza del periodo, e poi ci penso io a
'loop-arlo' fino a riempire il mio buffer.
questo è quello che mi serve, e non vedo per quale motivo dovrebbe essere
legato all'interfaccia grafica.
certo, poi lo utilizzerò per generare suoni, disegnare sinusoidi, o fare
altro, ma lo farò leggendo i valori da quel buffer, che altro non è che un
array di float.
scusa se ho frainteso quello che volevi dire...
ciao :: xaero

 E tu perché non parli in italiano?
che lingua era?
Usare parole colorite ma perfettamente intuibili non è italiano ?
l'umorismo è bandito dal newsgroup ?
prima di difendere i tuoi amichetti leggi i post e cerca di capirne i
contenuti ..

scusa cosa c'entra l'interfaccia grafica?
"è possibile realizzare una classe (o se già esiste ditemi
dove! :)) per disegnare un sinusoide dati i parametri
ampiezza, frequenza e scala" [xaero].


 (scusate il gioco di parole)).
beh...
a quel che ne so io la soluzione migliore non e' quella di calcolare
ogni volta i valori delle varie funzioni, quanto piuttosto di tabellare
i valori e poi pescarli dalla tabella.
A questo punto, e questo ci porta pure piu' IT, la domanda diventa:
Qual'e' il modo migliore (prestazionalmente, dimensionalmente, per
comodita' d'uso) e  conforme allo standard per tabellare delle funzioni
tipo SIN COS SAW QUAD ecc ?
(La trigonometria studiala!!! :-))
--
Gerolamo

 scusa cosa c'entra l'interfaccia grafica?
Sbaglio o la seguente questa frase e' tua?
[snip]
è possibile realizzare una classe (o se già esiste ditemi dove! :)) per
disegnare un sinusoide dati i parametri ampiezza, frequenza e scala
[snip]
cosa intendi con il verbo "disegnare" ?
Ciao
Gaetano.
-- 
Posted from 
dell-01.mm.eutelsat.org
 [194.214.173.17] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 libreria in C++ che puo' semplificarmi la vita. :)
[cut]
a me non sembra che questa domanda sia OT; la richiesta e' pur sempre una 
possibile implementazione di un algoritmo (anche se non "ortodosso"). Data 
la natura della domanda mi pare di capire che le difficolta' non siano 
quelle di disegnare la curva (domanda che sarebbe OT) ma quelle di 
calcolare le coordinate dell'onda (e questo puo' essere IT).
La definizione matematica di onda e' questa:
f(t) = A * sin(w*t + fi)
Dove t e' il tempo, A l'ampiezza massima, w (in teoria la greca omega) la 
pulsazione e fi lo sfasamento (questo non e' il ng adatto per approfondire 
il significato dei singoli termini); f(t) indica l'ampiezza dell'onda 
all'istante t.
Detto questo e' banale fornire l'implementazione in C++:
#include <cmath>
class Onda {
  double A, w, fi;
public:
  Onda(double AA, double ww=1, double f=0): A(AA), w(ww), fi(f) {}
  double operator() (double t) { return A* std::sin(w*t + fi); }
};
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 cosa intendi con il verbo "disegnare" ?
ops! ho detto disegnare, ma intendevo  riempire il buffer di dati.
scusate.


[cut]
grazie
mi potresti dire (se non è ot) dove trovo un'implementazione in C++ di una
routine per l'interpolazione lineare (versione float)?
grazie
ciao :: xaero

> ti puo' campione/tick/spazio,
ti puo' rappresentare anche campione/tick/spazio, [...]

 ciao :: xaero
Dati due punti di coordinate (x0, y0) e (x1, y1)
la retta che passa per questi due punti e data da
(x - x0) / (x1- x0) = (y - y0)  / (y1 -y0)
e se espliciti rispetto a x ottieni:
x =  ( ( y - y0) * ( x1 - x0 ) / ( y1 - y0 ) ) + x0
attento che nel caso di ( y1 = y0  = yk) la retta e'
invece rappresentata da:
y = yk.
Visto che non sei a 0 di C++ non dovresti avere nessuna difficolta'
ad implementare l'algoritmo di interpolazione (conoscendo gli ultimi
due punti della serie) lineare.
La matematica studiala (ma quanti anni hai, se e' possibile saperlo?).
Ciao
Gaetano


 due punti della serie) lineare.
Non so se ho capito bene, ma tu dici di tirare una retta tra il primo e
l'ultimo punto della serie per ottenere una retta interpolante? Se e'
cosi' non credo che questo sia il modo corretto di procedere.
Se vuoi avere una retta interpolante e' meglio usare il metodo dei
minimi quadrati, che comunque non e' difficile da implementare, anche se
un po' piu' complesso del metodo che hai proposto tu ;-)
-- 
"A pensar male si pecca, ma spesso ci s'azzecca..."
Saluti 	 		      << Linux Powered >>			 
LIBRA               e-mail: metti "libero" al posto di "NOSPAM"  

 un po' piu' complesso del metodo che hai proposto tu ;-)
Diciamo che il mio metodo e' un sottoinsieme.
Se hai N punti e la retta:
y = ax +b
devi risolvere un sistema di N equazioni e 2 incognite ( a, b )
(con N >= 2 si spera), a questo punto te la cavi con
una pseudo-inversa ( la matrice e' infatti rettangolare).
per N = 2 ottieni quello che ti avevo detto io.
Ciao
Gaetano.


 contenuti ..
L'umorismo non č bandito, ma puň essere frainteso; nel tuo caso suonava
come una presa in giro, piů che un colorito consiglio. Forse se avessi
aggiunto qualche smiley non ci sarebbero state incomprensioni.
Ciao,
Cecco

 routine per l'interpolazione lineare (versione float)?
se sapessi cosa e' l'interpolazione lineare... (posso immaginare, ma in 
ogni caso non so quali sono i termini della questione).
