¿Cómo puedo mostrar exactamente el radio de este círculo?

¿Cómo puedo mostrar exactamente el radio de este círculo?

Quiero mostrar el radio de este círculo. El resultado correcto del radio es 7/sqrt(3). Mi código.

\documentclass[border = 1mm]{standalone} 
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{intersections,calc,backgrounds,fpu} 
\newcommand{\PgfmathsetmacroFPU}[2]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathsetmacro{#1}{#2}%
\pgfmathsmuggle#1\endgroup}
\begin{document}
\tdplotsetmaincoords{70}{80}
\begin{tikzpicture}[tdplot_main_coords,line join = round, line cap = round]
    \pgfmathsetmacro{\a}{5} 
    \pgfmathsetmacro{\b}{7} 
    \pgfmathsetmacro{\c}{8} 
    \PgfmathsetmacroFPU{\myr}{{sqrt(-
     pow(\a,2) *pow(\b,2)* pow(\c,2)/ (pow(\a,4)  + pow(\b,4)  + pow(\c,4)- 2
     *pow(\a,2) *pow(\b,2)  - 2*pow(\c,2) *pow(\b,2)-2*pow(\c,2) *pow(\a,2) ))}}

    \coordinate (A) at (0,0,0);
    \coordinate (B) at (\c,0,0);
    \coordinate (C) at  ({(pow(\b,2) + pow(\c,2) - pow(\a,2))/(2*\c)},{sqrt((\a+\b-\c) *(\a-\b+\c) *(-\a+\b+\c)* (\a+\b+\c))/(2*\c)},0);
    \coordinate (T) at  (\c/2, {\c* (\a*\a + \b*\b - \c*\c)/(2*sqrt((\a+\b-\c) *(\a-\b+\c)* (-\a+\b+\c)* (\a+\b+\c)))},0);
    \foreach \point/\position in {A/left,B/below,C/right,T/below}
    {
        \fill (\point) circle (1.8pt);
        \node[\position=3pt] at (\point) {$\point$};
    }
    \begin{scope}[canvas is xy plane at z=0]
    \draw[thick] (T) circle (\myr); 
    \end{scope}
 \pgfmathparse{\myr}
 \pgfmathresult
\end{tikzpicture}
   \end{document}

Lo intenté

\pgfmathparse{\myr}
 \pgfmathresult

No puedo obtener el resultado. ¿Cómo puedo obtener el resultado automáticamente (no manualmente)?

Respuesta1

Solo hay un soporte muy limitado para la detección de fracciones y demás en pgf, y tan pronto como se involucran raíces cuadradas, creo que es necesario hacer algunas de las cosas a mano. (Para ser justos, los sistemas de álgebra informática tampoco son buenos para detectar este tipo de expresiones, pero si los usa para analizar las expresiones, puede obtener un resultado exacto. Sin embargo, LaTeX no es un sistema de álgebra informática de ese tipo).

\pgfkeys{/pgf/number format/.cd,frac, frac denom=3,frac whole=false}

para obtener

\documentclass[border = 1mm]{standalone} 
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{intersections,calc,backgrounds,fpu} 
\newcommand{\PgfmathsetmacroFPU}[2]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathsetmacro{#1}{#2}%
\pgfmathsmuggle#1\endgroup}
\begin{document}
\tdplotsetmaincoords{70}{80}
\begin{tikzpicture}[tdplot_main_coords,line join = round, line cap = round]
    \pgfmathsetmacro{\a}{5} 
    \pgfmathsetmacro{\b}{7} 
    \pgfmathsetmacro{\c}{8} 
    \PgfmathsetmacroFPU{\myr}{{sqrt(-
     pow(\a,2) *pow(\b,2)* pow(\c,2)/ (pow(\a,4)  + pow(\b,4)  + pow(\c,4)- 2
     *pow(\a,2) *pow(\b,2)  - 2*pow(\c,2) *pow(\b,2)-2*pow(\c,2) *pow(\a,2) ))}}

    \coordinate (A) at (0,0,0);
    \coordinate (B) at (\c,0,0);
    \coordinate (C) at  ({(pow(\b,2) + pow(\c,2) - pow(\a,2))/(2*\c)},{sqrt((\a+\b-\c) *(\a-\b+\c) *(-\a+\b+\c)* (\a+\b+\c))/(2*\c)},0);
    \coordinate (T) at  (\c/2, {\c* (\a*\a + \b*\b - \c*\c)/(2*sqrt((\a+\b-\c) *(\a-\b+\c)* (-\a+\b+\c)* (\a+\b+\c)))},0);
    \foreach \point/\position in {A/left,B/below,C/right,T/below}
    {
        \fill (\point) circle (1.8pt);
        \node[\position=3pt] at (\point) {$\point$};
    }
    \begin{scope}[canvas is xy plane at z=0]
    \draw[thick] (T) circle (\myr); 
    \end{scope}
 \draw (T)  -- (C) node[midway,sloped,fill=white] {%
 \pgfmathparse{\myr/sqrt(3)}%
 \pgfkeys{/pgf/number format/.cd,frac, frac denom=3,frac whole=false}%  
 $\pgfmathprintnumber{\pgfmathresult}\cdot\sqrt{3}\,$cm};
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Por supuesto, se puede hacer algo mejor que eso, pero hasta donde yo sé, las rutinas para realizar la aritmética de enteros requerida aún no están implementadas pgf(y existe una pequeña posibilidad de que no exista un paquete real para ellas). El principal obstáculo es que gcd, que es muy útil para cancelar factores comunes en fracciones, aún no funciona con fpu. Por otro lado, es necesario fpuaquí porque los números son muy grandes. Entonces agregué una variante de gcd(llamada gcdFPU) y una serie de otras rutinas, como integerpowerla que permite determinar la potencia de un factor en un número entero. Por ejemplo, integerpower(12,2)los rendimientos 2desde 12=2^2 times something that is not divisible by 2. Esto se puede utilizar para sacar cuadrados de la raíz cuadrada.

\documentclass[tikz,border=1mm]{standalone} 
\usepackage{tikz-3dplot}
\usetikzlibrary{fpu} 
\newcounter{ifactor}
\newcommand{\PgfmathsetmacroFPU}[2]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathsetmacro{#1}{#2}%
\pgfmathsmuggle#1\endgroup}
\newcommand{\PgfmathtruncatemacroFPU}[2]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathtruncatemacro{#1}{round(#2)}%
\pgfmathsmuggle#1\endgroup}
% the following functions are based on 
% * https://tex.stackexchange.com/a/177109 (digitcount,digitsum,lastdigit)
% * https://tex.stackexchange.com/a/501895 (memberQ)
% or new in the sense that they were developed on the basis of the existing
% pgf functions
\makeatletter
\newcount\c@Digits
\newcount\c@Powers
\pgfmathdeclarefunction{digitcount}{1}{%
  \begingroup%
  \global\c@Digits=0
  \expandafter\DigitCount@i#1\@nil%
  \pgfmathparse{int(\the\c@Digits)}%
  \pgfmathsmuggle\pgfmathresult\endgroup}
% \def\GroupDigits#1{%
%   \global\c@Digits=0
%   \expandafter\DigitCount@i#1\@nil%
%   \pgfmathparse{int(\the\c@Digits)}}
\def\DigitCount@i#1#2\@nil{%
  \advance\c@Digits by \@ne
  \ifx\relax#2\relax\else\DigitCount@i#2\@nil\fi
}
\pgfmathdeclarefunction{digitsum}{1}{%
  \begingroup%
  \global\c@Digits=0
  \expandafter\DigitSum@i#1\@nil%
  \pgfmathparse{int(\the\c@Digits)}%
    \pgfmathsmuggle\pgfmathresult\endgroup}
% \def\DigitSum#1{%
%   \global\c@Digits=0
%   \expandafter\DigitSum@i#1\@nil%
%   \pgfmathparse{int(\the\c@Digits)}}
\def\DigitSum@i#1#2\@nil{%
  \advance\c@Digits by #1
  \ifx\relax#2\relax\else\DigitSum@i#2\@nil\fi
}
\pgfmathdeclarefunction{lastdigit}{1}{%
  \begingroup%
    \global\c@Digits=0
    \expandafter\LastDigit@i#1\@nil%
    \pgfmathparse{int(\the\c@Digits)}%
    \pgfmathsmuggle\pgfmathresult\endgroup}
