フィルターのクリア

plotting a surface between 2D curves

30 ビュー (過去 30 日間)
Chaman Srivastava
Chaman Srivastava 2021 年 12 月 15 日
コメント済み: Star Strider 2021 年 12 月 15 日
Hello Experts,
I need to fill/fill a curve between the 2D curves in 3D space. I've seen some comments with the surf command, but would the command help where the extremeties of the curve are defined? My script looks something like this for 2D curves spaced in 3D-
Hoping to get some advice on it.
clc
clear all
figure(2)
x = linspace(28,224);
y = repelem(1,100); y2 =repelem(2,100);
eq1 = 0.0645*log(x)+0.9221;
eq2 = 0.0225*log(x)+0.9441;
plot3(y,x,eq1)
hold on
plot3(y2,x,eq2)
view([35 25])
grid on
legend

採用された回答

Star Strider
Star Strider 2021 年 12 月 15 日
One option is a patch object for this and another is surf
figure(2)
x = linspace(28,224);
y1 = repelem(1,100); y2 =repelem(2,100);
eq1 = 0.0645*log(x)+0.9221;
eq2 = 0.0225*log(x)+0.9441;
plot3(y1, x, eq1, '-b', 'LineWidth',2)
hold on
plot3(y2, x, eq2, '-r', 'LineWidth',2)
% patch([y1 flip(y2)], [x flip(x)], [eq1 flip(eq2)], 'g', 'FaceAlpha',0.25, 'EdgeColor','none') % 'patch'
surf([y1; y2], [x; x], [eq1; eq2], 'MeshStyle','row') % 'surf'
view([35 25])
grid on
legend('eq1', 'eq2', 'Included Surface')
xlabel('X')
ylabel('Y')
I included working calls for both, so experiment to see which is best.
.
  4 件のコメント
Chaman Srivastava
Chaman Srivastava 2021 年 12 月 15 日
Thanks! Just out of curiosity, is it possible to create a mesh on the plot? it may look better :D
Star Strider
Star Strider 2021 年 12 月 15 日
I considered that. It‘s slightly difficult, however not impossible.
It took a bit to figure it out. I used three different approaches before I finally got one that I liked.
The first one (figure(2)) simply draws the grid lines that surf provides in the original code.
The second (figure(3)) uses gridded interpolation techniques to construct the surface, however it also creates a connectig surface underneath the intended surface that I couldn’t get rid of, and only provide one set of grid lines as well.
The third (figure(4)) intrepolates all the matrices to create a surface, and finally does what I want! The ‘Ym’ and ‘Zm’ matrices had to be transposed from the way I originally created them in order to plot it correctly, however that code has the advantage of producing the result I want, with grid lines in both directions. I also plotted it as surfc in order to describe the surface in more detail.
x = linspace(28,224);
y1 = repelem(1,100); y2 =repelem(2,100);
eq1 = 0.0645*log(x)+0.9221;
eq2 = 0.0225*log(x)+0.9441;
xv = linspace(min(x), max(x), 25);
y1v = linspace(min(y1), max(y1), 25);
y2v = linspace(min(y2), max(y2), 25);
[Xm,Ym] = ndgrid([xv(:); xv(:)], [y1v(:); y2v(:)]);
Zm = griddata([x(:); x(:)], [y1(:); y2(:)], [eq1(:); eq2(:)], Xm, Ym);
figure(2)
plot3(y1, x, eq1, '-b', 'LineWidth',2)
hold on
plot3(y2, x, eq2, '-r', 'LineWidth',2)
% patch([y1 flip(y2)], [x flip(x)], [eq1 flip(eq2)], 'g', 'FaceAlpha',0.25, 'EdgeColor','none') % 'patch'
surf([y1; y2], [x; x], [eq1; eq2]) % 'surf'
% surf(Ym, Xm, Zm)
view([35 25])
grid on
legend('eq1', 'eq2', 'Included Surface')
xlabel('Y')
ylabel('X')
xv = linspace(min(x), max(x), 25);
y1v = linspace(min(y1), max(y1), 25);
y2v = linspace(min(y2), max(y2), 25);
[Xm,Ym] = ndgrid([xv(:); xv(:)], [y1v(:); y2v(:)]);
Zm = griddata([x(:); x(:)], [y1(:); y2(:)], [eq1(:); eq2(:)], Xm, Ym);
figure(3)
surf(Ym, Xm, Zm)
grid on
view([35 25])
xlabel('Y')
ylabel('X')
N = 25;
Xm = (ones(25,1) * linspace(28,224,N));
Ym = (ones(N,1) * linspace(1, 2, N));
k1 = linspace(0.0645, 0.0225, N);
k2 = linspace(0.9221, 0.9441, N);
Zm = k1(:).*log(Xm) + k2(:);
figure(4)
surfc(Ym, Xm', Zm')
grid on
view([35 25])
zlim([1 1.3])
xlabel('Y')
ylabel('X')
figure(5)
hsc = surfc(Ym, Xm', Zm');
hold on
hp3(1) = plot3(y1, x, eq1, '-b', 'LineWidth',2);
hp3(2) = plot3(y2, x, eq2, '-r', 'LineWidth',2);
hold off
grid on
view([35 25])
zlim([1 1.3])
xlabel('Y')
ylabel('X')
legend([hsc(1) hp3], 'Interpolated Surface', 'eq1', 'eq2', 'Location','best')
I created the matrices as square matrices, and changing‘N’ changes the number of grid lines, and accordingly the grid spacing and the surface resolution.
I’m happy with figure(4) ! Adding back the original lines creates figure(5).
.

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

その他の回答 (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