【发布时间】:2019-09-05 17:18:33
【问题描述】:
本质上,我正在尝试通过旋转闭合曲线来创建体积。我试图使用圆柱体来实现这一点,但我得到了不希望的结果。我也尝试过直接使用 surf。这是这两次尝试(newEl 定义如下)。
elPatternPlot = plot3(newEl(:,1),newEl(:,2),newEl(:,3),'gr-','LineWidth',0.5);
xlabel('x')
ylabel('y')
zlabel('z')
grid on
接下来,我将 2D 闭合曲线旋转到正确的角度。
rotate(elPatternPlot, [1 0 0], 90);
为了在所需的体积中生成数据点,我使用旋转:
% Now rotate around z and store in the data
axObjs = azElFig.Children;
dataObjs = axObjs.Children;
xElData = dataObjs(1).XData;
yElData = dataObjs(1).YData;
zElData = dataObjs(1).ZData;
for a1=1:5:180
rotate(elPatternPlot, [0 0 1], a1);
axObjs = azElFig.Children;
dataObjs = axObjs.Children;
xElData = [xElData dataObjs(1).XData];
yElData = [yElData dataObjs(1).YData];
zElData = [zElData dataObjs(1).ZData];
end
plot3(xElData,yElData,zElData,'r-','LineWidth',0.5)
这会产生正确的外部几何形状,但我正在寻求创建一个体积。从这里我使用冲浪:
xv = linspace(min(xElData), max(xElData), 150);
yv = linspace(min(yElData), max(yElData), 150);
[X, Y] = meshgrid(xv, yv);
Z = griddata(xElData,yElData,zElData,X,Y);
figure; surf(X,Y,Z);
使用气缸,
[x,y,z] = cylinder(Z);
figure; surf(x,y,z)
newEl =
-906.5000 -36.5000 0
-909.5000 -65.5000 0
-903.5000 -91.5000 0
-891.5000 -139.5000 0
-877.5000 -203.5000 0
-863.5000 -238.5000 0
-855.5000 -254.5000 0
-847.5000 -269.5000 0
-839.5000 -284.5000 0
-784.5000 -369.5000 0
-771.5000 -384.5000 0
-746.5000 -406.5000 0
-733.5000 -421.5000 0
-695.5000 -457.5000 0
-668.5000 -479.5000 0
-641.5000 -496.5000 0
-614.5000 -513.5000 0
-600.5000 -525.5000 0
-573.5000 -544.5000 0
-561.5000 -549.5000 0
-549.5000 -553.5000 0
-488.5000 -579.5000 0
-474.5000 -585.5000 0
-460.5000 -592.5000 0
-446.5000 -599.5000 0
-417.5000 -603.5000 0
-388.5000 -607.5000 0
-293.5000 -611.5000 0
-277.5000 -608.5000 0
-246.5000 -597.5000 0
-231.5000 -593.5000 0
-187.5000 -578.5000 0
-160.5000 -553.5000 0
-133.5000 -528.5000 0
-120.5000 -512.5000 0
-85.5000 -478.5000 0
-61.5000 -428.5000 0
-56.5000 -411.5000 0
-47.5000 -359.5000 0
-42.5000 -342.5000 0
-33.5000 -289.5000 0
-28.5000 -271.5000 0
-19.5000 -220.5000 0
-14.5000 -202.5000 0
-5.5000 -149.5000 0
-0.5000 -132.5000 0
4.5000 -128.5000 0
9.5000 -161.5000 0
18.5000 -194.5000 0
23.5000 -226.5000 0
32.5000 -261.5000 0
37.5000 -293.5000 0
42.5000 -324.5000 0
51.5000 -359.5000 0
56.5000 -390.5000 0
65.5000 -426.5000 0
70.5000 -455.5000 0
125.5000 -517.5000 0
138.5000 -528.5000 0
165.5000 -556.5000 0
178.5000 -567.5000 0
192.5000 -578.5000 0
207.5000 -585.5000 0
251.5000 -596.5000 0
267.5000 -604.5000 0
298.5000 -611.5000 0
393.5000 -607.5000 0
422.5000 -602.5000 0
451.5000 -597.5000 0
465.5000 -592.5000 0
479.5000 -586.5000 0
493.5000 -580.5000 0
530.5000 -565.5000 0
542.5000 -559.5000 0
554.5000 -552.5000 0
592.5000 -534.5000 0
619.5000 -515.5000 0
646.5000 -496.5000 0
673.5000 -477.5000 0
725.5000 -430.5000 0
738.5000 -419.5000 0
776.5000 -379.5000 0
789.5000 -368.5000 0
801.5000 -353.5000 0
811.5000 -336.5000 0
836.5000 -292.5000 0
844.5000 -279.5000 0
852.5000 -268.5000 0
860.5000 -253.5000 0
881.5000 -200.5000 0
886.5000 -184.5000 0
891.5000 -167.5000 0
895.5000 -146.5000 0
902.5000 -104.5000 0
907.5000 -90.5000 0
909.5000 -46.5000 0
904.5000 6.5000 0
899.5000 58.5000 0
897.5000 60.5000 0
875.5000 126.5000 0
867.5000 142.5000 0
828.5000 208.5000 0
820.5000 224.5000 0
763.5000 276.5000 0
750.5000 289.5000 0
712.5000 319.5000 0
699.5000 332.5000 0
686.5000 341.5000 0
659.5000 360.5000 0
632.5000 378.5000 0
605.5000 396.5000 0
578.5000 416.5000 0
566.5000 431.5000 0
517.5000 496.5000 0
505.5000 509.5000 0
436.5000 567.5000 0
407.5000 587.5000 0
377.5000 603.5000 0
361.5000 604.5000 0
345.5000 606.5000 0
329.5000 607.5000 0
313.5000 608.5000 0
282.5000 610.5000 0
236.5000 606.5000 0
221.5000 601.5000 0
151.5000 567.5000 0
111.5000 547.5000 0
100.5000 533.5000 0
89.5000 520.5000 0
79.5000 500.5000 0
60.5000 477.5000 0
46.5000 454.5000 0
27.5000 427.5000 0
13.5000 403.5000 0
-10.5000 403.5000 0
-24.5000 423.5000 0
-38.5000 444.5000 0
-52.5000 465.5000 0
-66.5000 486.5000 0
-75.5000 502.5000 0
-96.5000 531.5000 0
-107.5000 548.5000 0
-147.5000 566.5000 0
-174.5000 581.5000 0
-202.5000 591.5000 0
-217.5000 600.5000 0
-262.5000 611.5000 0
-309.5000 607.5000 0
-325.5000 607.5000 0
-341.5000 606.5000 0
-357.5000 604.5000 0
-373.5000 603.5000 0
-403.5000 587.5000 0
-432.5000 566.5000 0
-501.5000 511.5000 0
-513.5000 494.5000 0
-525.5000 478.5000 0
-537.5000 463.5000 0
-587.5000 407.5000 0
-628.5000 380.5000 0
-655.5000 361.5000 0
-682.5000 341.5000 0
-708.5000 320.5000 0
-721.5000 311.5000 0
-759.5000 277.5000 0
-797.5000 244.5000 0
-807.5000 237.5000 0
-816.5000 224.5000 0
-824.5000 213.5000 0
-832.5000 199.5000 0
-871.5000 124.5000 0
-882.5000 104.5000 0
-887.5000 98.5000 0
-894.5000 72.5000 0
-896.5000 37.5000 0
-899.5000 34.5000 0
-901.5000 1.5000 0
-906.5000 -36.5000 0
【问题讨论】:
-
我将把它作为评论,因为它没有完全回答这个问题。您可以使用
convhull找到数据的凸包,然后使用trimesh或trisurf绘制它。K=convhull(xElData,yElData,zElData);figure; trisurf(K,xElData,yElData,zElData);这并不能完全回答这个问题,因为它会包围图形的顶部和底部——你的曲线不是完全凸的。只是把这个作为提示给任何想要它的人。