有没有更好的方法只画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}























问 这里画交线时,怎么画比较优雅?