7

I am trying to draw a circle (sphere) passing through four points B, C, E, F like this picture

enter image description here

I tried with tikz-3dplot and my code

\documentclass[border=3mm,12pt]{standalone}
\usepackage{fouriernc}
\usepackage{tikz,tikz-3dplot} 
\usepackage{tkz-euclide}
\usetkzobj{all}

 \usetikzlibrary{intersections,calc,backgrounds}

 \begin{document}

 \tdplotsetmaincoords{70}{110}
  %\tdplotsetmaincoords{80}{100}
 \begin{tikzpicture}[tdplot_main_coords,scale=1.5]
 \pgfmathsetmacro\a{3}
 \pgfmathsetmacro\b{4}
 \pgfmathsetmacro\h{5}

 % definitions
 \path
 coordinate(A) at (0,0,0)
coordinate (B) at (\a,0,0)
coordinate (C) at (0,\b,0)                           
coordinate (S) at (0,0,\h)                
coordinate (E) at  ({\a*\h^2/(\a*\a + \h*\h)},0,{(\a*\a*\h)/(\a*\a + \h*\h)})
coordinate (F) at  (0,{(\b*\h*\h)/(\b*\b + \h*\h)},{(\b*\b*\h)/(\b*\b + \h*\h)});
 \draw[dashed,thick]
       (A) -- (B)  (A) -- (C)  (A) -- (E)  (S)--(A)  (F)--(A);
       \draw[thick]
       (S) -- (B) -- (C) -- cycle;
       \draw[thick] 
       (F) -- (B) (C)--(E) (F)--(E);
\tkzMarkRightAngle(S,E,A);
\tkzMarkRightAngle(S,F,A);

 \foreach \point/\position in {A/below,B/left,C/below,S/above,E/left,F/above}
 {
   \fill (\point) circle (.8pt);
   \node[\position=3pt] at (\point) {$\point$};
 }

 \end{tikzpicture}
 \end{document} 

and got

enter image description here

How can I draw a circle (sphere) passing through four points B, C, E, F?

  • 2
    A circle is already uniquely fixed by 3 (noncollinear) points. There exist answers that show you how to find such a circle. E.g. https://tex.stackexchange.com/questions/461161/drawing-a-circle-through-3-non-collinear-points/461180#461180 (Sorry for advertising;-) –  Jan 15 '19 at 03:38
  • @marmot Is it true in 3D? – minhthien_2016 Jan 15 '19 at 03:52
  • 1
    I believe that an orthographic projection of a sphere is a circle. The subtle point is whether the projected circle runs through the points you indicate, something that I cannot decide without more information on how the sphere is determined. –  Jan 15 '19 at 03:56
  • The sphere has centre is midpoint of the segment EC. – minhthien_2016 Jan 15 '19 at 03:59
  • @marmot The sphere has centre is midpoint of the segment BC, not EC. I am trying your hint. – minhthien_2016 Jan 15 '19 at 04:35
  • @minhthien_2016 : Yes, true even in 3D. Any 3 non-identical points in 3D define a plane and a unique circle passing through them. – AlexG Jan 15 '19 at 09:01
  • 1
    That circle doesn't look very circular. – RemcoGerlich Jan 15 '19 at 09:07
  • @marmot, when I started engineering, the teacher of technical drawing used to say that given three points, you can draw a straight line through them, provided you have a thick enough pencil... ;-) – Rmano Jan 15 '19 at 09:50
  • @marmot Is there a command to find coordinates of projection of a point into a line in 3D? – minhthien_2016 Jan 19 '19 at 10:34
  • @minhthien_2016 I am not aware of such a command in TikZ. However, I believe it should be possible to create one. –  Jan 19 '19 at 15:01
  • I am writting a question about that. – minhthien_2016 Jan 19 '19 at 15:03
  • I have just posted a question – minhthien_2016 Jan 19 '19 at 15:23

2 Answers2

9

A circle is determined by 3 points. A sphere, of course, needs at least 4 points on its boundary to be determined. However, the projection of the sphere, i.e. the circle, won't necessarily run through the projections of these points. (Actually, if the sphere is uniquely determined by these points, the boundary circle, i.e. the projection of the sphere on the screen coordinates, will never run through all projections of the points because for this to happen, the points need to lie in a plane, but then they no longer uniquely determine the circle.)

This shows two ways to construct circles that run through some of the points:

  1. The dotted circle runs through F, E and C. It is fixed by this requirement. As a consequence it misses B by a small amount.
  2. The red dashed circle runs through the midpoint of BC and through these points. It misses F and E by small amounts.

