这里又学会一些小技巧:
ld.poly2facet可以把「poly」转为「facets」ld.facetedges可以把「facets」转为「edges」直接作为参数列表传入「绘制」函数\documentclass{standalone}
\usepackage[3d]{luadraw}
\usepackage[svgnames]{xcolor}
\usepackage{fourier-otf}
\begin{document}
\begin{luadraw}{name=spherical_cube}
local ld = luadraw
local pt3d, cpx = ld.pt3d, ld.cpx
local Z = cpx.Z
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},
-- adjust2d = true,
viewdir = {15,75}
}
local sqrt = math.sqrt
require 'luadraw_spherical'
local sM = ld.sM
ld.Hiddenlines = true;ld.Hiddenlinestyle = "dashed"
g:Define_sphere{ color = "magenta!25",edgewidth=8, edgecolor="black" }
local a = 3/sqrt(2)
local S = M(-a,-a,-a)
local O1, O2= a*vecK, -a*vecK
local P = ld.poly2facet(ld.parallelep(S,2*a*vecI,2*a*vecJ,2*a*vecK))
local edges = ld.facetedges(P)
g:DScircle({Origin, vecK},{color="violet",width=8})
g:DSpolyline(edges,{width=8})
g:DScircle({a*vecK, vecK},{color="violet",width=8})
g:DScircle({-a*vecK, vecK},{color="violet",width=8})
g:Dspherical()
g:Dcircle3d(O1,a,vecK,"draw=none, fill=magenta!75, fill opacity=0.4") -- not quite good
g:Dcircle3d(O2,a,vecK,"draw=none, fill=magenta!75, fill opacity=0.4")
local t1,t2,t3,t4 = M(0,-a,a), M(0,a,a), M(-a,0,a), M(a,0,a)
local m1,m2,m3,m4 = M(a,a,0), M(a,-a,0), M(-a,a,0), M(-a,-a,0)
local b1,b2,b3,b4 = M(0,-a,-a), M(0,a,-a), M(-a,0,-a), M(a,0,-a)
for _, p in ipairs{t3,m3,b3,b4} do
g:Dpolyline3d({Origin,p},"teal,thick,dashed")
end
g:Dpolyline3d({Origin,O1,t1},true,"red,thick,dashed")
g:Dballdots3d({Origin,O1,t1,t2,t3,t4,m1,m2,m3,m4,b1,b2,b3,b4},"red")
g:Dlabel3d(
"$O$",Origin,{pos="NE"},
"$C_1$",M(-a,a,a),{},
"$H$",M(0,-a,a),{pos="NW"},
"$A_1$",M(a,-a,a),{pos="W"},
"$D$",M(-a,-a,-a),{},
"$D_1$",M(-a,-a,a),{pos="N"},
"$O_1$",O1,{},
"$A$",M(a,-a,-a),{pos="SW"},
"$B$",M(a,a,-a),{pos="E"},
"$C$",M(-a,a,-a),{},
"$B_1$",M(a,a,a),{},
"$a$",M(a,0,-a),{pos="S"},
"$R$",M(0,-a,a)/2,{node_options="text=red"}
)
g:Show()
\end{luadraw}
\end{document}