간단히 말해서 문제는 타원호가 Z 주위에 있어야 하고 갈색 선에서 시작하고 끝나야 한다는 것입니다...
중심점 주위에 원호와 타원호를 그리고 싶습니다.
그래서 저는 다음 구문을 사용합니다(TikZ 매뉴얼 2.10, 36페이지)
\draw[]([shift=(\wStart:\r)]Z) arc[start angle=\wStart, end angle=\wEnd, radius=\r];
원호에 대해 정의된 값 \wStart
, \wEnd
및 \r
중간점 좌표 Z
(반드시 그럴 필요는 없음 )를 사용하면 작동합니다.(0,0)
을 위한타원호나는 다음에 쓰여진 구문을 사용합니다.TikZ 매뉴얼 2.10, 37페이지
\draw[red] ([shift=(\wStart:\rx)]Z) arc [start angle=\wStart, end angle=\wEnd, x radius=\rx, y radius=\ry];
다음 MWE에서.
하지만 내 "중앙 이동"이 잘못되었거나 작동하지 않는 것 같습니다.(아마도 (?) 시작 각도와 끝 각도가 정확하지 않은 것 같습니다).
어떻게 해야 하나요?
지금:나는 보았다이 스레드(그의 방법으로는 올바른 결과를 얻지 못함) TikZ 구문을 수정하고 싶습니다.
타원호는 갈색 선에서 시작하고 끝나야 합니다...
\documentclass[tikz, margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}[gridded]
% Center
\coordinate[label=below:Z] (Z) at (0,0);
\fill[] (Z) circle[radius=2pt];
% Values ===============
\def\rx{1.75}
\def\ry{1}
\def\r{\rx}
\def\wStart{20}
\def\wEnd{315}
% ====================
% Help lines
\draw[brown] (Z) -- (\wStart:\r);
\draw[brown] (Z) -- (\wEnd:\r);
% Full circle and ellipse
\draw[] (Z) circle[radius=\r];
\draw[] (Z) circle[x radius=\rx, y radius=\ry];
% cirlce arc
\draw[blue] ([shift=(\wStart:\r)]Z) arc [start angle=\wStart, end angle=\wEnd, radius=\r] node[near start]{good};
% ellipse arc
\draw[red] ([shift=(\wStart:\rx)]Z) arc [start angle=\wStart, end angle=\wEnd, x radius=\rx, y radius=\ry] node[near start]{bad};
\end{tikzpicture}
\end{document}
답변1
다른 접근 방식으로는 눈금을 적용하고 호를 그리고 새 각도를 계산할 수 있습니다.
\pgfmathsetmacro\myscale{\ry/\rx}
\pgfmathsetmacro\wStartE{atan(tan(\wStart)/\myscale)}
\pgfmathsetmacro\wEndE{360+atan(tan(\wEnd)/\myscale)}
완전한 예는 다음과 같습니다.
\documentclass[tikz, margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}[gridded]
% Center
\coordinate[label=below:Z] (Z) at (0,0);
\fill[] (Z) circle[radius=2pt];
% Values ===============
\def\rx{1.75}
\def\ry{1}
\def\r{\rx}
\def\wStart{20}
\def\wEnd{315}
% Scale and new angles
\pgfmathsetmacro\myscale{\ry/\rx}
\pgfmathsetmacro\wStartE{atan(tan(\wStart)/\myscale)}
\pgfmathsetmacro\wEndE{360+atan(tan(\wEnd)/\myscale)}
% ====================
% Help lines
\draw[brown] (Z) -- (\wStart:\r);
\draw[brown] (Z) -- (\wEnd:\r);
% Full circle and ellipse
\draw[] (Z) circle[radius=\r];
\draw[] (Z) circle[x radius=\rx, y radius=\ry];
% cirlce arc
\draw[blue] ([shift=(\wStart:\r)]Z) arc [start angle=\wStart, end angle=\wEnd, radius=\r] node[near start]{good};
% ellipse arc
\draw[red,yscale=\myscale] ([shift=(\wStartE:\r)]Z) arc [start angle=\wStartE, end angle=\wEndE, radius=\r] node[near start]{good?};
\end{tikzpicture}
\end{document}
답변2
다음을 사용하여 tkz-elements
컴파일해야 합니다.lualatex
편집: Qrrbrbirlbel님의 댓글을 보고 상황에 맞게 클립을 사용하고 있습니다.
Edit2: Alain Matthes'comment를 통해 문서에서 다음을 읽을 수 있습니다 tkz-elements
.
set_lua_to_tex. 불행하게도 지금은 여러분이 만드는 매크로가 전역적이며 기존 매크로를 덮어쓸 수 있으므로 주의해서 진행해야 합니다. 한 가지 해결책은 문제를 일으키지 않는 매크로 이름을 선택하거나 초기 매크로를 저장하는 것입니다.
% !TeX TS-program = lualatex
\documentclass{standalone}
\usepackage{tkz-elements}
\usepackage{tkz-euclide}
\begin{document}
\begin{tkzelements}
rx = value(1.75)
ry = value(1)
wStart = 20
wEnd = 315
z.Z = point: new (0 , 0)
z.A = point: new (0 , rx)-- to draw the circle
--
c = circle : new (z.Z,z.A)
e = ellipse: radii (z.Z,rx,ry,0)
--
z.Sp = point : polar_deg(rx,wStart)
L.ZSp = line : new ( z.Z , z.Sp )
if wStart <180 then
z.S,_ = intersection (e,L.ZSp)-- Start point
else
_,z.S = intersection (e,L.ZSp)
end
--
z.Ep = point : polar_deg(rx,wEnd)
L.ZEp = line : new ( z.Z , z.Ep )
if wEnd <180 then
z.E,_ = intersection (e,L.ZEp)-- End point
else
_,z.E = intersection (e,L.ZEp)
end
--
-- set_lua_to_tex{"rx","ry","wStart","wEnd"}-- see Alain Matthes'comment
\end{tkzelements}
\begin{tikzpicture}[gridded]
% Edit2
\newcommand{\rx}{\tkzUseLua{rx}}
\newcommand{\ry}{\tkzUseLua{ry}}
\newcommand{\wStart}{\tkzUseLua{wStart}}
\newcommand{\wEnd}{\tkzUseLua{wEnd}}
%
\tkzGetNodes
\tkzDrawPoints(Z,S,S',E,E')
\tkzLabelPoints(Z)
\tkzDrawCircle[blue](Z,A)
%\draw[green!70!black] (Z) -- +(\wStart:2*\rx) arc[start angle=\wStart, end angle=\wEnd, radius=2*\rx] -- cycle;
\begin{scope}
% With Qrrbrbirlbel's comment
\clip [overlay](Z) -- +(\wStart:2*\rx) arc[start angle=\wStart, end angle=\wEnd, radius=2*\rx] -- cycle;
%
\tkzDrawEllipse[red](Z,\rx,\ry,0)
\end{scope}
\tkzDrawSegments[brown](S,Z Z,E)
\tkzDrawSegments[brown,dashed](S,S' E,E')
\end{tikzpicture}
\end{document}
답변3
"TikZ-ellipse를 해킹"하는 것이 힘든 작업이 될 수 있다는 두려움 때문에 다음을 사용했습니다.
중심을 기준으로 한 극 형태그리고 다음 plot
:
\documentclass[tikz, margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}[gridded,
]
% Values ===============
\def\rx{1.75}
\def\ry{1}
\def\r{\rx}
\def\wStart{20}
\def\wEnd{315}
% ====================
% Center
\coordinate[label=below:{(0,0)}] (O) at (0,0);
\coordinate[label=below:Z] (Z) at (1.3,2);
\foreach \P in {O,Z} \fill[] (\P) circle[radius=2pt];
% Help lines
\draw[brown] (Z) -- +(\wStart:\r);
\draw[brown] (Z) -- +(\wEnd:\r);
% Full circle and ellipse
\draw[] (Z) circle[radius=\r];
\draw[] (Z) ellipse[x radius=\rx, y radius=\ry];
% circle arc
\draw[blue] ([shift=(\wStart:\rx)]Z) arc [start angle=\wStart, end angle=\wEnd, radius=\r];
% ellipse arc
\tikzset{% https://en.wikipedia.org/wiki/Ellipse#Polar_form_relative_to_center
declare function={
E=sqrt(\rx^2-\ry^2)/\rx;
PolarEllipse(\x)=\ry/sqrt(1-E^2*cos(\x)^2); }, }%
\draw[red, very thick,
domain=\wStart:\wEnd,
samples=111
] plot ([shift={(Z)}]\x:{PolarEllipse(\x)});
\end{tikzpicture}
\end{document}
답변4
재미를 위해: 이것은 원과 타원을 사용하고 원하지 않는 부분을 잘라냅니다. -| (\r,0) |-
잘린 영역을 테두리까지 확장하려면 를 사용하십시오 .
\documentclass[tikz, margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}[gridded]
% Center
\coordinate[label=below:Z] (Z) at (0,0);
\fill[] (Z) circle[radius=2pt];
% Values ===============
\def\rx{1.75}
\def\ry{1}
\def\r{\rx}
\def\wStart{20}
\def\wEnd{315}
% ====================
% Help lines
\draw[brown] (Z) -- (\wStart:\r);
\draw[brown] (Z) -- (\wEnd:\r);
% Full circle and ellipse
\draw[] (Z) circle[radius=\r];
\draw[] (Z) circle[x radius=\rx, y radius=\ry];
% cirlce arc
\begin{scope}[even odd rule]
\clip (-\r,-\r) rectangle (\r,\r)% clip exterior
(\wStart:2) -- (Z) -- (\wEnd:2) -| (\r,0) |- cycle;% clip interior
\draw[blue] (Z) circle [radius=\r];
% ellipse arc
\draw[red] (Z) ellipse [x radius=\rx, y radius=\ry];
\end{scope}
\end{tikzpicture}
\end{document}