Marco87″ post=79298Ciao Enrico,
Non vedo perché usare fp quando PGF/TikZ ha già le sue librerie per il “floating point”
In realtà quel codice l’ho preso in rete e, per la precisione, qui. In effetti, cercando di capire le righe di quel codice ho cercato sul manuale di [tt]TikZ[/tt] i vari comandi che vi vengono usati, ma alcuni non li ho trovati. Se capissi quelli, forse potrei scriverne i corrispondenti usando le librerie per il “floating point” di [tt]PGF/TikZ.[/tt]
Ciao,
Marco.
Oltre al codice di Alain Matthes che tu hai utilizzato, su TeX.SX ci sono altre risposte che ti potrebbero essere utili: Coordinates A, B: compute |B-A| and angle between +x and (B-A) e TikZ: How to determine the vector between two co-ordinates. Dico subito però che nessuna aiuta per quanto riguarda il segno.
In breve, nel codice di Alain si fa uso del pacchetto fp, ma le operazioni base dovrebbero essere (presunte dato che non ho mai usato fp):
`\pgf@xa=\pgf@x% estrazione coordinata x
\pgf@ya=\pgf@y% estrazione coordinata y
\FPeval\@temp@a{\pgfmath@tonumber{\pgf@xa}}% trasformazione in numero e valutazione in floating point
\FPeval\@temp@b{\pgfmath@tonumber{\pgf@ya}}% idem
\FPeval\@temp@sum{(\@temp@a*\@temp@a+\@temp@b*\@temp@b)}% somma dei quadrati
\FProot{\FPMathLen}{\@temp@sum}{2}% radice della somma dei quadrati
\FPround\FPMathLen\FPMathLen5\relax % arrotondamento di qualche tipo
\global\expandafter\edef\csname #3\endcsname{\FPMathLen} % stampa in una macro di uscita
`
A me di quel codice in realtà è piaciuto il fatto che fornisce una macro in uscita. Per un pacchetto che ho pubblicato qualche minuto fa mi serviva proprio il calcolo della distanza fra due rettangoli, di cui conoscevo le ancore. Ecco come ho risolto:
`\def\CalcHeight(#1,#2)#3{%
\pgfpointdiff{\pgfpointanchor{#1}{south west}}{\pgfpointanchor{#2}{north west}}
\pgfmathsetmacro{\myheight}{veclen(\pgf@x,\pgf@y)}
\global\expandafter\edef\csname #3\endcsname{\myheight}
}
…
\coordinate (A) at (module1);
\coordinate (B) at (module\maxsmitem);
\CalcHeight(A,B){heightmodules}
\pgfmathadd{\heightmodules}{\priorityarrowheightadvance}
\pgfmathsetmacro{\distancemodules}{\pgfmathresult}
`
Ciao
Claudio