问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

matlab 螺旋体 想画一个一定动程往复运动层层叠加的螺旋体,求各位大神点拨

发布网友 发布时间:2022-05-26 18:12

我来回答

1个回答

热心网友 时间:2023-10-15 20:16

clear;clc
t=linspace(0,20*pi,361)';
T=linspace(0,2*pi,37)';
curve=[cos(t),sin(t),t/pi*0.2];
curve=[curve(1:end-1,:);[cos(T).*(-1/4/pi*T+1),sin(T).*(-1/4/pi*T+1),T-T+t(end)/pi*0.2]];
curve=[curve(1:end-1,:);[cos(t)/2,sin(t)/2,(t(end)-t)/pi*0.2]];
tubemesh(curve,0.2+zeros(size(curve,1),1))
xlabel('x');ylabel('y');zlabel('z');
axis equal

function h=tubemesh(curve,r,theta,f)
% rotmesh(curve,r,theta,fun)用于绘制圆柱面
%   矩阵curve=[x,y,z]为中轴线,其中x,y,z为列向量,分别代表中轴线的三维坐标
%   r为半径
%     当r为向量时,r的个数必须与列向量x的个数相同,代表处于对应位置时的半径
%     当r为标量时,代表各处半径相同
%   向量theta为旋转弧度,默认为linspace(-pi,pi,37)
%   句柄fun为绘图函数,默认为@mesh
% h=tubemesh(...)
%  绘制曲面的同时返回该柱面的句柄h
%
%例1:绘制中轴线为螺旋线x=sin(t);y=cos(t);z=t,半径为1的圆柱体
%t=linspace(0,10)'; 
%tubemesh([sin(t),cos(t),t],1) 
%xlabel('x');ylabel('y');zlabel('z');axis equal
%例2:绘制中轴线为圆x^2+y^2=1,半径为0.2的圆环面
%t=linspace(0,2*pi,37)'; 
%tubemesh([cos(t),sin(t),t-t],0.2) 
%xlabel('x');ylabel('y');zlabel('z');axis equal
%例3:绘制抛物面z=x^2+y^2
%t=[0,2.^(-2:0.2:2)]'; 
%tubemesh([t-t,t-t,t.^2],t,[],@surfc) 
%例4:
%t=linspace(0,4*pi,256)'; 
%tubemesh([sin(t),cos(t),-t],t*10,t/2,@surf);
%axis equal off;view(50,60);
%colormap(hsv(512));shading interp;camlight;lighting phong;camzoom(1.8)
assert(nargin>=2 && nargin<=4,'参数个数错误!请看帮助!');
if nargin<4
    f=@mesh;
    if nargin<3
        theta=linspace(-pi,pi,37)';
    end
end
if isempty(theta)
    theta=linspace(-pi,pi,37)';
end
curve=squeeze(curve);
assert(ismatrix(curve),'参数1格式错误!请看帮助!');
if size(curve,2)~=3
    curve=curve.';
end
assert(size(curve,2)==3 && size(curve,1)>1,'参数1格式错误!请看帮助!');
r=squeeze(r);
if size(r,2)~=1
    curve=curve.';
end
if(length(r)==1)
    r=r*ones(size(curve,1),1);
end
assert(size(r,2)==1 && size(r,1)==size(curve,1),'参数2格式错误!请看帮助!');
theta=squeeze(theta);
if size(theta,2)~=1
    theta=theta.';
end
assert(size(theta,2)==1,'参数3格式错误!请看帮助!');
 
x=curve(:,1);
y=curve(:,2);
z=curve(:,3);
direct=diff(curve);
dist=sqrt(sum(direct.^2,2));
direct=direct./repmat(dist,1,3);
if norm(curve(1,:)-curve(end,:))<min(dist)
    direct=[direct(1,:)+direct(end,:);direct(1:end-1,:)+direct(2:end,:);direct(1,:)+direct(end,:)]/2;