\documentclass[border=3mm,12pt]{standalone}
\usepackage{fouriernc}
\usepackage{tikz,tikz-3dplot} 
\usepackage{tkz-euclide}
\usetkzobj{all}
\usetikzlibrary{calc,through}
\tikzset{circle through 3 points/.style n args={3}{%
insert path={let    \p1=($(#1)!0.5!(#2)$),
                    \p2=($(#1)!0.5!(#3)$),
                    \p3=($(#1)!0.5!(#2)!1!-90:(#2)$),
                    \p4=($(#1)!0.5!(#3)!1!90:(#3)$),
                    \p5=(intersection of \p1--\p3 and \p2--\p4)
                    in },
at={(\p5)},
circle through= {(#1)}
}}

 \usetikzlibrary{intersections,calc,backgrounds}

 \begin{document}

 \tdplotsetmaincoords{70}{110}
  %\tdplotsetmaincoords{80}{100}
 \begin{tikzpicture}[tdplot_main_coords,scale=1.5]
 \pgfmathsetmacro\a{3}
 \pgfmathsetmacro\b{4}
 \pgfmathsetmacro\h{5}

 % definitions
 \path
 coordinate(A) at (0,0,0)
coordinate (B) at (\a,0,0)
coordinate (C) at (0,\b,0)                           
coordinate (S) at (0,0,\h)                
coordinate (E) at  ({\a*\h^2/(\a*\a + \h*\h)},0,{(\a*\a*\h)/(\a*\a + \h*\h)})
coordinate (F) at  (0,{(\b*\h*\h)/(\b*\b + \h*\h)},{(\b*\b*\h)/(\b*\b + \h*\h)});
 \draw[dashed,thick]
       (A) -- (B)  (A) -- (C)  (A) -- (E)  (S)--(A)  (F)--(A);
       \draw[thick]
       (S) -- (B) -- (C) -- cycle;
       \draw[thick] 
       (F) -- (B) (C)--(E) (F)--(E);
\tkzMarkRightAngle(S,E,A);
\tkzMarkRightAngle(S,F,A);

 \foreach \point/\position in {A/below,B/left,C/below,S/above,E/left,F/above}
 {
   \fill (\point) circle (.8pt);
   \node[\position=3pt] at (\point) {$\point$};
 }
  \node[circle through 3 points={F}{E}{C},draw=blue,dotted]{};
  \draw[red,dashed] 
  let \p1=($(B)-(C)$), \n1={veclen(\x1,\y1)/2} in ($(B)!0.5!(C)$) circle (\n1);
\end{tikzpicture}
\end{document}

enter image description here

It will be possible to construct the sphere as well. However, as mentioned its boundary may not run through any of the points.

ADDENDUM: In your setup, the four points do not determine a unique sphere because they all lie in a plane. Using Mathematica I was able to express F as a linear combination

 F = x B + y C + z E

where

enter image description here

So in this setup it is not possible to draw a unique sphere.

  • I edited your mathematical equations so that it is easier to read them. If it is wrong or you don't like it, feel free to re-edit it :)) –  Jan 15 '19 at 08:42
5

Thank you very much to marmot for correcting the circle BCEF here.

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc,3dtools}
\begin{document}
    \begin{tikzpicture}[line cap=round,line join=round,
        3d/install view={phi=110,theta=70},
        declare function={a=3;b=4;h=5;},c/.style={circle,fill,inner sep=1pt}]
        \path
        (0,0,0) coordinate (A)  
        (a,0,0) coordinate (B)  
        (0,b,0) coordinate (C)                             
        (0,0,h)  coordinate (S)
        %(a/2,b/2,0)  coordinate (M)
        ;
    \path[3d/circumsphere center={A={(A)},B={(B)},C={(C)},D={(S)}}]
    coordinate (I);
    \pgfmathsetmacro{\myR}{sqrt(TD("(I)-(A)o(I)-(A)"))} ;
    \draw[3d/screen coords] (I) circle[radius=\myR];
    \path[3d/circumcircle center={A={(A)},B={(B)},C={(C)}}] coordinate (O);
    \path pic{3d/circle on sphere={R=\myR,C={(I)}, P={(O)}}};  
    \path[3d/line through={(S) and (B) named lSB}];
    \path[3d/line through={(S) and (C) named lSC}];
    \path[3d/project={(A) on lSB}] coordinate (E);
    \path[3d/project={(A) on lSC}] coordinate (F);

    %\path[3d/circumcircle center={A={(E)},B={(B)},C={(C)}}] coordinate (M);
    \path pic[draw=none]{3d circle through 3 points={%
            A={(B)},B={(E)},C={(F)},center name=M}};
    \pgfmathsetmacro{\myr}{tddistance("(B)","(M)")}%     
    \pgfmathsetmacro{\myMC}{TD("(C)-(M)")}
    \pgfmathtruncatemacro{\itest}{screendepth(\myMC)<0?0:1}
    \ifnum\itest=0
    \begin{scope}
        \clip[3d/screen coords] (I) circle[radius=\myR];
        \path pic[3d/hidden]{3d circle through 3 points={%
                A={(B)},B={(E)},C={(F)},center name=M}};
    \end{scope}
    \begin{scope}
        \clip[3d/screen coords,even odd clip] (I) circle[radius=\myR]
        [generous outside path];
        \path pic[3d/visible]{3d circle through 3 points={%
                A={(B)},B={(E)},C={(F)},center name=M}};
    \end{scope}
    \else
    \tikzset{3d/define orthonormal dreibein={A={(B)},B={(C)},C={(F)}}}
    \begin{scope}[x={(ex)},y={(ey)},z={(ez)},shift={(M)}]
        \draw[3d/hidden] (B) arc[start angle=180,end angle=0,radius=\myr];
        \draw[3d/visible] (B) arc[start angle=180,end angle=360,radius=\myr];
    \end{scope}
    \fi
    \path foreach \p/\g in {A/90,B/-90,C/0,S/90,E/180,F/90,I/0,M/-90}
    {(\p)node[c]{}+(\g:2.5mm) node{$\p$}};

    \draw[3d/hidden] (S) -- (A) (S) --(B) (S) -- (C) (A) -- (B) -- (C) -- cycle (A) -- (E) (A) -- (F);
    \end{tikzpicture}

\end{document}

enter image description here