[Gfoss] calcolo linea perpendicolare

salve a tutti, scusate il disturbo ho la necessità di creare la linea perpendicolare di una linea presente sul mio db oracle spatial. In realtà ne vorrei creare tre, 2 che passano sui 2 punti delle linea e una terza che passa sul centroide della linea.
Non sono riuscito a trovare una funzione che lo fà. Potete dirmi qual’è l’algoritmo matematico per favore, così lo scrivo in python o in plsql ? (l’estrazione dei punti iniziali, finali e il centroide non sono un problema)
P.S. la linea perpendicolare dovrebbe essere lunga 50 metri nella maggiorparte dei casi, per alcune eccezioni 30 metri.
Grazie mille a tutti in anticipo
Saluti
Davide

On Sat, 21 Feb 2015 11:27:38 +0100, Davide Petrucci wrote:

Non sono riuscito a trovare una funzione che lo fà. Potete dirmi
qual'è l'algoritmo matematico per favore, così lo scrivo in python o
in plsql ?

http://it.wikipedia.org/wiki/Perpendicolarità

ciao Sandro

Il giorno Sat, 21 Feb 2015 11:27:38 +0100
Davide Petrucci <davide.petrucci78@gmail.com> ha scritto:

salve a tutti,

ciao Davide;

.... scusate il disturbo ho la necessità di creare la linea
perpendicolare di una linea presente sul mio db oracle spatial...

premesso che:
  1) non so se è esattamente quello che vuoi
  2) non posso garantire che non sia bacata
  3) ...
  .) ...
  n-2) non è certamente scritta sufficientemente bene per essere
autodocumentata
  n-1) probabilmente è meglio scriversela da soli piuttosto che ..
  n) ....
  .) ....
  2n) se trovi errori e me li segnali te ne sono grato
  2n+1) idem se la migliori e me lo segnali
  2n+1) .... (*)
sotto trovi una bozza di funzione python per calcolare il piede della
perpendicolare da n0 al segmento n1-n2 (c'è anche se il piede
cade nel segmento o fuori ma a te adesso questo non interessa):

def EdgeNormalFromPoint(n0,n1,n2):
  """
    Calcola il piede della perpendicolare dal punto N0 al
segmento N1-N2;
    f(lag)int indice che il piede è interno o meno al
segmento.
  """
  x0,y0 = n0.x(),n0.y()
  x1,y1 = n1.x(),n1.y()
  x2,y2 = n2.x(),n2.y()
  # calcolo del punto con metodo vettoriale
  dux = x0 - x1
  duy = y0 - y1
  dx = x2 - x1
  dy = y2 - y1
  mw = math.sqrt(dx**2+dy**2)
  a = (dux*dx + duy*dy) / mw
  x = x1 + a*dx/mw
  y = y1 + a*dy/mw
  if (a/mw) >= 0 and (a/mw) <= 1:
    fint = True
  else:
    fint = False
  return fint,x,y

da quì dovresti poter costruire tutto quello che ti serve;

Grazie mille a tutti in anticipo
Saluti
  Davide

ciao,
giuliano

(*) sto leggendo un bel libro di Wallace sui numeri transfiniti di
Cantor: spero ti fiderai sulla parola che il numero delle premesse
potrebbe raggiungere aleph con zero :slight_smile: :slight_smile:

On Sat, Feb 21, 2015 at 11:27:38AM +0100, Davide Petrucci wrote:

salve a tutti, scusate il disturbo ho la necessità di creare la linea
perpendicolare di una linea presente sul mio db oracle spatial. In realtà
ne vorrei creare tre, 2 che passano sui 2 punti delle linea e una terza
che passa sul centroide della linea.
Non sono riuscito a trovare una funzione che lo fà. Potete dirmi qual'è
l'algoritmo matematico per favore, così lo scrivo in python o in plsql ?
(l'estrazione dei punti iniziali, finali e il centroide non sono un
problema)
P.S. la linea perpendicolare dovrebbe essere lunga 50 metri nella
maggiorparte dei casi, per alcune eccezioni 30 metri.
Grazie mille a tutti in anticipo
Saluti

Visto che parli pitonese, dai una occhiata qua:

