- Questo topic ha 5 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 13 anni, 10 mesi fa da .
-
Topic
-
Ciao a tutti,intanto buon week end! 🙂 Sto cercando di creare un nuovo comando da usare nei disegni che realizzo con [tt]TikZ.[/tt] Il comando riceve in ingresso (almeno per ora) due parametri:
`\newcommand{\myCmd}[2]{…}`
Questi due parametri sono due punti; mostro l’uso che vorrei del comando:
`\coordinate (o) at (0,0);
\coordinate (a) at ($(o)+(canvas polar cs:angle=45,radius=1 cm)$);\myCmd{o}{a}`
Nel comando avrei bisogno di misurare la distanza orizzontale tra [tt](a)[/tt] e [tt](o)[/tt]. Da tempo uso questo comando trovato in rete per misurare la distanza fra due punti (la distanza viene fornita in pt):
`\makeatletter
\def\calcLV(#1,#2)#3{%
\pgfpointdiff{\pgfpointanchor{#1}{center}}%
{\pgfpointanchor{#2}{center}}%
\pgf@xa=\pgf@x%
\pgf@ya=\pgf@y%
\FPeval\@temp@a{\pgfmath@tonumber{\pgf@xa}}%
\FPeval\@temp@b{\pgfmath@tonumber{\pgf@ya}}%
\FPeval\@temp@sum{(\@temp@a*\@temp@a+\@temp@b*\@temp@b)}%
\FProot{\FPMathLen}{\@temp@sum}{2}%
\FPround\FPMathLen\FPMathLen5\relax
\global\expandafter\edef\csname #3\endcsname{\FPMathLen}
}
\makeatother`
Ora, ho provato a modificarlo in questo modo:
`\makeatletter
\def\calcLVXsegno(#1,#2)#3{%
\pgfpointdiff{\pgfpointanchor{#1}{center}}%
{\pgfpointanchor{#2}{center}}%
\pgf@xa=\pgf@x%
\FPeval\@temp@a{\pgfmath@tonumber{\pgf@xa}}%
\FPround\@temp@a\@temp@a5\relax
\global\expandafter\edef\csname #3\endcsname{\@temp@a}
}
\makeatother`
ma, al contrario di quanto suggerisce il nome del comando, il valore restituito è assoluto. C’è modo di far sì che il valore restituito sia invece dotato del segno?Un altro approccio a cui ho pensato, visto che in definitiva quello che mi interessa è il confronto fra le coordinate dei due punti, è quello di estrarne in qualche modo le coordinate. Ossia, esiste un comando che applicato ad [tt](a)[/tt] mi restituisca la sua coordinata x? Sarebbe la via più semplice ed elegante secondo me, ma è possibile?
Grazie mille e buona giornata,
Marco.
- Devi essere connesso per rispondere a questo topic.