如何绘制长方体的外接球?

发布于 2026-09-22 01:42:29

如题,如何绘制长方体的外接球:

image.png

查看更多

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

Analysis

需要指出的是,原图的坐标也是糊弄的...

image.png

这里的四个点并不是真正的交点,原图就是在糊弄....!!!

\documentclass{standalone}
\usepackage[3d]{luadraw}
\usepackage[svgnames]{xcolor}
\usepackage{fourier-otf}
\begin{document}
    \begin{luadraw}{name=cuboid_sphere}
    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},
        -- adjust2d = true, 
        viewdir = {0,75}
    }
   require 'luadraw_spherical'
    local sM = ld.sM
    ld.Hiddenlines = true;ld.Hiddenlinestyle = "dashed"
    g:Define_sphere{ color = "", edgewidth=8, edgecolor="black" }
    local h = 1.25
    local O1, O2 = -h*vecK, h*vecK
    local Out1, Out2 = {}, {}
    g:DScircle({O1,vecK},{out=Out1});g:DScircle({O2,vecK},{out=Out2});
    local D,B = table.unpack(Out1);
    local B1,D1 = table.unpack(Out2)
    g:Dlabel3d(
        "$O$",Origin,{pos="SW"},
        "$A$",A,{pos=""},
        "$A_1$",A1,{},
        "$B$",B,{},
        "$B_1$",B1,{},
        "$C$",C,{},
        "$C_1$",C1,{},
        "$D$",D,{},
        "$D_1$",D1,{}
    )    
    g:Dspherical()
    local R = math.sqrt(3^2-h^2) 
    -- g:Dballdots3d({Origin,B,B1,D,D1,O1,O2},"red",0.75)
    -- g:Dballdots3d({M(0,-R,-h),M(0,R,-h),M(0,R,h),M(0,-R,h)},"blue",0.75)
    g:Dpolyline3d({B,D,D1,B1},true,"red")
    g:Dpolyline3d({M(0,-R,-h),M(0,R,-h),M(0,R,h),M(0,-R,h)},true,"blue")
    g:Show()
\end{luadraw}
\end{document}

image.png

image.png

蓝色点并非水平截面圆与视界圆的交点!!!

Code

下面的代码也只能糊弄了,否则无法取到和原图类似的显示效果...

\documentclass{standalone}
\usepackage[3d]{luadraw}
\usepackage[svgnames]{xcolor}
\usepackage{fourier-otf}
\begin{document}
    \begin{luadraw}{name=cuboid_sphere}
    local ld = luadraw
    local pt3d = ld.pt3d
    local M, Origin, vecK = pt3d.M, pt3d.Origin, pt3d.vecK
    local g = ld.graph3d:new{
        window3d = {-5,5,-5,5,-5,5},
        window = {-5,5,-5,5},
        -- adjust2d = true, 
        viewdir = {0,75} -- should be fixed
    }
   require 'luadraw_spherical'
    local sM = ld.sM
    ld.Hiddenlines = true;ld.Hiddenlinestyle = "dashed"
    g:Define_sphere{ color = "", edgewidth=8, edgecolor="black" }
    local C,C1 = sM(40,120), sM(40,60)
    local O1,O2 = ld.proj3d(Origin,{C,vecK}),ld.proj3d(Origin,{C1,vecK})
    local h = pt3d.abs(O1-O2)/2
    local r = math.sqrt(3^2-h^2)
    local B,B1 = M(0,-r,-h),M(0,-r,h)
    local D1,D = M(0,r,h),M(0,r,-h)
    local A,A1 = ld.psym3d(C,O1),ld.psym3d(C1,O2)
    g:DScircle({Origin,vecK})
    local P = ld.facet2poly( ld.cvx_hull3d({A,B,C,D,A1,B1,C1,D1}) )
    g:Dcircle3d(O1,r,vecK,"draw=none,fill=blue!25, fill opacity=0.4") -- lower circle
    g:DScircle({C,vecK})
    g:Dpoly(P,{color="violet!30!white",mode=ld.mFlatHidden,edgewidth=8,hiddenstyle="dashed"})
    g:Dcircle3d(O2,r,vecK,"draw=none,fill=blue!25, fill opacity=0.4") -- upper circle
    g:DScircle({C1,vecK})
    g:Dspherical()
    g:Dpolyline3d({A1,Origin,D},"blue,dashed")
    g:Dballdots3d({Origin,A,A1,B,B1,C,C1,D,D1},"red",0.75)
    g:Dlabel3d(
        "$O$",Origin,{pos="W"},
        "$A$",A,{pos="NW"},
        "$A_1$",A1,{pos="N"},
        "$B$",B,{pos="W"},
        "$B_1$",B1,{},
        "$C$",C,{pos="S"},
        "$C_1$",C1,{pos="SE"},
        "$D$",D,{pos="E"},
        "$D_1$",D1,{},
        "$a$",(B+C)/2,{pos="S",node_options="text=red"},
        "$b$",(C+D)/2,{pos="N"},
        "$c$",(C+C1)/2,{pos="E"},
        "$R$",D/2,{pos="N"},
        "$R$",A1/3,{}
    )
    g:Show()
\end{luadraw}
\end{document}

image.png

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览