https://bitbucket.org/flovergine/transects/src/648e9c8f4f2578af6862f047354e10dee0db6a41/transects.py?at=master

in particolare a riga 298, e nota relativa. Ottenere la linea perpendicolare è
meno scontato di quello che sembra :wink:

--
Francesco P. Lovergine

Il giorno Fri, 27 Feb 2015 16:16:56 +0100
"Francesco P. Lovergine" <frankie@debian.org> ha scritto:

ciao Frankie,

On Sat, Feb 21, 2015 at 11:27:38AM +0100, Davide Petrucci wrote:
> salve a tutti, scusate il disturbo ho la necessità di creare la
> linea perpendicolare ......

Visto che parli pitonese, dai una occhiata qua:

https://bitbucket.org/flovergine/transects/src/648e9c8f4f2578af6862f047354e10dee0db6a41/transects.py?at=master

in particolare a riga 298, e nota relativa. Ottenere la linea
perpendicolare è meno scontato di quello che sembra :wink:

il problema (generale, non specifico) interessa anche a me; ho cercato
di leggere la tua nota ma il mio inglese è alquanto zoppicante (*) e
ho colto solo la segnalazione di un problema numerico "instabile" senza
spiega: qual'è il motivo della instabilità, oltre al fatto che occorre
qualche cautela(**) quando il punto è sul segmento?

grazie, ciao,
giuliano

(*) così gli amici della lista traduzioni capiranno anche il motivo del
mio scarso impegno a partecipare ai loro lavori da qualche tempo in
qua .... :frowning:

(**) @Davide: questo è un caso che mi sembra di non aver previsto nello
spezzone di codice che ti ho inviato; in realtà l'instabilità dovrebbe
presentarsi solo nel caso in cui il punto coincide con il primo estremo
del segmento, in ogni caso qualche supplemento di attenzione per i casi
di punto lungo il segmento e di segmento orizzontale/verticale non
guasta :slight_smile:

On Fri, Feb 27, 2015 at 05:11:16PM +0100, giulianc51 wrote:

il problema (generale, non specifico) interessa anche a me; ho cercato
di leggere la tua nota ma il mio inglese è alquanto zoppicante (*) e
ho colto solo la segnalazione di un problema numerico "instabile" senza
spiega: qual'è il motivo della instabilità, oltre al fatto che occorre
qualche cautela(**) quando il punto è sul segmento?

L'instabilità numerica, derivante dall'uso di aritmetica a precisione
finita, rende problematica l'implementazione delle equazioni standard
della geometria analitica: i numeri floating point sono solo
una approssimazione del campo dei numeri reali, bisogna tenerne conto.

Senza gli accorgimenti indicati nel codice, i transetti del mio codice
deviano dalla perpendicolare molto visibilmente. E' lo stesso motivo per cui
la soluzione di una equazione di secondo grado non si implementa
con le formulette della scuola media, per farla breve. L'implementazione
di un algoritmo numerico per questi motivi è non raramente apparente
magia nera.

--
Francesco P. Lovergine

Il giorno Sat, 28 Feb 2015 15:03:37 +0100
"Francesco P. Lovergine" <frankie@debian.org> ha scritto:

ciao Frankie;

On Fri, Feb 27, 2015 at 05:11:16PM +0100, giulianc51 wrote:
>
> il problema (generale, non specifico) interessa anche a me;......

L'instabilità numerica, derivante dall'uso di aritmetica a precisione
finita, ....

oops, questo è un problema che non ho ancora affrontato .... sono
ancora fermo alla definizione dei numeri reali: non riesco a decidermi
tra la sezioni di Dedeking e le successioni regolari di Cantor;
alla rappresentazione in virgola mobile credo mi manchino un paio di
secoli: devo aspettare ancora un pò :slight_smile:

grazie, ciao,
giuliano

Scusate se disturbo le dissertazioni accademiche sul calcolo differenziale :slight_smile: , ma mi sembra che il problema posto all'inizio chieda la normale al punto centrale di una linea, e non il contrario.
Sbaglio ?

R

Il giorno 28/feb/2015, alle ore 21:11, giulianc51 <giulianc51@gmail.com> ha scritto:

