100 如何用latex实现高中几何体的如下效果?例如正方体内切球

发布于 2026-09-15 07:31:04
关注者
0
被浏览
44
Sagittarius Rover
Sagittarius Rover 5小时前
这家伙很懒,什么也没写!

挑一个玩玩...不妨假定目标是:

image.png

以下是基于 luadraw 的实现:

\documentclass{standalone}
\usepackage[3d]{luadraw}% lualatex needed
\usepackage[svgnames]{xcolor}
\usepackage{fourier-otf}
\begin{document}
    \begin{luadraw}{name=circumsphere}
    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 sqrt = math.sqrt
    require 'luadraw_spherical'
    local g = ld.graph3d:new{
        window3d = {-5,5,-5,5,-5,5},
        window = {-5,5,-5,5},
        viewdir = {0,80}
    }
    ld.Hiddenlinestyle = "dashed"
    local R, hBottom, hTop = 3, -1, 2.5
    local O1, O2 = hBottom*vecK, hTop*vecK
    local R1, R2 = sqrt(R^2-hBottom^2), sqrt(R^2-hTop^2)
    local A1, A2 = Mc(R1,-30*ld.deg,hBottom), Mc(R2,-30*ld.deg,hTop)
    g:Define_sphere{color = "",edgecolor = "black",edgewidth = 8,hiddenstyle = "dashed",mode = ld.mWireframe}
    g:Dfrustum(O1,R1,R2,O2,{color="violet", edgecolor="black"})
    g:Dpolyline3d({{O1,O2},{O1,A1},{O2,A2},{A1,A2}},"magenta,dashed,semithick")
    g:Dpolyline3d({{Origin,A1},{Origin,A2}},"cyan,dashed,semithick")
    g:Dballdots3d({Origin,O1,O2,A1,A2},"black",0.75)
    g:Dlabel3d(
        "$O$",Origin,{pos="E"},
        "$O_1$",O1,{},
        "$O_2$",O2,{},
        "$A$",A1,{pos="S"},
        "$A_1$",A2,{pos="SW"},
        "$h$",(O1+O2)/2,{pos="E",node_options="text=magenta"},
        "$r_1$",(O1+A1)/2,{pos="SE"},
        "$r_2$",(O2+A2)/2,{pos="N"},
        "$R$",A1/2,{pos="N",node_options="text=cyan"}
    )
    g:Dspherical()
    g:Show()
\end{luadraw}
\end{document}

image.png

3 个回答
Sagittarius Rover
Sagittarius Rover 1小时前
这家伙很懒,什么也没写!

再画一个玩玩:

image.png

\documentclass{standalone}
\usepackage[3d]{luadraw}
\begin{document}
\begin{luadraw}{name=insphere}
    local ld = luadraw
    local pt3d = ld.pt3d
    local M, Mc, Origin = pt3d.M, pt3d.Mc, pt3d.Origin
    local sqrt = math.sqrt
    require 'luadraw_spherical'
    local g = ld.graph3d:new{
        window3d = {-5,5,-5,5,-5,5},
        windows = {-4,4,-4,4},
        viewdir = {0,80}, size={10,10}
    }
    local R1, R2 = 2, 4
    local R = sqrt(R1*R2) -- 
    local O2, O1 = M(0,0,-R), M(0,0,R)
    local A, A1 = Mc(R2,-45*ld.deg,-R), Mc(R2,135*ld.deg,-R)
    local B, B1 = Mc(R1,-45*ld.deg,R), Mc(R1,135*ld.deg,R)
    local vecn = Mc(R,45*ld.deg,0)
    -- tangent point
    local X = (R1 * A + R2 * B) / (R1 + R2)
    local Y = (R1 * A1 + R2 * B1) / (R1 + R2)
    ld.Hiddenlines = true; ld.Hiddenlinestyle = "dashed"
    g:Define_sphere{
        radius = R,
        color = "magenta!25",
        edgecolor = "black",
        edgewidth = 6,
        edgestyle = "dashed",
        hiddencolor = "black",
        hiddenstyle = "dashed",
        mode = ld.mWireframe
    }
    g:DSpolyline({{A,A1},{B,B1},{A,B},{A1,B1}},{width=6})
    g:DSpolyline({{B,B1},{A1,B1}},{width=6,style="dashed"})
    g:DSpolyline({{O1,O2},{Origin,X},{Origin,Y}},{color="cyan",style="dashed",width=6})
    g:DScircle({Origin,vecn},{color="blue",width=6,style="dashed"})
    g:Dspherical()
    g:Dfrustum(O2, R2, R1, O1, {edgewidth=6, hiddenstyle="dashed"})
    ---
    g:Dcircle3d(Origin,R,vecn,"draw=none, fill=blue!30, fill opacity=0.4")
    ---
    g:Dballdots3d({Origin,O1,O2,A,B,A1,B1,X,Y},"black",0.75)
    g:Dangle3d(O1,O2,A,"semithick");g:Dangle3d(O2,O1,B,"semithick");g:Dangle3d(Origin,X,B,"semithick");
    g:Dlabel3d(
        "$O$",Origin,{pos="SE"},
        "$O_2$",O1,{pos="N"},
        "$B$",B,{},
        "$O_1$",O2,{pos="S"},
        "$A$",A,{},
        "$H$",X,{pos="W"},
        "$r_2$",(O1+B)/2,{pos="N",node_options="text=red"},
        "$r_2$",(X+B)/2,{pos="W"},
        "$r_1$",(X+A)/2,{},
        "$r_1$",(O2+A)/2,{pos="S"},
        "$R$",(O2+Origin)/2,{pos="W"}
    )
    g:Show()
\end{luadraw}
\end{document}

image.png

Sagittarius Rover
Sagittarius Rover 1小时前
这家伙很懒,什么也没写!

Comment

image.png

画图这种东西要就具体情况具体分析,根据图之间的关系来决定绘制顺序,没有一概而论的方法,这里的情况「1,2,4,5,6,8,9,13,14,15,16,17」看上去都是平凡的,留做习题完全没问题;-)

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览