Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Algoritmi - Algoritmo per accorciare una linea
Forum - Algoritmi - Algoritmo per accorciare una linea

Avatar
edo42 (Member)
Pro


Messaggi: 102
Iscritto: 30/07/2009

Segnala al moderatore
Postato alle 7:08
Domenica, 16/01/2011
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:

PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
2
Down
V
Segnala al moderatore
Postato alle 14:59
Domenica, 16/01/2011
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.





PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 8:55
Domenica, 16/01/2011
Ciao!

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

Devi mentenere invariata anche la direzione del segmento?

PM
Avatar
edo42 (Member)
Pro


Messaggi: 102
Iscritto: 30/07/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 9:14
Domenica, 16/01/2011
Si, quello lo avevo già implementato. Grazie comunque.
Si, devo mantenere invariata la direzione.

PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 12:18
Domenica, 16/01/2011
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.

PM
Avatar
edo42 (Member)
Pro


Messaggi: 102
Iscritto: 30/07/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 12:39
Domenica, 16/01/2011
Dato che vado in 3a media, mi potresti fare un esempietto, anche in pseudocodice.

PM
Avatar
edo42 (Member)
Pro


Messaggi: 102
Iscritto: 30/07/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 13:19
Lunedì, 17/01/2011
Ma quindi dove inserisco la lunghezza che voglio?

PM
Avatar
edo42 (Member)
Pro


Messaggi: 102
Iscritto: 30/07/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 13:37
Lunedì, 17/01/2011
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#

  1. CGPoint start[255];
  2. CGPoint end[255];
  3.  
  4. double m = (start[index].y-end[index].y)/(start[index].x-end[index].x);
  5. double distanza = pow(10,2) + pow((10*m),2);
  6. double x = pow((pow(distanza,2)/pow((1+m),2)),0.5);
  7. double y=m*x;
  8. end[index] = CGPointMake(x+start[index].x, y+start[index].y);


PM