比较遵照你的方案(基于g:Dscene3d)的方法:
\documentclass{standalone}
\usepackage[3d]{luadraw}
\usepackage[svgnames]{xcolor}
\usepackage{fourier-otf}
\begin{document}
\begin{luadraw}{name=intersected_surface_Dscene}
local ld = luadraw
local pt3d, cpx = ld.pt3d, ld.cpx
local M, Mc, Ms = pt3d.M, pt3d.Mc, pt3d.Ms
local Origin, vecI, vecJ, vecK = pt3d.Origin, pt3d.vecI, pt3d.vecJ, pt3d.vecK
local g = ld.graph3d:new{
window3d = {-5,5,-5,5,-5,5},
window = {-3,3,-2,2},
viewdir = {"yz",0.75,40}
}
local vecN = ld.rotate3d(vecK,-70,{Origin,vecI})
ld.Hiddenlines = true; ld.Hiddenlinestyle="dashed"
g:Dscene3d(
g:addPlane({Origin,vecK},{contrast=0,rectangle={vecI,2,4},edge=true,edgecolor="DarkBlue",hidden=true}),
g:addPlane({Origin,vecN},{contrast=0,rectangle={vecI,2,2.5},edge=true,edgecolor="Orange",hidden=true}),
g:addDots({Origin}),
g:addLabel(
"$\\ell$",2.5*vecI,{pos="SW"},
"$P$",Origin,{pos="E",dist=0.1},
"$\\alpha$",vecI-2*vecJ,{pos="NE",dir={vecJ,-vecI},color="DarkBlue",dist=0},
"$\\beta$",ld.rotate3d(vecI-vecJ,-70,{Origin,vecI}),{pos="E",dir={-vecI,pt3d.prod(vecN,-vecI)},color="Orange"}
)
)
g:Dpolyline3d({-2.5*vecI,2.5*vecI}, "thick")
g:Show()
\end{luadraw}
\end{document}
这里的「灰色」的关键在于 contrast 选项(color的默认值就是white,我是能省就省的,所以我不写):

Some Notes and Comments
- 我在构造曲面和曲线的时候是比较遵从直角坐标系的,交线的方向就是
vecI - 我采用
ld.rotate3d来处理这里的旋转,这样用到的点比较少 - 从原图来看,我不知道你为何要用中心投影,更合理的方法应该是斜投影
viewdir = {"yz",0.75,40}(类似斜二测画法) - 要注意的是,如果一个面是透明的,那么在它后面的线都是可见的,不会变成虚线,只是颜色稍微变暗;相反只有当一个面是不透明的,那么它后面的线才会被
ld.Hiddenlines = true; ld.Hiddenlinestyle="dashed"控制。如果一个面是半透明的,那么不会(也不应该)出现虚线
可以对比一下思路 :-)






















问 怎么用luadraw或者其他的来实现下面的效果,即面面相交.或者有更美丽的效果?