processing.4

26 settembre, 2007

Progressi nell’applet (grazie Luca!!!). Ora si che è generativo…. Manca di risolvere l’aspetto dell’intersezione (e ovviamente l’aspetto grafico….), soprattutto di far in modo che non si veda lo sfondo dove le bolle si incontrano.
Il codice.

Sto iniziando a perdermi…
Allora, ho preso la strada suggeritami di disegnare direttamente l’arco di cerchio tra le due bolle. E’ andato tutto bene fino al punto di trovare le coordinate del centro di questo cerchio (D). Ho chiesto aiuto, come al solito, ma inserendolo nell’applet o mi viene sempre coordinata zero, oppure addirittura NaN.
Ho l’impressione di esserci molto vicino e di essermi persa in un bicchier d’acqua. Devo trovare le coordinate di questo punto (D) sapendo l’equazione della retta e la sua distanza da un altro punto che giace sulla stessa retta (B) ma con le formule che mi hanno dato non riesco a ottenere il risultato giusto…..   😦
Il codice allo stato attuale.

qualcosa su cui riflettere

17 settembre, 2007

Avevo chiesto aiuto di nuovo a Gian Marco Todesco per il mio scoglio matematico. Ecco la risposta:

Io farei in un altro modo:
Se non ho capito male vogliamo costruire la configurazione a due bolle nel caso in cui i raggi siano diversi. Il diaframma fra le bolle e’ quindi un arco di cerchio che unisce internamente i due punti di contatto.
Supponiamo come al solito di mettere i centro delle due bolle in A e B. Supponiamo che C sia il punto di contatto superiore. Sappiamo che l’angolo ACB deve essere di 60 gradi. Il punto C’, ottenuto riflettendo C rispetto alla retta che passa per AB, e’ il punto di contatto inferiore.
Il nostro disegno sara’ quindi composto da tre archi di cerchio che uniscono C con C’. I centri dei tre cerchi saranno A,B e D (e il problema e’ dove mettere D). Per simmetria D giace sulla retta che passa per AB.
Se supponiamo (senza perdita di generalita’) che la bolla centrata in B sia piu’ piccola di quella centrata in A allora l’arco che separa le due bolle avrà la concavita’ verso B. Quindi il punto B si trovera’ fra A e D.
A questo punto basta trovare la distanza BD per poter disegnare tutto lo schema.
Usando il teorema dei seni si triangoli ABC e BCD si trova abbastanza facilmente che

BD = AB * sin(CAB)/sin(60-CAB)

Dalla formula si vede che quando CAB diventa 60 gradi il punto D si allontana all’infinito e in effetti con quell’angolo le bolle sono uguali e l’arco che le separa degenera in un segmento.
Si vede anche che quando CAB va a 0 D coincide con B. Anche questo e’ corretto visto che la seconda bolla sta sparendo.
Scrivendo il programma bisogna ricordarsi che c’e’ una relazione fra i raggi dei cerchi e la distanza AB. Un modo per tenerne conto e’ considerare AB e CAB le variabili indipendenti. Da queste due si ricavano le posizioni di C,C’ e D.
A questo punto si puo’ tenere fissato AB e far variare CAB in ]0,60[
Questo mi sembra il modo piu’ semplice di affrontare il problema.

Per rispondere invece alla sua domanda (come trovare il coefficiente angolare di una retta bisettrice di due rette date) le consiglierei di non utilizzare per le rette la forma y=mx+q che in questi casi e’ scomoda. E’ molto meglio la notazione parametrica che rappresenta una
retta con l’equazione P(t) = A + ut, dove A = (Ax,Ay) e u=(ux,uy) sono due vettori e t e’ un numero reale.
Se A+ut e A+vt sono due rette che passano per A e u e v sono normalizzati (cioe’ hanno norma unitaria: ux^2+uy^2=vx^2+vy^2=1) allora la retta bisettrice e’ semplicemente A+(u+v)t

scoglio matematico

15 settembre, 2007

La giornata passata sulle formule non ha dato grandi risultati e i consigli sul forum neanche. La prima formula che mi hanno consigliato non posso usarla perchè ho un valore negativo che mi porta ad avere un denominatore = 0 e quindi non ottengo nessun valore.
La seconda cosa che mi hanno detto è che il valore del coefficiente della seconda retta, quello che sto cercando è = tan (arctan (m)+30)
In pratica, è la tangente dell’angolo della prima retta + 30°. Solo che non avendo io l’angolo della prima retta, ma solo il suo m lo esprimo con arctan (m), che è la funzione inversa della tangente….
Sembra tutto chiaro, peccato che il risultato non è quello sperato…..
Dove sarà l’errore? (il codice)

processing.2

15 settembre, 2007

Per risolvere l’intersezione delle tre bolle:
cambio di logica nel disegno della linea d’intersezione, in maniera da generalizzare il problema, partendo dalle due bolle e di conseguenza anche per tre.
Una volta intersecati i due cerchi, invece di disegnare il segmento che collega i due punti di intersezione (A e B), disegno due segmenti.
Questi segmenti li disegno definendo la retta che passa per A (e poi quella che passa per B) e divide a metà l’angolo di 120° che si forma tra i due archi (dunque la bisettrice).
Da questi due segmenti trovo un punto (E). Nel caso in cui ho l’intersezione di due bolle identiche, queste due rette dovrebbero coincidere e darmi un segmento unico. Nel caso di due bolle diverse dovrei ottenere una linea spezzata che andrebbe poi disegnata come un arco di cerchio. In questo modo il sistema sarebbe più verosimile perchè in effetti, a causa della pressione interna della bolla, la parete di sapone che divide le due bolle, è perpendicolare solo quando ho due bolle identiche. Negli altri casi la bolla più piccola mantiene una curvatura.
Ora, per fare tutto questo, intanto abbiamo trovato la retta che passa per il centro del cerchio (cA.x , cA.y) e per il punto A (paX , paY), cioè quella su cui sta il raggio del cerchio.
Ora, modificando il coefficente angolare di questa retta, posso trovare la sua perpendicolare che passa per A, cioè la tangente (facendo m = -1/m). Da questa, spero di riuscire a trovare la bisettrice dell’angolo di 120°. Ora, vado alla ricerca di come poter esprimere direttamente la bisettrice, modificando il coefficente angolare della retta s (cioè il raggio del cerchio). Infatti, rispetto a quella, la bisettrice è ruotata di 90°+60°=150°
Ecco il codice per ora
e un disegno per rendere tutto più chiaro

cerchi_2.jpg