调整圆锥的边界线

调整圆锥的边界线

我想创建一个尺寸(半径和高度)可变的圆锥模型。我当前模型的问题是,当高度太小时,虚线圆不会被灰色图形覆盖。有什么办法可以解决这个问题吗?

在此处输入图片描述

在此处输入图片描述

%%%%%%%%%%%%%%%%%% INTRODUCTION %%%%%%%%%%%%%%%%%%
\documentclass[border=10pt]{standalone}

%%%%%%%%%%%%%%%%%% PACKAGE %%%%%%%%%%%%%%%%%%
\usepackage{tikz, tkz-euclide}%  permet de dessiner des figures, des graphiques
\usepackage{adjustbox}% permet de déterminer une taille de fenêtre
%%  FONT
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tgadventor}% paquet de police de caractère TGadventor
\usepackage{sansmath}%  Copie-colle la police active dans 
%                       \sfdefault (/!\ N'EST PAS UNE POLICE DE CARACTÈRES)
\usepackage{xcolor}
%%%%%%%%%%%%%%%%%% INPUT %%%%%%%%%%%%%%%%%%
%\input{preamble}
%\input{parameters}
%\input{types/f3d_fig}

%%%%%%%%%%%%%%%%%% SETUP %%%%%%%%%%%%%%%%%%
\tikzset{volum3D/.style={font={\sansmath\sffamily\large}, line width=0.4mm, line cap=round, line join=round, >=latex,}} 

%%%%%%%%%%%%%%%%%%%%%%%% SPHERE RADIUS LABEL %%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\tikzset{pics/cone radlab/.style={code={%
    \tikzset{cone radlab/.cd,#1}%
    \def\pv##1{\pgfkeysvalueof{/tikz/cone radlab/##1}}
    \pgfmathsetmacro{\myan}{atan2(\pgf@zx,\pgf@xx)}
    \begin{scope}[local bounding box=sph]
        \path[cone radlab/corps]
        %%%     Patrie supérieur
        plot[smooth,variable=\t,samples=19,domain=\myan:{-1*sign(\myan)*180+\myan}]
        (0,
        \pv{height},
        0)
        --
        %%%     Patrie Inférieur
        plot[smooth,variable=\t,samples=19,domain=\myan:{-1*sign(\myan)*180+\myan}]
        ({\pv{ray}*\pv{scale}*cos(\t)},
        0,
        {\pv{ray}*\pv{scale}*sin(\t)})
        -- cycle
        ;
        \draw[thick, densely dashed]
        %%%       Arc Avant
        plot[smooth,variable=\t,samples=19,domain={-1*sign(\myan)*180+\myan}:\myan]
        ({\pv{ray}*\pv{scale}*cos(\t)},
        0,
        {\pv{ray}*\pv{scale}*sin(\t)})
        %%%       Arc Arrière
        plot[smooth,variable=\t,samples=19,domain={sign(\myan)*180+\myan}:\myan]
        ({\pv{ray}*\pv{scale}*cos(\t)},
        0,
        {\pv{ray}*\pv{scale}*sin(\t)})
        ;
    \end{scope}
    %%  Dot (0,0)
    \draw 
    (0,0,0) node[circle, fill=black, inner sep=1pt] {} coordinate (o)
    (\pv{ray},0,0) coordinate (r)
    ;
    %%  Barre de mesure du rayon 
    \draw[densely dashed, <->] 
    (o) -- 
    (r) node[midway, below, inner sep=6pt] {\pv{lab}}
    ;
  }},
  cone radlab/.cd,
  ray/.initial=5,
  height/.initial=10,
  lab/.initial=5 cm,
  scale/.initial=1,
  corps/.style={draw,fill=black!15},
}
\makeatother
%%%%%%%%%%%%%%%%%% DOCUMENT %%%%%%%%%%%%%%%%%%
\begin{document}
\begin{tikzpicture}[volum3D, x={(0:1cm)}, y={(90:1cm)}, z={(89:0.4cm)}]

% calibration cross
%\pic at (5,0,0) {calcross};

%   Figures
\pic{cone radlab};
\node[below, yshift= -36pt, text=orange] at (0,0,0) {D};

\end{tikzpicture}
\end{document}

用按高度计算的方程式来解决这个问题是不可能的吗?所以这部分应该是:‘绿色部分——左侧蓝色部分——左侧红色部分——右侧红色部分——右侧蓝色部分——循环’

在此处输入图片描述

在此处输入图片描述

答案1

我不确定我是否完全理解您要做什么,所以这可能不是您想要的!

如果你只想画一个圆锥,你可以手工画。在这种情况下,你只需要在圆锥的底部椭圆上找到切线通过顶点的点(即图中红色和蓝色部分的交点)。

对于圆(而不是椭圆),使用三角函数,您可以轻松找到“目标”角度的表达式。如果我没记错的话,对应点在缩放时应该是“不变的”,因此您可以绘制圆的图形,然后沿 y 轴缩放。

\documentclass[tikz,border=5mm]{standalone}

\begin{document}

\begin{tikzpicture}

  \foreach \R in {1.1,1.6,...,4}{
    \begin{scope}[shift={(5*\R,0)}]

      %% Draw circle
      \draw[dotted] (0,0) circle (1);

      %% Compute the angle (and plot the angle)
      \pgfmathsetmacro\angle{acos(1/\R)}
      \draw[opacity=.1] (90+\angle:1)--(0,0)--(90+360-\angle:1);

      %% Draw the cone
      \draw (90+\angle:1) arc (90+\angle:90+360-\angle:1) -- (0,\R) -- cycle;

    \end{scope}
  }

  \def\R{6}
  \begin{scope}[shift={(22,0)},yscale=.5]
    \draw[dotted] (0,0) circle (1);
    \pgfmathsetmacro\angle{acos(1/\R)}
    \draw (90+\angle:1) arc (90+\angle:90+360-\angle:1) -- (0,\R) -- cycle;
  \end{scope}

\end{tikzpicture}

\end{document}

这使 结果 请注意,因为我们缩放了整个图形,所以您需要将变量乘以\R该值的倒数yscale

如果你仍然想使用 3D 坐标系,这可能会更复杂...你可以看看这个例子:http://www.texample.net/tikz/examples/map-projections/如果我理解正确的话,你的问题对应于绘制纬度圆。

相关内容