我是用scale调整红色交线a,b长度的,然后标签交线a,b都是在直线上取点的,有没有更好的方法只画alpha和beta面内的交线,我想可能是裁剪吧,或者计算交线在面内的两个端点.
另外直线的点法式local l={M(0,1,1),vecK}中,每次画直线都是以该点为中心画直线的.很像表示平面的矩形是以该点为中心画一个矩形

\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 = {-5,5,-5,5},
viewdir = {"yz",0.75,40},
-- bbox=false
}
local P1={M(0,0,1.5),vecK}
local P2={Origin,vecK}
local m=ld.rotate3d(vecK,-45,{Origin,vecI})
local P3={M(0,0,0.75),m}
local O1,u1,v1=ld.orthoframe(P1)
local O2,u2,v2=ld.orthoframe(P2)
local O3,u3,v3=ld.orthoframe(P3)
local a = ld.interPP(P1, P3)
--g:Dline3d(a, "Navy, very thick")
local b = ld.interPP(P2, P3)
--g:Dline3d(b, "Navy, very thick")
ld.Hiddenlines = true; ld.Hiddenlinestyle="dashed"
g:Dscene3d(
g:addPlane(P1,{contrast=0,rectangle={u1,4,2},edge=true,edgecolor="cyan"}),
g:addPlane(P2,{contrast=0,rectangle={u2,4,2},edge=true,edgecolor="DarkBlue"}),
g:addPlane(P3,{contrast=0,rectangle={u3,4,2},edge=true,edgecolor="black"}),
g:addLine(a,{color="red",scale=0.2}),
g:addLine(b,{color="red",scale=0.2})
)
g:Dlabel3d(
"$\\alpha$",-2*u1-v1+O1,{pos="NE",node_options="cyan,xshift=0.3cm"},
"$\\beta$",-2*u2-v2,{pos="NE",node_options="text=blue,xshift=0.4cm",dist=0},
"$\\gamma$",2*u3-v3+O3,{pos="NE",node_options="xshift=-0.1cm"}
)
local A= a[1]+1.3*a[2]
local C= b[1]+1.3*b[2]
--g:Ddots3d({A,C}, "cyan,scale=2")
g:Dlabel3d(
"$a$",A,{pos="W",node_options="red"},
"$b$",C,{pos="W",node_options="red"}
)
--g:Dpolyline3d({{Origin,3*vecI},{Origin,3*vecJ},{Origin,3*vecK}}, "thick,-Stealth")
g:Show()
\end{luadraw}
\end{document}
有没有更好的方法只画alpha和beta面内的交线,我想可能是裁剪吧,或者计算交线在面内的两个端点.
另外直线的点法式local l={M(0,1,1),vecK}中,每次画直线都是以该点为中心画直线的
这里的交线 local L1,L2 = ld.interPP(P1,Ps),ld.interPP(P2,Ps)获得的直线形式为形如{A,u},这里的A是交线“a”和“b”的中点,很巧的是,由于我们的刻意构造,在这个视角下,交线的方向恰为vecI所在的方向,同时我们在:
g:addPlane(P1,{contrast=0,rectangle={vecI,2,4},edge=true,edgecolor="DarkBlue",hidden=true}),
g:addPlane(P2,{contrast=0,rectangle={vecI,2,4},edge=true,edgecolor="DarkBlue",hidden=true}),沿着vecI绘制的长度为2个单位,所以前后延长1个单位即可恰好得到两个端点:
g:Dpolyline3d({{O1-vecI,O1+vecI},{O2-vecI,O2+vecI}},"semithick,red")完整代码:
\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.5,2.5},
viewdir = {"yz",0.75,40}
}
local vecN = ld.rotate3d(vecK,-50,{Origin,vecI})
local P1,P2 = {0.75*vecK,vecK},{-0.75*vecK,vecK}
local Ps = {Origin,vecN}
local L1,L2 = ld.interPP(P1,Ps),ld.interPP(P2,Ps)
ld.Hiddenlines = true; ld.Hiddenlinestyle="dashed"
g:Dscene3d(
g:addPlane(P1,{contrast=0,rectangle={vecI,2,4},edge=true,edgecolor="DarkBlue",hidden=true}),
g:addPlane(P2,{contrast=0,rectangle={vecI,2,4},edge=true,edgecolor="DarkBlue",hidden=true}),
g:addPlane(Ps,{contrast=0,rectangle={vecI,2,4.5},edge=true,edgecolor="Orange",hidden=true})
)
local O1,_ = table.unpack(L1)
local O2,_ = table.unpack(L2) --
g:Dpolyline3d({{O1-vecI,O1+vecI},{O2-vecI,O2+vecI}},"semithick,red")
g:Dlabel3d(
"$\\gamma$",O2+0.9*vecJ+1.1*vecI-0.6*vecK,{},
"$\\alpha$",O1-1.1*vecJ+1.1*vecI,{pos="NE",node_options="text=DarkBlue"},
"$\\beta$",O2-2.25*vecJ+1.1*vecI,{},
"$a$",O1,{pos="W",node_options="text=red"},
"$b$",O2,{}
)
g:Show()
\end{luadraw}
\end{document}