在3d表面matlab上绘制线条

时间:2014-04-27 19:07:29

标签: matlab

我需要在matlab中在3d表面上绘制线条。我写了两个脚本来绘制曲面,一个绘制曲面上的线。 SCRIPT1

function figHandle = plotFunction(funchandle, a , b)
    x_vec = -a:.1:a;
    y_vec = -b:.1:b;
    figHandle = figure();
    [X,Y] = meshgrid(x_vec, y_vec);
    Z = [];
    z_temp = [];
    for i = x_vec
        for j = y_vec
            z_temp =[z_temp; funchandle([i; j])];
        end;
        Z = [Z, z_temp];
        z_temp = [];
    end;
    h = surf(X,Y,Z);
    set(h, 'edgecolor', 'none');
    %colormap gray;
    colorbar;
    view(0,90);
end

SCRIPT2

function plotStep(figHandle,funcHandle, P1, P2)
   figure(figHandle);
   hold on;
   plot3(P1(1), P1(2), funcHandle([P1(1);P1(2)]), 'r*');
   if ~isequal(P1,P2)
      Z = [];
      X = [];
      Y = [];
      d = [P2(1)-P1(1), P2(2) - P1(2)];
      if (P1(1) < P2(1))
          X = P1(1):0.0001:P2(1);
          if (P1(2) ~= P2(2))
              Y = X.*(d(2)/d(1))+(P1(2)-(d(2)/d(1))*P1(1));
          else
              for i = X
                  Y = [Y, P1(2)];
              end
          end
      elseif P1(1) > P2(1)
          X = P1(1):-0.0001:P2(1);
          if (P1(2) ~= P2(2))
              Y = X.*(d(2)/d(1))+(P1(2)-(d(2)/d(1))*P1(1));
          else
              for i = X
                  Y = [Y, P1(2)];
              end
          end
      else
          if P1(2) < P2(2)
              Y = P1(2):0.0001:P2(2);
              for i = Y
                  X = [X, P1(1)];
              end
          else
              Y = P1(2):-0.0001:P2(2);
              for i = Y
                  X = [X, P1(1)];
              end
          end
      end

      for i = 1:length(X)
          Z = [Z;funcHandle([X(i);Y(i)])];
      end
      plot3(X, Y, Z, 'r', 'LineWidth', 2);

   end

我的问题是,无论彼此距离多近,我都会在放大线后形成线条,这看起来并不是连续的。 before zooming in after zooming in

1 个答案:

答案 0 :(得分:0)

解决此问题的最简单方法是将线条稍微抬离表面,

plot3(X, Y, Z+1, 'r', 'LineWidth', 2);

但您可能需要尝试偏移。它有时可以帮助使线条更宽一些,并尝试不同的渲染器。