crop the polygon from the 3D surface
6 ビュー (過去 30 日間)
古いコメントを表示
Mammadbaghir Baghirzade
2020 年 6 月 18 日
編集済み: Mammadbaghir Baghirzade
2020 年 11 月 10 日
Hi all,
I have such an attached 3D surface and a polygon on it. (Code is provided below)
I aim to crop the portion which is only inside the polygon and delete everything outside the polygon.
I found out the function of "inpolygon", but it did not work well enough since it is for 2D.
Then I encountered with "inpolyhedron" which is written for 3D, but was not that successfull on using it.
Is there any other way that you would suggest?
Thank you
Regards
2 件のコメント
Kelly Kearney
2020 年 6 月 18 日
It's difficult to tell from the picture... does all the data (both the surface and polygon) fall along a single plane?
採用された回答
darova
2020 年 6 月 19 日
What about this? I just cutted surface in 2d plane
[X1,Y1,Z1] = sph2cart(llambda1,pphi1,6.9);
surf(X1,Y1,Z1)
in = inpolygon(X1,Y1,xl1,yl1);
view(3);
hold on
plot3(X1(in),Y1(in),Z1(in),'.r')
plot3(xl1, yl1, zl1,'MarkerSize',14, 'Color','red')
axis vis3d
4 件のコメント
Kelly Kearney
2020 年 6 月 19 日
Darova beat me to the answer...
Your points don't actually fall on a plane, but rather on a lightly-curved surface. You can crop the data as desired by projecting in onto a 2D plane. That's what Darova's call to inpolygon does, by ignoring the z-coordinates... projects the surface and polygon coordinates onto the XY plane.
And as to how they figured out rr1 = 6.9, if one assumes the polygon vertices fall on the same surface:
[~,~,r] = cart2sph(xl1,yl1,zl1)
r =
6.9 6.9 6.9 6.9 6.9 6.9
その他の回答 (1 件)
darova
2020 年 6 月 20 日
Here is another idea using triangulation (initmesh)
- create polygon
- use initmesh to triangulate it
- calculate Z coordinate
- rotate the object
5 件のコメント
参考
カテゴリ
Help Center および File Exchange で Surface and Mesh Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!