Matlab 如何绘制通过点的超平面的三维散射?

Matlab 如何绘制通过点的超平面的三维散射?,matlab,plot,data-visualization,polygon,scatter-plot,Matlab,Plot,Data Visualization,Polygon,Scatter Plot,我指的是以下两张图片的组合: 我需要超平面通过第3行的点。我想出了一些代码,但它根本没有显示任何平面 Data = [3.95, 13.83, 4.12; 2.77, 15.34, 5.85; 4.41, 14.66, 5.548 ] x= Data(:,1); y= Data(:,2); z= Data(:,3); pointA = [4.4, 14.7, 5.5]; pointB = [4.4, 14.7, 5.5]; pointC = [4.4, 14.7, 5.5]; poi

我指的是以下两张图片的组合:

我需要超平面通过第3行的点。我想出了一些代码,但它根本没有显示任何平面

Data = [3.95, 13.83, 4.12; 2.77, 15.34, 5.85; 4.41, 14.66, 5.548 ]
x= Data(:,1); 
y= Data(:,2); 
z= Data(:,3);

pointA = [4.4, 14.7, 5.5];
pointB = [4.4, 14.7, 5.5];
pointC =  [4.4, 14.7, 5.5];
pointD = [4.4, 14.7, 5.5];


normal = cross(pointA-pointB, pointA-pointC)
A = normal(1); B = normal(2); C = normal(3); 
D = -dot(normal,pointA);
zLim = [min(z) max(z)];
yLim = [min(y) max(y)];
[Y,Z] = meshgrid(yLim,zLim);
X = (C * Z + B * Y + D)/ (-A);
reOrder = [1 2  4 3];
figure();patch(X(reOrder),Y(reOrder),Z(reOrder),'r');
grid on;
alpha(0.3);
hold on 
plot3(x,x,z, '.', 'markersize', 30);
你知道我如何解决这个问题吗?

在这里,试试这个:

功能q56099751
数据=[3.95,13.83,4.12
2.77, 15.34, 5.85
4.41, 14.66, 5.548 ];
x=数据(:,1);
y=数据(:,2);
z=数据(:,3);
%散布:
图();散射体3(x,y,z,'填充');等等
%飞机:
范围=零(3,2);
[范围(1,1),范围(1,2)]=边界(x);
[范围(2,1),范围(2,2)]=边界(y);
[范围(3,1),范围(3,2)]=边界(z);
%区段=区段。*[0.9 1.1];%查看取消注释此项时发生的情况
对于ind1=1:numel(x)
平面通过点(x(ind1)、y(ind1)、z(ind1)、范围[1-10]);
结束
功能平面通过点(ptX、ptY、ptZ、区段、所在平面)
如果是哪个平面(1)
%XY平面
XYZ=[区段(1,1)区段(2,1)ptZ
区段(1,2)区段(2,1)ptZ
区段(1,2)区段(2,2)ptZ
区段(1,1)区段(2,2)ptZ];
补丁(XYZ(:,1),XYZ(:,2),XYZ(:,3),'r','FaceAlpha',0.2);
结束
如果是哪个平面(2)
%XZ平面
XYZ=[区段(1,1)ptY区段(3,1)
区段(1,2)ptY区段(3,1)
区段(1,2)ptY区段(3,2)
区段(1,1)ptY区段(3,2)];
面片(XYZ(:,1),XYZ(:,2),XYZ(:,3),'g','FaceAlpha',0.2);
结束
如果是哪个平面(3)
%YZ平面
XYZ=[ptX区段(2,1)区段(3,1)
ptX区段(2,2)区段(3,1)
ptX区段(2,2)区段(3,2)
ptX区段(2,1)区段(3,2)];
面片(XYZ(:,1),XYZ(:,2),XYZ(:,3),'b','FaceAlpha',0.2);
结束
这段代码可以产生什么的几个示例(取决于您如何配置它):

如果希望平面仅通过一个点,请不要使用回路,而是在此处为平面通过点提供正确的
XYZ
坐标,请尝试以下操作:

功能q56099751
数据=[3.95,13.83,4.12
2.77, 15.34, 5.85
4.41, 14.66, 5.548 ];
x=数据(:,1);
y=数据(:,2);
z=数据(:,3);
%散布:
图();散射体3(x,y,z,'填充');等等
%飞机:
范围=零(3,2);
[范围(1,1),范围(1,2)]=边界(x);
[范围(2,1),范围(2,2)]=边界(y);
[范围(3,1),范围(3,2)]=边界(z);
%区段=区段。*[0.9 1.1];%查看取消注释此项时发生的情况
对于ind1=1:numel(x)
平面通过点(x(ind1)、y(ind1)、z(ind1)、范围[1-10]);
结束
功能平面通过点(ptX、ptY、ptZ、区段、所在平面)
如果是哪个平面(1)
%XY平面
XYZ=[区段(1,1)区段(2,1)ptZ
区段(1,2)区段(2,1)ptZ
区段(1,2)区段(2,2)ptZ
区段(1,1)区段(2,2)ptZ];
补丁(XYZ(:,1),XYZ(:,2),XYZ(:,3),'r','FaceAlpha',0.2);
结束
如果是哪个平面(2)
%XZ平面
XYZ=[区段(1,1)ptY区段(3,1)
区段(1,2)ptY区段(3,1)
区段(1,2)ptY区段(3,2)
区段(1,1)ptY区段(3,2)];
面片(XYZ(:,1),XYZ(:,2),XYZ(:,3),'g','FaceAlpha',0.2);
结束
如果是哪个平面(3)
%YZ平面
XYZ=[ptX区段(2,1)区段(3,1)
ptX区段(2,2)区段(3,1)
ptX区段(2,2)区段(3,2)
ptX区段(2,1)区段(3,2)];
面片(XYZ(:,1),XYZ(:,2),XYZ(:,3),'b','FaceAlpha',0.2);
结束
这段代码可以产生什么的几个示例(取决于您如何配置它):

如果希望平面只通过一个点,不要使用回路,而是为平面通过点提供正确的
XYZ
坐标
planesThroughPoint

如果需要“垂直”和“水平”平面,则不需要找到平面的法线(法线已经是笛卡尔坐标系的主要单位向量…。在您的示例中,
点A
点D
都是相同的,当您计算
法线时,您希望得到什么?如果您想要“垂直”和“水平”平面,您不需要找到平面的法线(法线已经是笛卡尔坐标系的主要单位向量…。在您的示例中,
点A
点D
都是相同的,当您计算
法线时,您希望得到什么?