Como posso mostrar exatamente o raio deste círculo?

Como posso mostrar exatamente o raio deste círculo?

Quero mostrar o raio deste círculo. O resultado correto do raio é 7/sqrt(3). Meu 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}

tentei

\pgfmathparse{\myr}
 \pgfmathresult

Não consigo obter o resultado. Como posso obter o resultado automaticamente (não manualmente)?

Responder1

Há apenas suporte muito limitado para detecção de frações e assim por diante no pgf, e assim que raízes quadradas estão envolvidas, acho que você precisa fazer algumas coisas manualmente. (Para ser justo, os sistemas de álgebra computacional também não são ótimos para detectar tais expressões, mas se você usá-los para analisar as expressões, poderá obter resultados exatos. No entanto, o LaTeX não é um sistema de álgebra computacional.) Você pode usar as teclas

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

obter

\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}

insira a descrição da imagem aqui

Claro, pode-se fazer melhor do que isso, mas até onde sei, as rotinas para fazer a aritmética de inteiros necessária ainda não foram implementadas pgf(e há uma pequena chance de que não exista um pacote real para elas). O principal obstáculo é que gcd, que é muito útil para cancelar fatores comuns em frações, ainda não funciona fpu. Por outro lado, você precisa fpuaqui porque os números são muito grandes. Então adicionei a variante de gcd(chamada gcdFPU) e uma série de outras rotinas, como integerpowera que permite determinar a potência de um fator em um número inteiro. Por exemplo, integerpower(12,2)os rendimentos 2desde 12=2^2 times something that is not divisible by 2. Isso pode ser usado para extrair quadrados da raiz quadrada.

\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}

insira a descrição da imagem aqui

informação relacionada