在matlab中绘制曲面

时间:2013-10-28 17:07:17

标签: matlab matlab-figure matlab-guide

我必须使用三个变量x,y和z绘制曲面,这些是三个关节角q1,q2和q3的函数。但我不知道如何策划这个。

for q1=-170:5:170
    for q2=-65:5:140
        for q3=-180:5:70
            c1 = cosd (q1);
            c2 = cosd (q2);
            c3 = cosd (q3);
            s1 = sind (q1);
            s2 = sind (q2);
            s3 = sind (q3);
            x =(320*c1)-(975*c1*s2)-(200*c1*c2*s3)-(200*c1*c3*s2);
            y =(320*s1)-(975*s1*s2)-(200*c2*s1*s3)-(200*c3*s1*s2);
            z = (975*c2)+(200*c2*c3)-(200*s2*s3)+680;
        end
    end
end

1 个答案:

答案 0 :(得分:2)

您需要考虑一些问题。

  1. 不需要for循环
  2. 你的系数向量需要长度相同
  3. 您需要使用元素乘法运算符.*
  4. 编辑:我实际上先误解了你的问题,现在它应该是正确的。

    所以你的代码看起来像是:

    q1x = -170:5:170;
    q2x = -65:5:140;
    q3x = -180:5:70;
    
    [x1, x2, x3] = meshgrid(q1x',q2x',q3x');
    Q = [x1(:),x2(:),x3(:)];
    
    q1 = Q(:,1);
    q2 = Q(:,2);
    q3 = Q(:,3);
    
    c1 = cosd (q1);
    c2 = cosd (q2);
    c3 = cosd (q3);
    s1 = sind (q1);
    s2 = sind (q2);
    s3 = sind (q3); 
    x  = (320.*c1) - (975.*c1.*s2) - (200.*c1.*c2.*s3) - (200.*c1.*c3.*s2);
    y  = (320.*s1) - (975.*s1.*s2) - (200.*c2.*s1.*s3) - (200.*c3.*s1.*s2);
    z  = (975.*c2) + (200.*c2.*c3) - (200.*s2.*s3)     +  680;
    

    这是相当多的数据。 - x,y,z是你表面的所有单点。

    现在我真的不知道你的“表面”应该是什么样的。请说明您想要获得的内容。


    scatter3会给你这个可爱的蘑菇:

    scatter3(x,y,z,5,z)
    colormap(jet)
    view(45,10)
    

    mushroom

    从散点图数据中获取真实表面有点棘手,但您可以对“散射数据表面”或其他内容进行一些研究......