Oppure

Loading
16/01/11 6:08
edo42
Mi sono tanto scervellato ma proprio non riesco a risolvere questo problema:
Ho una linea sul piano cartesiano (sul quadrante che usa quartz per intenderci), so la sua origine, la sua fine e la sua lunghezza ovviamente. Devo modificare la sua lunghezza mantenedo fisso il punto di partenza. Non riesco a capire come creare un algoritmo del genere. Mi va bene anche pseudo codice... :rotfl:
aaa
16/01/11 7:55
Poggi Marco
Ciao!

Ho letto il tuo quesito, posso sugerirti di utilizzare la formula per calcolare la distanza tra due punti. (Vedi itg-rondani.it/dida/Matem/ipermonica/retta_par/retta/…)

Devi mentenere invariata anche la direzione del segmento?
aaa
16/01/11 8:14
edo42
Si, quello lo avevo già implementato. Grazie comunque.
Si, devo mantenere invariata la direzione.
aaa
16/01/11 11:18
Poggi Marco
Per semplificare le cose, sposta l' origine degli assi al punto d' inizio del segmento.

In questo modo, calcola li coefficente angolare del segmento.
Quindi applica la formule per la distanza per calcolare le nuove coordinate del punto.
aaa
16/01/11 11:39
edo42
Dato che vado in 3a media, mi potresti fare un esempietto, anche in pseudocodice.
aaa
16/01/11 13:59
Poggi Marco
Considero un segmento avente gli estremi p1(x0, y0) e p2(xf, yf)

Passo 1:

Calcolo il coefficiente angolare: m=(y0-yf)/(x0-xf)
(vedi it.wikipedia.org/wiki/…)

passo 2:

considero l' origine degli assi nel punto p1, quindi dal teorema di Pitagora ho

Distanza^2=x^2 + (x*m)^2, dalla quale ricavo l' ascissa
< x=[distanza^2/(1+m)^2]^0.5 >
e l' ordinata:
< y=m*x >

passo 3:

Calcolo le coordinate finali sommando p1 alle coordinate calcolate in precedenza.




aaa
17/01/11 12:19
edo42
Ma quindi dove inserisco la lunghezza che voglio?
aaa
17/01/11 12:37
edo42
io ho fatto qualche prova e scritto un po' di codice ma non riesco a capire come fare andare il tutto:
Start e and sono due array da cui prendo tutte le linee che devo accorciare, sono inizializzati correttamente. 10 è un esempio di lunghezza che io devo impostare. Vengono nel debugger un macello di numeri negativi, che poi alla fine risultano con rette che finiscono fuori dallo schermo...

CGPoint start[255];
CGPoint end[255];

double m = (start[index].y-end[index].y)/(start[index].x-end[index].x);
double distanza = pow(10,2) + pow((10*m),2);
double x = pow((pow(distanza,2)/pow((1+m),2)),0.5);
double y=m*x;
end[index] = CGPointMake(x+start[index].x, y+start[index].y);
aaa