Mathematica中Show方法报错:无法组合图形对象,原因何在?
解决Mathematica中Show组合图形时的"Could not combine the graphics objects"错误
你猜的不对哦——ParametricPlot3D生成的3D图形完全可以用Show和其他图形对象合并,真正导致报错的问题出在两个细节上,我帮你拆解一下:
1. 用错了3D线图函数
你用的ListLinePlot是Mathematica的2D线图函数,哪怕传入3D坐标,它也会生成2D图形对象;而p1是ParametricPlot3D生成的3D图形对象,这两种不同维度的图形对象没法用Show合并,这就是报错的核心原因。
你需要把ListLinePlot换成3D版本的线图函数ListLinePlot3D,它专门用来绘制3D空间中的线段。
2. 确认变量替换后的数值有效性
另外要检查xB,yB,zB这些变量是否能通过sol和t->time替换成纯数值:
- 你可以先单独运行
{{0, 0, 0}, {xB, yB, zB}, {xE, yE, zE}} /. sol /. t -> 0(代入一个具体的时间值),看看输出是不是全是数值的3D点列表。 - 如果结果里还有符号存在,说明这些变量没有和NDSolve求解出的
q1,q2,qr正确关联,或者初始条件/方程定义有问题,需要先修正这部分。
修正后的代码示例
sol = First@NDSolve[{eq1ad, eq2ad, eqrad} U CondizioniIniziali, {q1, q2, qr}, {t, 0, T}] p1 = ParametricPlot3D[{xE, yE, zE} /. sol, {t, 0, T}, AxesLabel -> {"x[t]", "y[t]", "z[t]"}, BoxRatios -> {1, 1, 1}, PlotStyle -> Red] Manipulate[ Show[ p1, ListLinePlot3D[ {{0, 0, 0}, {xB, yB, zB}, {xE, yE, zE}} /. sol /. t -> time, PlotStyle -> {Thick, Red} ] ], {time, 0, T} ]
先试试把ListLinePlot改成ListLinePlot3D,应该就能解决合并报错的问题了,如果还有问题,再检查变量替换后的数值是否正确。
内容的提问来源于stack exchange,提问作者lory2l
相关产品推荐
相关产品推荐

