我一直使用这种方法pst-solides3d
来生成表面,然后将它们导入以Adobe Illustrator
将它们变成渐变网格。如果我想要非常精确,这个过程可能会很耗时,即使只有 4 个顶点,我也必须手动调整它们的位置和所有 8 个手柄,然后从原始表面拾取颜色,相当费力。请参阅我的帖子这里
我的问题是:pst-solides3d 是否可以实现上述过程的自动化?
答案1
这实际上不是对您的问题的回答,因此您可能需要等待有关您的问题的其他答案pst-solides3d
。
这个答案是为了建立知识库并解决链接问题中的最后一句话https://graphicdesign.stackexchange.com/questions/42022/transforming-3rd-party-discrete-gradient-mesh-to-ais-smooth-gradient-mesh,即
或者,如果有更好的方法,我也想知道。谢谢。
据我了解,你想要
- 平滑的渐变(=平滑的阴影)
- 四边形面片
- 矢量图形
这个特定问题可以通过 来解决pgfplots
。我使用了莫比乌斯带,因为我既没有您的数据文件,也没有您的表面的参数化:
- 双线性补丁。补丁边界的一阶分辨率,双线性颜色插值:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\usepgfplotslibrary{patchplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3[
surf,
samples=25, samples y=25,
variable=r, domain=-1:1,
variable y=a, domain y=0:2*pi,
trig format plots=rad,
shader=faceted interp,
patch type=bilinear,
]
({cos(a) * (1+r/2 * cos(a/2))},
{sin(a) * (1+r/2 * cos(a/2))},
{r/2 * sin(a/2)});
\end{axis}
\end{tikzpicture}
\end{document}
- 双三次贴片。贴片边界的三阶分辨率(和较少的贴片),双线性颜色渐变:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\usepgfplotslibrary{patchplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3[
surf,
samples=10, samples y=10,
variable=r, domain=-1:1,
variable y=a, domain y=0:2*pi,
trig format plots=rad,
shader=faceted interp,
patch type sampling,
patch type=bicubic,
]
({cos(a) * (1+r/2 * cos(a/2))},
{sin(a) * (1+r/2 * cos(a/2))},
{r/2 * sin(a/2)});
\end{axis}
\end{tikzpicture}
\end{document}
这两个示例都需要patchplots
库,并且都有一个依赖于r
和的参数化表面a
。参数化来自维基百科。请注意,trig format plots=rad
将默认配置从度数切换到弧度。
双三次补丁非常难以生成:每个补丁有 16 个点。关键是patch type sampling
大大简化了这一过程——如果输入数据无论如何都是从函数中采样的。如果您有表格输入,则必须自行提供补丁。
颜色取自colormap
:最小z
坐标映射到 的第一个颜色colormap
,最大z
坐标映射到 的最后一个颜色colormap
。 中间的所有内容都线性映射到colormap
。 进一步阅读:键point meta
(选择要使用的标量值)和colormap
(哪个colormap
),也与“具有明确颜色的表面图”相关。
相关问题:使用程序图形创建贝塞尔曲面