pgfplots: Klein şişesi nasıl çizilir?
Aug 19 2020
Bunun gibi iddiasız bir Klein şişesi çizmek istiyorum
(bu şu anlama gelir: yüzey çizgileri iyidir , ancak pek çok renk yoktur; aslında aşağıdaki MWE'mde olduğu gibi gri tonlama da yoktur )
wikipedia bana şunu söylüyor:
Ama bununla anlıyorum
Ne ayarlamam gerekiyor?
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}[
declare function={
b=2;
h=6;
r(\u)=(2-cos(\u));
p(\u)=exp( -(0.5*\u-pi)*(0.5*\u-pi) );
q(\u)=exp( -(\u-1.5*pi)*(\u-1.5*pi) );
X(\u,\v)=b*(1-sin(\u))*cos(\u)+r(\u)*cos(\v)*(2*p(\u)-1);
Y(\u,\v)=r(\u)*sin(\v);
Z(\u,\v)=h*sin(\u)+0.5*r(\u)*sin(\u)*cos(\v)*q(\u);
},
]
\begin{axis}[
xlabel=$x$, ylabel=$y$, zlabel=$z$,
%view/h=-10,
]
\addplot3[
surf,
z buffer=sort,
colormap={mycolormap}{%
color=(black)
color=(white)
},
%semitransparent,
trig format plots=rad,
domain=0:2*pi,
domain y=0:2*pi,
%restrict y to domain=-1:1,
%samples=41, samples y=25,
variable=\u, variable y=\v,
point meta=u,
] ({X(\u,\v)}, {Y(\u,\v)}, {Z(\u,\v)});
\end{axis}
\end{tikzpicture}
\end{document}
Yanıtlar
5 NguyenVanChi Aug 19 2020 at 23:41
Nihayet .
import graph3;
import palette;
size(300);
currentprojection=orthographic(0.3,-1,0.4);
real b=2,h=6;
triple f(pair t) {
real u=t.x;
real v=t.y;
real r=2-cos(u);
real x=b*cos(u)*(1-sin(u))+r*cos(v)*(2*exp(-((u/2-pi)^2))-1);
real y=r*sin(v);
real z=h*sin(u)+0.5*r*sin(u)*cos(v)*exp(-((u-3*pi/2)^2));
return (x,y,z);
}
surface s=surface(f,(0,0),(2pi,pi),15,15,Spline);
// s.colors(palette(s.map(zpart),Rainbow()));
// draw(s,meshpen=black+thick());
draw(s,lightgray+opacity(0.7),meshpen=black+thick());
Sadece Asymptote ile karşılaştırmak için .
Nereden https://asymptote.sourceforge.io/gallery/3Dwebgl/Klein.asy, Alırım
import graph3;
size(300);
currentprojection=orthographic(0.6,-1,0.8);
real b=2,h=6;
triple f(pair t) {
real u=t.x;
real v=t.y;
real r=2-cos(u);
real x=b*cos(u)*(1-sin(u))+r*cos(v)*(2*exp(-((u/2-pi)^2))-1);
real y=r*sin(v);
real z=h*sin(u)+0.5*r*sin(u)*cos(v)*exp(-((u-3*pi/2)^2));
return (x,y,z);
}
surface s=surface(f,(0,0),(2pi,2pi),15,15,Spline);
draw(s,lightyellow, meshpen=black+thick());
veya
import graph3;
size(300);
currentprojection=orthographic(-0.5,1,0.5);
triple f(pair t) {
real u=t.x;
real v=t.y;
// https://commons.wikimedia.org/wiki/File:Klein_bottle.svg
real x= v<2*pi ? (2.5-1.5*cos(v))*cos(u):
v<3*pi ? -2+(2+cos(u))*cos(v): -2+2*cos(v)-cos(u);
real y= v<2*pi ? (2.5-1.5*cos(v))*sin(u): sin(u);
real z= v<pi ? -2.5*sin(v):
v < 2*pi ? 3*v-3*pi:
v<3*pi ? (2+cos(u))*sin(v)+3*pi: -3*v+12*pi;
return (x,y,-z);
}
surface s=surface(f,(0,0),(2pi,4pi),15,15,Spline);
draw(s,lightyellow+opacity(.5), meshpen=black+thick());
Normal şekilde etkileşim kurabilirsiniz.
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'