Ciao Enrico,
chiedo scusa. Ecco un codice che riproduce il comportamento che ho descritto:
`\documentclass[a4paper,11pt,extrafontsizes,twoside,openright]{memoir}
\usepackage{etex}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[greek,italian]{babel}
\usepackage{microtype}
\pagestyle{empty}
\usepackage{ifthen}
\usepackage{xcolor}
\usepackage{tikz}
% Librerie
\usetikzlibrary{automata}
\usetikzlibrary{arrows}
\usetikzlibrary{backgrounds}
\usetikzlibrary{calc}
\usetikzlibrary{hobby}
\usetikzlibrary{intersections}
\usetikzlibrary{patterns}
\usetikzlibrary{positioning}
\usetikzlibrary{shadows}
\usetikzlibrary{shapes}
\usetikzlibrary{through}
% Pacchetti
\usepackage{tkz-euclide}
\usetkzobj{all}
% TikZ
%Distanza fra due punti (la lunghezza viene espressa in punti, quindi usare \calcLV 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
% Distanza fra due punti lungo X (la lunghezza viene espressa in punti, quindi usare \calcLVX pt)
\makeatletter
\def\calcLVX(#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
% Distanza fra due punti lungo Y (la lunghezza viene espressa in punti, quindi usare \calcLVY pt)
\makeatletter
\def\calcLVY(#1,#2)#3{%
\pgfpointdiff{\pgfpointanchor{#1}{center}}%
{\pgfpointanchor{#2}{center}}%
\pgf@ya=\pgf@y%
\FPeval\@temp@a{\pgfmath@tonumber{\pgf@ya}}%
\FPround\@temp@a\@temp@a5\relax
\global\expandafter\edef\csname #3\endcsname{\@temp@a}
}
\makeatother
% MIO NUOVO COMMANDO
\newcommand{\my}[4]{%
\coordinate (medio) at ($(#1)!.5!(#2)$);
\calcLV(#1,medio){dist}
\coordinate (o) at (0,0);
\coordinate (temp) at (#3,0);
\calcLV(o,temp){rag}
\pgfmathsetmacro{\differenza}{\dist-\rag}
%
\ifdim \differenza pt = 0 pt
\def\abc{2}
\else
\def\abc{3}
\fi
}
\begin{document}
\begin{tikzpicture}[scale=1]
\draw [help lines] (0,0) grid (3,3);
\coordinate [label={270:\tiny $O$}] (or) at (0,0);
\coordinate [label={270:\tiny $A$}] (a) at (50:2);
\coordinate [label={270:\tiny $B$}] (b) at (50+180:2);
\my{a}{b}{2}{}
\fill [black] (a) circle (1.5pt);
\fill [black] (b) circle (1.5pt);
\fill [cyan] (\abc,\abc) circle (2pt);
\end{tikzpicture}
\end{document}`
Nel comando [tt]\my[/tt] quello che faccio (cerco di fare) per ora è eseguire questo:
- Dati due punti, ne creo uno posto esattamente al centro;
- Misuro la distanza che c’è tra questo e uno dei due punti forniti in ingresso;
- Converto il raggio inserito in ingresso in pt (sull’efficienza del mio codice credo che ci sia molto da dire);
- Calcolo la differenza che c’è tra queste due distanze;
- A seconda del valore di questa differenza eseguo un codice o un altro.
Nell’esempio che ho riportato [tt]\differenza[/tt] dovrebbe essere nulla, di conseguenza [tt]\abc[/tt] dovrebbe essere pari a [tt]2,[/tt] e quindi il punto azzurro dovrebbe avere coordinate [tt](2,2),[/tt] ma non è così. Cosa sbaglio?
Grazie e buona giornata,
Marco.