如何绘制正方体的棱切球?

发布于 2026-09-21 16:56:25

如题,希望绘制下面的3D图像:

image.png

查看更多

关注者
0
被浏览
33
1 个回答
Sagittarius Rover
Sagittarius Rover 13小时前
这家伙很懒,什么也没写!

这里又学会一些小技巧:

  • 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}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览