在当前坐标轴上显示一个3d立方体
PLOTCUBE(EDGES,ORIGIN,ALPHA,COLOR)显示当前轴上的3d立方体
具有以下属性:
*边:定义立方体边长度的3个元素向量
*原点:定义立方体起点的三元素向量
* ALPHA:定义立方体表面透明度的标量(从0开始)
至1)
*颜色:定义立方体的面颜色的3元素向量
例子:
>>plotcube([55],[22],.8[10]);
>>plotcube([555],[101010],.8[0110]);
>>plotcube([55],[20],.8[01]);
奥利维尔(2021)。PLOTCUBE(//www.tatmou.com/matlabcentral/fileexchange/15161-plotcube), MATLAB中央文件交换。检索.
你好奥利弗!这段代码似乎工作得很好,但我不知道它是否对我的问题有用。请在Matlab论坛上看到这个问题//www.tatmou.com/matlabcentral/answers/683263-find-point-of-intersection-between-a-cube-and-a-line-in-3d如果可以的话,请帮助我。非常感谢。
函数[]= quaderplot(st,a,b,c,far)
%此处是此函数的无标题摘要
这里有详细的解释
a=a+st;
plt3 ([st a],[0 0],[0 0],远)
抓住;
[st st],[0 b],[0 0],far)
[a a],[0 b],[0 0],far
图3([st a]、[b b]、[0 0],远)
图3([st st]、[0 0]、[0 c]、far)
([st st],[b b],[0 c],远)
图3([a a]、[0 0]、[0 c]、远)
[a a],[b b],[0 c],far
([st a],[0 0],[c c],far)
[st st],[0 b],[c c],far)
图3([a a]、[0 b]、[c c]、far)
图3([st a]、[b b]、[c c]、far)
抓住;
结束
非常感谢,奥利维尔。它将正常工作。有可能在渐变中给一组立方体上色吗?
> > plotcube([。5。5。5]、[。2.2 .2],0.1,[0 0 1])
无法识别的函数或变量'plotcube'。
如何避免出现此错误?我正在Windows10上使用MatlabR2019B。同样的问题也出现在Matlab Android应用程序中!
简单直观!我建议添加一个轴句柄输入,用num2cell替换mat2cell,并为立方体的每一侧返回一个对象句柄向量。它看起来像这样。
函数h=PLOTCUBE(varargin)
inArgs={。。。
[10 56 100],…%默认边缘大小(x,y和z)
[10 10 10],…%立方体原点的默认坐标
7,…%立方体表面的默认alpha值
[1 0 0] , ... % 立方体的默认颜色
gca…%默认轴
};
%用输入值替换默认输入参数
inArgs(1:nargin)=varargin;
创建所有变量
[edges,origin,alpha,clr,axh]=deal(inArgs{:});
XYZ={。。。
[0 0 0 0] [0 0 1 1] [0 1 1 0];...
[1 1 1 1] [0 0 1 1] [0 1 1 0];...
[0 1 1 0] [0 0 0 0] [0 0 1 1];...
[0 1 1 0] [1 1 1] [0 0 1 1];...
[0 1 1 0] [0 0 1 1] [0 0 0 0];...
[0 1 1 0][0 0 1 1][1 1 1]…
};
XYZ = mat2cell(…
cellfun(@(x,y,z)x*y+z。。。
XYZ。。。
repmat (num2cell(边缘)、6、1),…
repmat (num2cell(起源)、6、1),…
“UniformOutput”,假),…
6、(1 1 1));
h = cellfun (@patch repmat ({axh} 6 1),…
XYZ XYZ {1}, {2}, XYZ{3},……
repmat ({clr} 6 1),…
repmat({‘FaceAlpha} 6 1),…
repmat({alpha},6,1)。。。
);
视图(3);
绘制完立方体后,我要存储立方体顶点的坐标。怎么做呢?
@Osman Akar:你知道怎么给这个函数添加图例吗?
你知道如何在这个函数中添加图例吗?
代码不错,但是有点慢
谢谢你的密码,奥利维尔。
我同意Mike关于优化大型数据集代码的建议。
以下是uint8图像的3D可视化应用程序示例(其中包含大量数据):
图(1);colormap灰色
对于i=1:Nx
j = 1:纽约
对于k=1:Nz
图(1);plotcube([1 1 1],[I -1 j-1 k-1],.8,I(I,j,k));抓住
结束
结束
结束
集合(gca,'DataAspectRatio',[100]);
其中I是大小为(Nx,Ny,Nz)的3D图像。
你好奥利弗,
很好的代码,谢谢:)
但是,有没有办法改变立方体的边缘透明度?
例如,在代码中添加“EdgeAlpha”,例如在当前行下面添加一行“FaceAlpha”:
repmat({‘FaceAlpha} 6 1),…
另外,有没有任何方法来优化这个代码,非常大的数据集?(比如几十万块!)
e、 g.尽可能以某种方式将数据类型更改为uint8或uint16?
(如果我试图在uint8格式的数据有一个错误在'cellfun':
plotcube>@(x,y,z)x*y+z(第41行)
cellfun(@(x,y,z)x*y+z。。。
再次干杯!
迈克
非常感谢
谢谢:)
谢谢
好
谢谢真的很有帮助
非常好