
Gostaria de traçar uma linha normal limitada a uma superfície em um ponto.
A superfície é y=x
e o ponto é (1/2,1/2,1)
. O gradiente é (-1,1,0)
e no ponto (1/2,1/2,1)
ainda é o mesmo, portanto a linha normal seria (x-1/2)/(-1)=(y-1/2)/(1)=(z-1)/(0)
, portanto a linha é descrita por (.5,.5,1)+t(-1,1,0)
.
No entanto, quero que a linha sejalimitado, para fazer umavetor diretor unitário, mas não sou capaz de fazer isso. Estou usando t
entre 0
e 1
, mas eles traçam uma linha longa; Eu quero que seja um vetor decomprimento1
.
Não tenho certeza se essa matemática está correta. Se eu encontrar o vetor unitário dele (-1,1,0)
, (-1,1,0)/(sqrt(2))
ou (-sqrt(2)/2,sqrt(2)/2,0)
seja, ainda não tenho um vetor de comprimento 1
(quando t
estiver entre 0
e 1
).
Aqui está meu MWE:
\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis} [
title={Without normalizing $(-1,1,0)$ ($t\in[0,1]$)},
axis on top,
axis lines=center,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
ticklabel style={font=\tiny},
view={115}{25}
]
\addplot3[opacity=.5,surf,samples=21,variable=\t,variable y=\s,domain=0:2,y domain=0:90,z buffer=sort,colormap={red}{color=(red) color=(red)}] ({\t*cos(\s)*(sqrt(2)*.5)},{\t*cos(\s)*(sqrt(2)*.5)},{\t*sin(\s)});%Red S
\addplot3[-stealth,variable=\t,domain=0:1] ({1/2+t},{1/2-t},{1});
\end{axis}
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\begin{axis} [
title={Normalizing $(-1,1,0)$ ($t\in[0,1]$)},
axis on top,
axis lines=center,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
ticklabel style={font=\tiny},
view={115}{25}
]
\addplot3[opacity=.5,surf,samples=21,variable=\t,variable y=\s,domain=0:2,y domain=0:90,z buffer=sort,colormap={red}{color=(red) color=(red)}] ({\t*cos(\s)*(sqrt(2)*.5)},{\t*cos(\s)*(sqrt(2)*.5)},{\t*sin(\s)});%Red S
\addplot3[-stealth,variable=\t,domain=0:1] ({1/2+(sqrt(2)/2)*t},{1/2-(sqrt(2)/2)*t},{1});
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
Até a linha tem uma qualidade ruim, parece pixelada:
Alguém sabe como produzir um vetor de comprimento 1
ou o que estou perdendo?
Alguns links de interesse:
pgfplots
: posicionar um vetor normal e tangente em uma superfície 3D- Encontre uma boa visualização de uma função por partes usando
tikzpicture
o ambiente [Noverleaf]
Obrigado!!
Responder1
Espero não estar perdendo nada óbvio. Você só precisa dividir por sqrt(2)
no exemplo da esquerda para chegar a
\documentclass{article}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis} [
title={Normalizing},
axis on top,
axis lines=center,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
ticklabel style={font=\tiny},
view={115}{25}
]
\addplot3[opacity=.5,surf,samples=21,variable=\t,variable y=\s,domain=0:2,y domain=0:90,z buffer=sort,colormap={red}{color=(red) color=(red)}] ({\t*cos(\s)*(sqrt(2)*.5)},{\t*cos(\s)*(sqrt(2)*.5)},{\t*sin(\s)});%Red S
\pgfmathsetmacro{\msq}{sqrt(1/2)}
\addplot3[-stealth,variable=\t,samples at={0,\msq},samples y=0] ({1/2+t},{1/2-t},{1});
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
A "pixelação" desapareceu após a adição de samples y=0
.