Il giorno Sat, 28 Feb 2015 15:03:37 +0100
"Francesco P. Lovergine" <frankie@debian.org> ha scritto:

ciao Frankie;

On Fri, Feb 27, 2015 at 05:11:16PM +0100, giulianc51 wrote:

il problema (generale, non specifico) interessa anche a me;......

L'instabilità numerica, derivante dall'uso di aritmetica a precisione
finita, ....

oops, questo è un problema che non ho ancora affrontato .... sono
ancora fermo alla definizione dei numeri reali: non riesco a decidermi
tra la sezioni di Dedeking e le successioni regolari di Cantor;
alla rappresentazione in virgola mobile credo mi manchino un paio di
secoli: devo aspettare ancora un pò :slight_smile:

grazie, ciao,
giuliano

_______________________________________________
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014

Si sbagli non è cosi semplice…
Infatti noto che il calcolo non essere giusto per tutti i casi é anche un bel pó complesso.
Comunque vi informo che dopo un pó di nottate sono arrivato ad una soluzione definitiva ora l’ho fatto in plsql appena la codifico anche in python, invio il tutto cosi chi avrá questo genere di richiesta potrá usarlo.
Grazie
ciao Davide

Il 28/Feb/2015 21:47 “Geodrinx” <geodrinx@gmail.com> ha scritto:

Scusate se disturbo le dissertazioni accademiche sul calcolo differenziale :slight_smile: , ma mi sembra che il problema posto all’inizio chieda la normale al punto centrale di una linea, e non il contrario.
Sbaglio ?

R

Il giorno 28/feb/2015, alle ore 21:11, giulianc51 <giulianc51@gmail.com> ha scritto:

Il giorno Sat, 28 Feb 2015 15:03:37 +0100
“Francesco P. Lovergine” <frankie@debian.org> ha scritto:

ciao Frankie;

On Fri, Feb 27, 2015 at 05:11:16PM +0100, giulianc51 wrote:

il problema (generale, non specifico) interessa anche a me;…

L’instabilità numerica, derivante dall’uso di aritmetica a precisione
finita, …

oops, questo è un problema che non ho ancora affrontato … sono
ancora fermo alla definizione dei numeri reali: non riesco a decidermi
tra la sezioni di Dedeking e le successioni regolari di Cantor;
alla rappresentazione in virgola mobile credo mi manchino un paio di
secoli: devo aspettare ancora un pò :slight_smile:

grazie, ciao,
giuliano


Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell’Associazione GFOSS.it.
666+40 iscritti al 5.6.2014


Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell’Associazione GFOSS.it.
666+40 iscritti al 5.6.2014

Il giorno Sat, 28 Feb 2015 21:47:03 +0100
Geodrinx <geodrinx@gmail.com> ha scritto:

ciao Roberto,

Scusate se disturbo le dissertazioni accademiche sul calcolo
differenziale :slight_smile: , ma mi sembra che il problema posto all'inizio
chieda la normale al punto centrale di una linea, e non il contrario.
Sbaglio ?

ehmmm ... sì, non stavamo parlando di calcolo differenziale, ma di
semplice "geometria analitica" (Frankie), "(elementare) calcolo
vettoriale" io; senonchè Frankie ha calato un carico da 11 con il
problema della aritmetica finita dei processori....(*);

R

ciao,
giuliano

PS: già altri, che non cito, avevano sollevato tempo fa in lista analogo
problema: non sarebbe male un ripasso dell'argomento (almeno per me :slight_smile:

Inviato da iPhone

Il giorno 28/feb/2015, alle ore 22:30, giulianc51 <giulianc51@gmail.com> ha scritto:

Il giorno Sat, 28 Feb 2015 21:47:03 +0100
Geodrinx <geodrinx@gmail.com> ha scritto:

ciao Roberto,

Scusate se disturbo le dissertazioni accademiche sul calcolo
differenziale :slight_smile: , ma mi sembra che il problema posto all'inizio
chieda la normale al punto centrale di una linea, e non il contrario.
Sbaglio ?

ehmmm ... sì, non stavamo parlando di calcolo differenziale,

anche un ripasso di calcolo ironico non sarebbe male.

:slight_smile:

Simpaticamente

Roberto