Plotting plane through point arrays midpoint

1 回表示 (過去 30 日間)
Chaostante
Chaostante 2017 年 1 月 22 日
コメント済み: Chaostante 2017 年 1 月 23 日
Hello community,
I have an array of points (named X) with x, y and z-coordiantes, given as a matrix N by 3. Also I have a plane given in Hesse normal form with the normal vector NV and chose the midpoint from array X as Point on the plane.
I tried the follwing way to plot the plane, the point array and the midpoint from the data. I expected the midpoint as a part of the plane but the plane is displaced. I can't find the mistake and would really appreciate your help.
X =[0.8176, 0.2277, 0.4242;
0.7948, 0.4357, 0.5079;
0.6443, 0.3111, 0.0855;
0.3786, 0.9234, 0.2625;
0.8116, 0.4302, 0.8010;
0.5328, 0.1848, 0.0292;
0.3507, 0.9049, 0.9289;
0.9390, 0.9797, 0.7303;
0.8759, 0.4389, 0.4886;
0.5502, 0.1111, 0.5785;
0.6225, 0.2581, 0.2373;
0.5870, 0.4087, 0.4588;
0.2077, 0.5949, 0.9631;
0.3012, 0.2622, 0.5468;
0.4709, 0.6028, 0.5211;
0.2305, 0.7112, 0.2316;
0.8443, 0.2217, 0.4889;
0.1948, 0.1174, 0.6241;
0.2259, 0.2967, 0.6791;
0.1707, 0.3188, 0.3955];
MidP = mean(X);
NV = [0.1815, -0.6091, 0.7721];
x_min = min(X(:,1));
x_max = max(X(:,1));
z_min = min(X(:,3));
z_max = max(X(:,3));
Y1 = ((((z_min+MidP(3))*NV(3))+(x_min+MidP(1))*NV(1))/NV(2))-MidP(2);
Y2 = ((((z_min+MidP(3))*NV(3))+(x_max+MidP(1))*NV(1))/NV(2))-MidP(2);
Y3 = ((((z_max+MidP(3))*NV(3))+(x_min+MidP(1))*NV(1))/NV(2))-MidP(2);
Y4 = ((((z_max+MidP(3))*NV(3))+(x_max+MidP(1))*NV(1))/NV(2))-MidP(2);
figure('Name','Plane, Points and Midpoint')
hold on
surf([x_min x_max; x_min x_max],[Y1 Y2; Y3 Y4],[z_max z_max; z_min z_min]); %Plane
plot3(X(:,1), X(:,2), X(:,3),'.'); %Points
plot3(MidP(1),MidP(2),MidP(3),'*'); %Midpoint
xlabel('X (m)');
ylabel('Y (m)');
zlabel('Z (m)');
hold off

採用された回答

David Goodmanson
David Goodmanson 2017 年 1 月 22 日
Hi Chaosante, The basic problem here is that the equation for the plane is (in free notation)
[(x,y,z)-(xmean,ymean,zmean)] . NV = 0 (dot product)
So the signs of xmean etc. need to be reversed and there is a sign change when Y is take to the other side, leading to
Y1 = -((((z_min-MidP(3))*NV(3))+(x_min-MidP(1))*NV(1))/NV(2))+MidP(2);
Y2 = -((((z_min-MidP(3))*NV(3))+(x_max-MidP(1))*NV(1))/NV(2))+MidP(2);
Y3 = -((((z_max-MidP(3))*NV(3))+(x_min-MidP(1))*NV(1))/NV(2))+MidP(2);
Y4 = -((((z_max-MidP(3))*NV(3))+(x_max-MidP(1))*NV(1))/NV(2))+MidP(2);
which works.
  1 件のコメント
Chaostante
Chaostante 2017 年 1 月 23 日
Thank you so much! :)

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSurface and Mesh Plots についてさらに検索

タグ

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by