Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
tikz 임의의 곡선에서 접선 그리기
2014.05.28 18:11
tikz/pgf 중에서 잘 안되는 것 중의 하나가 임의의 곡선에서 접선 그리는 것입니다.
그림에서 곡선과 직선의 교점을 구하는 데까지는 성공했는데 (intersection)
죽어도 그 점에서 접선을 못 그리겠어요.
며칠째 구글을 뒤져봐도 실마리를 전혀 못찾고 있습니다.
tikz 매뉴얼에 "tangent cs:"라는 부분이 나오긴 하는데, 그 부분을 잘 모르겠습니다.
*가급적 tkz-euclide, tkz-fnc 같은 패키지의 도움은 받지 않으려고 합니다.
사실, 곡선도 너무 허접하게 그렸어요. 양끝 두 점을 정하고 컨트롤 포인트 두 개를 찍어 둥글리는 원시적인 방법을...
경제학의 등량곡선 중의 하나인데 정확히 함수만 알아도 비슷하게 그리겠구만... \(\frac{a}{x^2}+ \frac{b}{x}\) 정도의 그래프 모양일 것 같은데...
\documentclass[nanum]{oblivoir}
\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,calc,intersections,decorations.markings,shapes.gates.logic.US,trees,positioning,datavisualization,datavisualization.formats.functions}
\begin{document}
\begin{tikzpicture}[>=stealth,font=\small]
\draw[very thin,color=gray,step=0.5,] (-1,-1) grid (8,8);
\draw[->] (-0.2,0) -- (8,0) node[below] {$X_d$ (국산)};
\draw[->] (0,-.2) -- (0,8) node[left] {$X_m$ (수입)};
\draw[name path=R,thick,domain=0:5] plot (\x,1.3*\x) node[right] {$R$};
\coordinate (a) at (.5,7.5);
\coordinate [label=right:{$X=10$}] (b) at (7.5,.3);
\coordinate (c) at ($(a)+(1,0)$);
\coordinate [label=right:{$X=15$}] (d) at ($(b)+(0,1)$);
% 곡선 그리기
\draw[name path=X10,thick,color=red] (a) .. controls (1,2.5) and (2.5,1) .. (b);
\draw[name path=X15,thick,color=blue] (c) .. controls (1.5,5) and (4,2) .. (d);
\path [name intersections={of=R and X10, by=A}];
\path [name intersections={of=R and X15, by=C}];
\node at (A)[right] {$A$};
\node at (C)[right] {$C$};
\end{tikzpicture}
\end{document}
댓글 7
-
ischo
2014.05.28 21:48
-
Progress
2014.05.29 09:49
고맙습니다. 좀더 본문을 읽어보니 CES 방정식에 의해 표현되는 등량곡선이라고 합니다.
\(X^\alpha = \left[\frac{X_d}{A_d} \right]^\alpha + \left[\frac{X_m}{A_m} \right]^\alpha\)
where \(X_d\)와 \(X_m\)은 각각 국산 및 수입 재화의 양, \(X\)는 복합재의 양.
\( A_d \), \(A _m\) 및 \(\alpha\,(\alpha < 1)\)는 매개변수.
가급적 정확한 함수 형태를 얻고 싶어
임의의 값을 넣고 함수식을 세워 그려보려고 했는데 \(\alpha\) 값이 1보다 작다는 조건 때문인지
\(0<x<1\) 구간에서 그래프가 판면을 꿰뚫고 나가 쉽지 않더라고요. ^^
-
nanim
2014.05.28 22:59
\path[name path=fakecirclea] (A) circle[radius=1pt];
\path[name path=fakecirclec] (C) circle[radius=1pt];
\draw[green, very thick,name intersections={of=X10 and fakecirclea},shorten <=-3cm,shorten >=-3cm] (intersection-1) -- (intersection-2);
\draw[green, very thick,name intersections={of=X15 and fakecirclec},shorten <=-4.5cm,shorten >=-5cm] (intersection-1) -- (intersection-2);직선과 곡선의 교점인 A와 C 위치에 반지름이 1pt인 가상의 원을 그리고 그 원과 곡선의 두 교점을 직선으로 이은 다음 연장하는 트릭입니다.
요컨대, 다음과 같은 아이디어를 이용한 것입니다.
-
Progress
2014.05.29 10:07
고맙습니다.
반지름을 아주 작게 만드는 것이 기발한 발상이군요. 그리고 특정 좌표와 좌표를 이은 선분을 좀더 늘이거나 줄이고 싶을 때 shorten을 사용하는 줄 처음 알았습니다.
tex.stackexchange.컴에서 접선 그리는 글타래를 봤는데, 특히 참고한 게 다음 게시물이었습니다.
근데 막상 적용해보려니 잘 안 되더라고요. 조금 더 연구해봐야겠습니다.
-
nanim
2014.05.29 10:25
말씀하신 웹페이지에서 토론되고 있는 방법을 사용하려면 첨부파일과 같이 할 수는 있습니다.
첨부파일의 43--46행을 보면
\draw[tangent=0.45,name path=X10,thick,color=red] (a) .. controls (1,2.5) and (2.5,1) .. (b);
\draw[orange,thick, use tangent] (-3,0)--(3,0);
\draw[tangent=0.42,name path=X15,thick,color=blue] (c) .. controls (1.5,5) and (4,2) .. (d);
\draw[orange,thick, use tangent] (-3,0)--(3,0);이렇게 되어 있는데 이 때 tangent=<real> 여기서 <real>에 해당하는 값은 곡선 X=10의 출발점에서 교점 A까지의 길이가 이 곡선 전체 길이에서 차지하는 비율입니다. (첨부파일의 보기에서는 정말 대충 눈대중으로 준 값이고요....)
tikz로는 이 값을 계산하기 쉽지 않은 것으로 생각됩니다.마침 김도현 교수께서 metapost 예를 보여주셨는데 여기서는 소위 "진행시간"이라는 것으로 이 값을 간단히 구할 수 있는 거죠.
-
DohyunKim
2014.05.29 09:17
재미로 한번 번역해봤습니다. 이참에 메타포스트로 전향하심이...
https://gist.github.com/dohyunkim/e12fa618f2fd6f9fcdbe
-
Progress
2014.05.29 09:41
감사합니다. 루아텍은 MP를 바로 해석할 수 있어 좋은 것 같아요.
문법도 tikz랑 꽤 비슷한 것 같습니다.
지금 당장은 루아텍을 사용하지 않지만, 천천히 그쪽으로 넘어가려합니다.
C점의 접선이 X=10 곡선을 뚫고 가야해서 남동쪽 선분 길이를 1.5배 해주었습니다.
draw (-C1 -- 1.5*C1) shifted C2 withcolor juwhang;
(X=10,15의 의미를 살리는 것이 아니고) 등량곡선과 그 기울기만을 그리는 것이 목적이라면...
등량선(즉 등고선)의 식을 쌍곡선으로 두는 것이 간단한 방법 중 하나입니다.
위 그림에서 A=(4,5)라 하면, A를 지나는 등량선의 식은 XY=20 (즉, Y=20/X)로 하면 되겠지요.
이 경우 접선의 방정식은 아실 것이고요(X절편 4, Y절편 5인 직선).
C=(6,7.5)를 지나는 등량선의 식은 Y=45/X가 되겠네요.