else
    direct=[direct(1,:);(direct(1:end-1,:)+direct(2:end,:))/2;direct(end,:)];
end
direct=direct./repmat(sqrt(sum(direct.^2,2)),1,3);
sint=sin(theta);
cost=cos(theta);
 
mm=[-direct(:,2),direct(:,1)];
mm=mm./repmat(sqrt(sum(mm.^2,2)),1,2);
mm(isnan(mm))=0;
mx=mm(:,1);
my=mm(:,2);
alph = acos(direct(:,3));
cosa = cos(alph);
sina = sin(alph);
vera = 1 - cosa;
XX=zeros(length(theta),length(x));
YY=XX;
ZZ=XX;
view(3)
hold on
for k=1:length(x)
    rot = [cosa(k)+mx(k)^2*vera(k) mx(k)*my(k)*vera(k) my(k)*sina(k); ...
        mx(k)*my(k)*vera(k) cosa(k)+my(k)^2*vera(k) -mx(k)*sina(k); ...
        -my(k)*sina(k) mx(k)*sina(k) cosa(k)]';
    X=r(k)*cost;
    Y=r(k)*sint;
    Z=X-X;
    newxyz = [X,Y,Z]*rot;
    XX(:,k)=newxyz(:,1)+x(k);
    YY(:,k)=newxyz(:,2)+y(k);
    ZZ(:,k)=newxyz(:,3)+z(k);
end
hh=f(XX,YY,ZZ);
if nargout==1
    h=hh;
end追问能否看一下我给你发的私信?有个变量tubemesh运行的时候提醒未定义

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在思科的CCNA,CCNE,CCIP的考证费分别是多少啊,通过率怎样 长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 vc6.0mfc绘制图纸的问题 社交礼仪的PPT如何做呢? 求从bmp图中读取rgb信息,然后用背景差减法做差减,c语言或者matlab都行,求代码,求高手帮助!! 【急】 matlab and c :mexFunction函数中mxGetNumberOfDimensions问题。 VC中使用MATLAB的M文件 社交礼仪知识 Matlab作图 样条曲线 关于KMV模型中的 matlab 处理求助 怎么查公司年检进度 MATLAB nargin问题 MATLAB中将已经提取出的峰值点再筛选,只要上方图里圈出来信号里的一个峰值点,下方图里底下的峰值点不要 开立一般存款账户和非预算单位专用存款账户,为什么须向中国人民银行 清楚英国,大不列颠,英格兰,UK的区别了吗 晚上只吃苹果能减肥吗? 对身体好吗? 大不列颠,英国和联合王国的区别是什么 英国、大不列颠、苏格兰、英格兰,这四个有什么区别? 不列颠群岛,大不列颠和英国在内涵上有什么不同? 英国和大不列颠,不列颠的区别 啊!北京的秋天多么美丽呀!这是几句话? “大不列颠”和“不列颠”有什么不同? 三星手机fm.qingting.qtradio是什么文件夹 三星情侣款mp4 多普达T7373(PRO2),诺基亚N97,三星i800,哪个比较好? 大便最后会有鲜血,身体没有不适,这段时间吃饭没有规律比较油腻,还吃了一些垃圾食品? 为什么每次大便后,都会有血? 拉屎后有血出现 拉屎后擦时有血是什么病严重不? 华为V8不能快速充电了为什么 《金粉世家》的剧情梗概是什么? 金粉世家分集介绍 电视剧《金粉世家》中的金燕西婚前那么爱冷清秋,为什么最后却辜负了她? 为什么电视剧《金粉世家》金燕西与冷清秋最后越走越远? 金粉世家所有演员列表名单,那部电视剧有什么看点 金粉世家内容简介。 《金粉世家》里有哪些细思恐极的细节? 金粉世家当时演员 金粉世家主要内容 《金粉世家》的原著小说叫什么? 电视剧金粉世家好不好看? 金粉世家分集介绍20集之后