如何绘制棱台的外接球?

发布于 2026-09-21 01:24:30

如题,希望绘制这幅图:

image.png

查看更多

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

又学到一个 ld.cvx_hull3d()...

\documentclass{standalone}
\usepackage[3d]{luadraw}
\usepackage[svgnames]{xcolor}
\usepackage{fourier-otf}
\begin{document}
    \begin{luadraw}{name=spherical_circle}
    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,78}
    }
    require 'luadraw_spherical'
    local sM = ld.sM
    ld.Hiddenlines = true;ld.Hiddenlinestyle = "dashed"
    g:Define_sphere{ color = "", edgewidth=8, edgecolor="black" }
    local phi1, phi2 = 75, 45
    local A,B,C = sM(90,phi1), sM(-140,phi1),sM(-30,phi1)
    local A1,B1,C1 = sM(90,phi2), sM(-140,phi2),sM(-30,phi2)
    ---------
    -- https://github.com/pfradin/luadraw/discussions/341#discussioncomment-18530158
    local P = ld.facet2poly( ld.cvx_hull3d({A,B,C,A1,B1,C1}) )
    ---------
    local O1,O2 = ld.proj3d(Origin,{A,vecK}), ld.proj3d(Origin,{A1,vecK})
    local R1,R2 = pt3d.abs(A-O1), pt3d.abs(A1-O2)
    g:DScircle({Origin, vecK});g:DScircle({A, vecK})
    g:DScircle({A1, vecK})
    g:Dcircle3d(O1,R1,vecK,"draw=none, fill=cyan!30, fill opacity=0.4")
    g:Dpoly(P,{color="violet!30!white",mode=ld.mFlatHidden, edgewidth=8})
    g:Dcircle3d(O2,R2,vecK,"draw=none, fill=cyan!30, fill opacity=0.4")
    g:Dspherical()
    g:Dpolyline3d({A,Origin,A1},"dashed,red,thick")
    g:Dpolyline3d({{Origin,O2,A1},{O1,A}},"dashed,blue!75")
    g:Dballdots3d({Origin,O1,O2,A,A1},"red",0.75)
    g:Dlabel3d(
        "$O$",Origin,{pos="S"},
        "$O_1$",O1,{pos="W"},
        "$O_2$",O2,{},
        "$A$",A,{pos="E"},
        "$A_1$",A1,{},
        "$R$",A/2,{pos="S",node_options="text=red"},
        "$R$",2*A1/3,{pos="W"},
        "$h$",(O1+O2)/2,{pos="E",node_options="text=blue"},
        "$r_1$",(O1+A)/2,{pos=""},
        "$r_2$",0.2*A1+0.8*O2,{}
    )
    g:Show()
\end{luadraw}
\end{document}

image.png

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览