Pagina 1 di 2

coordinate di un punto su una retta

MessaggioInviato: 17/09/2007, 13:42
da kymala
Se io ho l'equazione di una retta, e le coordinate di due punti (A e B) che si trovano su questa retta. Devo trovare le coordinate del punto D, che si trova anch'egli sulla stessa retta, sapendo la distanza BD. Come faccio?

MessaggioInviato: 17/09/2007, 14:39
da gygabyte017
Supponendo che la retta abbia equazione $y=f(x)$. se il punto $D$ appartiene alla retta, avrà cordinate $D(x_0,f(x_0))$. Il punto B lo conosci, e ha coordinate $B(b,f(b))$ (li metto tutti generici perchè tu non hai detto quali sono!)

La distanza BD è: $BD=sqrt((D_y-B_y)^2+(D_x-B_x)^2)=sqrt((f(x_0)-f(b))^2+(x_0-b)^2)$

Quindi ottieni l'equazione $BD^2 =(f(x_0)-f(b))^2+(x_0-b)^2$ dove conosci già $b$, $BD$, e $f(x)$. Hai come unica incognita $x_0$. Risolvila e hai il risultato.

Ciao!

MessaggioInviato: 17/09/2007, 14:42
da The borg
scrivi il punto come (x; y=mx+q) così hai solo la x come incognita fai distanza A D uguale alla distanza punto A D con la formula...

MessaggioInviato: 17/09/2007, 15:57
da kymala
scusate ma....non mi riesce proprio.... E' che ho tutti valori generici perchè si tratta di un programma in java...dunque, ho provato a scrivere la formula scrivendo il punto D come (x, mx+q) ma forse poi ho sbagliato a risolverla perchè mi viene sempre x=0
Come dovrebbe venire la x?

MessaggioInviato: 17/09/2007, 16:08
da gygabyte017
Beh potrebbe essere... Metti caso che la retta è $y=x$, il punto $B(1,1)$ e $BD=sqrt2$, allora D può essere anche $D(0,0)$...

Posta magari un pò di codice java così vediamo meglio...

MessaggioInviato: 17/09/2007, 16:19
da kymala
Non so quanto si capisce così...è che sto cercando di creare un'animazione che ricrei la situazione delle bolle di sapone in due dimensioni, dunque l'intersezione di due o tre circonferenze, quando formano degli angoli di 120°. Nella loro intersezione devo disegnare un arco di cerchio. Sono arrivata al punto che mi manca solo questo punto D che sarebbe il centro da cui disegnare l'arco di cerchio che divide le due bolle.

//qui calcolo quanto vale l'angolo nel centro di uno dei due cerchi (A), poi trovo BD
//cioè la distanza dall'altro centro al centro dell'arco di intersezione delle due bolle

float coseno;
float angolo_alpha;
float BD;
float cD_x, cD_y;

coseno = (cA.r*cA.r + rapporto - cB.r*cB.r)/ (2 * cA.r * rapporto);
angolo_alpha = acos (coseno);

BD = (rapporto2 * sin(angolo_alpha)) / sin(60 - angolo_alpha);

//Retta passante per i due centri dei cerchi
float m2,p2;

//qui uso una funzione dichiarata in un'altra parte di codice
m2 = equ_rect_m(cA.x,cA.y,cB.x,cB.y);
p2 = equ_rect_p(cA.x,cA.y,cB.x,cB.y);

//le coordinate del punto B sono cB.x e cB.y
//calcolo le coordinate di D
//cD_x = sqrt (BD*BD - p2*p2 + cB.x*cB.x + cB.y*cB.y) / 2*m2*m2;
cD_x = sqrt (+ p2*p2 - BD*BD + cB.x*cB.x + cB.y*cB.y) / -2*m2*m2;

cD_y = m2*cD_x + p2;

MessaggioInviato: 17/09/2007, 16:46
da gygabyte017
Ho capito che vuoi fare... Dammi un momento per fare i calcoli e ti dico come mi viene (sperando sia giusto)...

Tralascio il fatto che il codice:
Codice:
float coseno;
float angolo_alpha;
float BD;
float cD_x, cD_y;

coseno = (cA.r*cA.r + rapporto - cB.r*cB.r)/ (2 * cA.r * rapporto);
angolo_alpha = acos (coseno);

BD = (rapporto2 * sin(angolo_alpha)) / sin(60 - angolo_alpha);

//Retta passante per i due centri dei cerchi
float m2,p2;

//qui uso una funzione dichiarata in un'altra parte di codice
m2 = equ_rect_m(cA.x,cA.y,cB.x,cB.y);
p2 = equ_rect_p(cA.x,cA.y,cB.x,cB.y);


è giusto fino qui, non sapendo che fanno le funzioni che usi. Ora ti scrivo le funzioni per calcolare cD_x e cD_y...


EDIT: allora, dopo un sacco di calcoli, ecco la soluzione. Innanzitutto ti faccio notare che, dato un punto e una distanza, i possibili punti D sono 2, cioè uno su una parte della retta, e uno sull'altra. Qual'è quello giusto sta a te deciderlo.
Comunque, i due possibili valori sono:

$cD_x = - (sqrt(- (cB.x)^2*(m2)^2 + 2*(cB.x)*(m2)*(cB.y) - (p2) - (cB.y)^2 + 2*(cB.y)*(p2) + (BD)^2*((m2)^2 + 1) - (p2)^2) - cB.x - (m2)*(cB.y) - (p2))/((m2)^2 + 1) $

oppure

$cD_x = (sqrt(- (cB.x)^2*(m2)^2 + 2*(cB.x)*(m2)*(cB.y) - (p2) - (cB.y)^2 + 2*(cB.y)*(p2) + (BD)^2*((m2)^2 + 1) - (p2)^2) + cB.x + (m2)*(cB.y) - (p2))/((m2)^2 + 1) $

e da qui, $cD_y=cD_x*m2+p2$


Spero sia tutto giusto, ciao!

MessaggioInviato: 17/09/2007, 18:02
da kymala
grazie per la pazienza....però...non so perchè ma facendogli stampare il valore di cDx mi dice NaN.....va a sapere cos'ho sbagliato...

MessaggioInviato: 17/09/2007, 18:05
da gygabyte017
kymala ha scritto:grazie per la pazienza....però...non so perchè ma facendogli stampare il valore di cDx mi dice NaN.....va a sapere cos'ho sbagliato...


Se da NaN (Not a Number) al 90% è perchè la radice ha argomento negativo... strano però... prova a fargli stampare l'argomento della radice solo (senza fare la radice e tutto il resto) e vedi se viene un numero negativo...

MessaggioInviato: 17/09/2007, 18:10
da kymala
mi dà infinity e -infinity, nei due casi....