% \def\LastDigit#1{%
%   \global\c@Digits=0
%   \expandafter\LastDigit@i#1\@nil%
%   \pgfmathparse{int(\the\c@Digits)}}
\def\LastDigit@i#1#2\@nil{%
  \c@Digits=#1
  \ifx\relax#2\relax\else\LastDigit@i#2\@nil\fi
}
\pgfmathdeclarefunction{integerpower}{2}{%
  \begingroup%
    \global\c@Powers=0%
    \pgfmathtruncatemacro{\pgfutil@tmpa}{#1}%
    \loop\pgfmathtruncatemacro{\itest}{gcd(\pgfutil@tmpa,#2)}%0
    \ifnum\itest>1\relax%
    \advance\c@Powers by \@ne%
    \pgfmathtruncatemacro{\pgfutil@tmpa}{\pgfutil@tmpa/#2}%
    \repeat%
    \pgfmathparse{int(\the\c@Powers)}%
    \pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{integerpower2}{1}{% works with large numbers
  \begingroup%
    \pgfkeys{/pgf/fpu=false}%
    \global\c@Powers=0%
    \PgfmathtruncatemacroFPU{\pgfutil@tmpa}{#1}%
    \loop%
    \pgfmathtruncatemacro{\pgfutil@tmpb}{lastdigit(\pgfutil@tmpa)}%
    \pgfmathtruncatemacro{\itest}{iseven(\pgfutil@tmpb)}%
    \ifnum\itest=1%
    \advance\c@Powers by \@ne%
    \PgfmathtruncatemacroFPU{\pgfutil@tmpa}{\pgfutil@tmpa/2}%
    \repeat%
    \pgfmathparse{int(\the\c@Powers)}%
    \pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{integerpower3}{1}{% works with large numbers
  \begingroup%
    \pgfkeys{/pgf/fpu=false}%
    \global\c@Powers=0%
    \PgfmathtruncatemacroFPU{\pgfutil@tmpa}{#1}%
    \loop%
    \pgfmathtruncatemacro{\itest}{divby3(\pgfutil@tmpa)}%
    \ifnum\itest=1%
    \advance\c@Powers by \@ne%
    \PgfmathtruncatemacroFPU{\pgfutil@tmpa}{\pgfutil@tmpa/3}%
    \repeat%
    \pgfmathparse{int(\the\c@Powers)}%
    \pgfmathsmuggle\pgfmathresult\endgroup} 
\pgfmathdeclarefunction{memberQ}{2}{%
  \begingroup%
    \edef\pgfutil@tmpb{0}%
    \edef\pgfutil@tmpa{#2}%
    \expandafter\pgfmath@member@i\pgfutil@firstofone#1\pgfmath@token@stop
    \edef\pgfmathresult{\pgfutil@tmpb}%
    \pgfmath@smuggleone\pgfmathresult%
  \endgroup}
\def\pgfmath@member@i#1{%
    \ifx\pgfmath@token@stop#1%
    \else
      \ifnum#1=\pgfutil@tmpa\relax%
      \gdef\pgfutil@tmpb{1}%
      \fi%
      \expandafter\pgfmath@member@i
    \fi} 
\pgfmathdeclarefunction{isevenFPU}{1}{%
  \begingroup%
  \pgfmathparse{iseven(lastdigit(#1))}%
    \pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{isoddFPU}{1}{%
  \begingroup%
  \pgfmathparse{isodd(lastdigit(#1))}%
    \pgfmathsmuggle\pgfmathresult\endgroup}        
\pgfmathdeclarefunction{divby3}{1}{%
  \begingroup%
  \pgfmathparse{memberQ({3,6,9},digitsum(digitsum(#1)))}%
  \pgfmathsmuggle\pgfmathresult\endgroup}   
\pgfmathdeclarefunction{gcdFPU}{2}{%
  \begingroup
    \pgfkeys{/pgf/fpu=false}%
    \pgfmathcontinuelooptrue
    \PgfmathtruncatemacroFPU{\pgfutil@tmpa}{#1}%
    \PgfmathtruncatemacroFPU{\pgfutil@tmpb}{#2}%
    \PgfmathtruncatemacroFPU{\itest}{ifthenelse(\pgfutil@tmpa==0,1,0)}%
    \ifnum\itest=1\relax
      \pgfmathcontinueloopfalse
      \PgfmathtruncatemacroFPU{\pgfutil@tmpa}{\pgfutil@tmpb}%
    \fi%
    \PgfmathtruncatemacroFPU{\itest}{ifthenelse(\pgfutil@tmpb==0,1,0)}%
    \ifnum\itest=1\relax
      \pgfmathcontinueloopfalse
      \PgfmathtruncatemacroFPU{\pgfutil@tmpb}{\pgfutil@tmpa}%
    \fi%
    \PgfmathtruncatemacroFPU{\pgfutil@tmpa}{abs(\pgfutil@tmpa)}%
    \PgfmathtruncatemacroFPU{\pgfutil@tmpb}{abs(\pgfutil@tmpb)}%
    \loop
      \ifpgfmathcontinueloop%
      \PgfmathtruncatemacroFPU{\itest}{ifthenelse(\pgfutil@tmpa==\pgfutil@tmpb,1,0)}%
      \ifnum\itest=1\relax
        \pgfmathcontinueloopfalse
      \else
        \PgfmathtruncatemacroFPU{\itest}{ifthenelse(\pgfutil@tmpa>\pgfutil@tmpb,1,0)}%
        \ifnum\itest=1\relax
          \PgfmathtruncatemacroFPU{\pgfutil@tmpa}{\pgfutil@tmpa-\pgfutil@tmpb}%
        \else
          \PgfmathtruncatemacroFPU{\pgfutil@tmpb}{\pgfutil@tmpb-\pgfutil@tmpa}%
        \fi
      \fi
    \repeat
    \PgfmathtruncatemacroFPU\pgfmathresult{\pgfutil@tmpa}%
    \pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{factorinteger}{1}{%
\begingroup% not yet done
\endgroup
}  
\makeatother

\newcommand{\Pgfmathfraction}[3]{\begingroup%
\pgfmathtruncatemacro{\mynumerator}{#2/gcd(#2,#3)}%
\pgfmathtruncatemacro{\mydenominator}{#3/gcd(#2,#3)}%
\pgfmathsmuggle#1\endgroup}
\begin{document}
\tdplotsetmaincoords{70}{80}
\foreach \a/\b/\c in {3/4/5,6/7/8,5/7/8}
{\begin{tikzpicture}[tdplot_main_coords,line join = round, line cap = round,
declare function={numerator(\a,\b,\c)=pow(\a,2) *pow(\b,2)* pow(\c,2);
denominator(\a,\b,\c)=-pow(\a,4)  - pow(\b,4)  - pow(\c,4)+% 
2*pow(\a,2) *pow(\b,2)+2*pow(\c,2) *pow(\b,2)+2*pow(\c,2)*pow(\a,2);}]
 \begin{scope}[local bounding box=elli]
    \PgfmathtruncatemacroFPU{\mynumerator}{numerator(\a,\b,\c)}
    \PgfmathtruncatemacroFPU{\mydenominator}{denominator(\a,\b,\c)}
    \PgfmathtruncatemacroFPU{\mygcd}{gcdFPU(\mynumerator,\mydenominator)}
    \message{numerator=\mynumerator,denominator=\mydenominator,gcd=\mygcd^^J}
    \PgfmathtruncatemacroFPU{\newnumerator}{\mynumerator/\mygcd}
    \PgfmathtruncatemacroFPU{\newdenominator}{\mydenominator/\mygcd}
    \message{new numerator=\newnumerator,new denominator=\newdenominator^^J}
    \pgfmathtruncatemacro{\myprenum}{1}
    \pgfmathtruncatemacro{\mypreden}{1}
    \foreach \Prime in {2,3,5,7,11,13,17}
    {\pgfmathtruncatemacro{\myint}{integerpower(\newnumerator,\Prime)}
     \ifnum\myint>1
      \pgfmathtruncatemacro{\myint}{2*int(\myint/2)}
      \PgfmathtruncatemacroFPU{\newnumerator}{\newnumerator/pow(\Prime,\myint)}
      \xdef\newnumerator{\newnumerator}
      \pgfmathtruncatemacro{\myprenum}{\myprenum*pow(\Prime,\myint/2)}
      \xdef\myprenum{\myprenum}
     \fi
    \pgfmathtruncatemacro{\myint}{integerpower(\newdenominator,\Prime)}
     \ifnum\myint>0
      \pgfmathtruncatemacro{\myint}{2*int(\myint/2)}
      \PgfmathtruncatemacroFPU{\newdenominator}{\newdenominator/pow(\Prime,\myint)}
      \xdef\newdenominator{\newdenominator}
      \pgfmathtruncatemacro{\mypreden}{\mypreden*pow(\Prime,\myint/2)}
      \xdef\mypreden{\mypreden}
     \fi
    }
    \message{new numerator=\newnumerator, pre num=\myprenum,new
    denominator=\newdenominator, pre den=\mypreden^^J}
    \pgfmathsetmacro{\myr}{(\myprenum/\mypreden)*sqrt(\newnumerator/\newdenominator)}
    \coordinate (A) at (0,0,0);
    \coordinate (B) at (\c,0,0);
    \coordinate (C) at  ({(pow(\b,2) + pow(\c,2) - pow(\a,2))/(2*\c)},{sqrt((\a+\b-\c) *(\a-\b+\c) *(-\a+\b+\c)* (\a+\b+\c))/(2*\c)},0);
    \coordinate (T) at  (\c/2, {\c* (\a*\a + \b*\b - \c*\c)/(2*sqrt((\a+\b-\c) *(\a-\b+\c)* (-\a+\b+\c)* (\a+\b+\c)))},0);
    \foreach \point/\position in {A/left,B/below,C/right,T/below}
    {
        \fill (\point) circle (1.8pt);
        \node[\position=3pt] at (\point) {$\point$};
    }
    \begin{scope}[canvas is xy plane at z=0]
    \draw[thick] (T) circle (\myr); 
    \end{scope}
 \draw (T)  -- (C) node[midway,sloped,fill=white] {%
 $\displaystyle\ifnum\mypreden=1
  \myprenum
 \else
  \frac{\myprenum}{\mypreden}
 \fi
 \ifnum\newdenominator=1
  \ifnum\newnumerator=1
  \else
   \cdot\sqrt{\newnumerator}
  \fi
 \else 
  \ifnum\newnumerator=1
   \cdot\frac{1}{\sqrt{\newdenominator}}
  \else
   \cdot\sqrt{\frac{\newnumerator}{\newdenominator}}
  \fi
 \fi\,$cm};
 \end{scope}
 \node[above] at (elli.north){$a=\a,b=\b,c=\c$};
\end{tikzpicture}}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada