edo42 (Member)
Pro
Messaggi: 102
Iscritto: 30/07/2009
|
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...
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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 http://it.wikipedia.org/wiki/Coefficiente_angolare)
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.
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
|
|
edo42 (Member)
Pro
Messaggi: 102
Iscritto: 30/07/2009
|
Si, quello lo avevo già implementato. Grazie comunque.
Si, devo mantenere invariata la direzione.
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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.
|
|
edo42 (Member)
Pro
Messaggi: 102
Iscritto: 30/07/2009
|
Dato che vado in 3a media, mi potresti fare un esempietto, anche in pseudocodice.
|
|
edo42 (Member)
Pro
Messaggi: 102
Iscritto: 30/07/2009
|
Ma quindi dove inserisco la lunghezza che voglio?
|
|
edo42 (Member)
Pro
Messaggi: 102
Iscritto: 30/07/2009
|
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...
Codice sorgente - presumibilmente C# |
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);
|
|
|