我刚刚制作了一个由四边形组成的帆船的简单模型。这允许我们使用surf函数来绘制它。这应该只是一个起点,看看你如何做到这一点。但请记住,这可能不是最好的方法。正如已经提到的评论,MATLAB真的不是最好的软件,Blender可能是一个更好的选择,但我们仍然可以做一个漂亮的小船。

第一步是在局部坐标系中创建固定模型。 NaNs只是为了分离船舶的不同部件,因为否则我们将有额外的四边形连接,例如船体到船外看起来不合适。 (如果不清楚,只需用一些任意坐标替换它们,看看发生了什么。)

然后为了给它一些运动,我们必须结合时间成分。我只是在y-z平面上添加了一个轻微的摇摆运动,并在z方向上稍微弹跳,以使它看起来像一艘船在波浪中移动。我确保使用与你已经用于波浪相同频率的w/2。这对于使船在海浪中晃动是很重要的。

clc; clear all ;

x_l = -20;

x_r = 20;

y_l = -20;

y_r = 20;

ds = 0.5;

A = 1;

k = 1;

dt = 0.05;

w = 1;

x = [x_l:ds:x_r];

y = [y_l:ds:y_r];

[X,Y] = meshgrid(x,y);

%sailboat

U = 0.7*[0,-1,-1,1,1,0;...%hull

0,0,0,0,0,0; NaN(1,6);...

0,0,NaN,0,0,NaN; %sails

0,-1,NaN,0,0,NaN];

V = 0.7*[3,1,-3,-3,1,3;%hull

1,1,-2,-2,1,1; NaN(1,6);...

3,0,NaN,0,-3,NaN; %sails

3,-1,NaN,0,-3,NaN];

W = 0.7*[1,1,1,1,1,1;%hull

0,0,0,0,0,0; NaN(1,6);...

2,6,NaN,7,2,NaN; %sails

2,2,NaN,2,2,NaN];

H = ones(2,6);

S = ones(3,3);

C = cat(3,[H*0.4;S*1,S*1],[H*0.2;S*0.6,S*0],[H*0;S*0.8,S*0]);

for i = 1:100

clf;

hold on;

Z = A*sin(k*Y+(w*i/2));

CO(:,:,1) = 0.3*ones((y_r-y_l)/ds + 1) + 0.3*cos(k*Y+(w*i/2));

CO(:,:,2) = 0.3*ones((y_r-y_l)/ds + 1) + 0.3*cos(k*Y+(w*i/2));

CO(:,:,3) = 0.7*ones((y_r-y_l)/ds + 1) + 0.3*cos(k*Y+(w*i/2));

surf(X,Y,Z,CO);

xlabel('x'); ylabel('y');

% rocking the boat

angle = 0.5*cos(w*i/2); %control rocking

Vs = V*cos(angle) - W*sin(angle);

Ws = V*sin(angle) + W*cos(angle) + 0.4 + 0.8*cos(w*(i - 0.5 * 2*pi)/2);%control amplitude

surf(U,Vs,Ws,C);

camproj('perspective');

xlim([x_l x_r]);

ylim([y_l y_r]);

zlim([y_l y_r]);

Zc = sqrt(X.^2+Y.^2);

%surf(X,Y,Zc);

%view([-100,20])

az = interp1([1,100],[-30, -120],i);

el = interp1([1,100],[1,30],i);

view([az,el]);

axis([-20,20,-20,20,-20,20]*0.5);

shading interp;

hold off;

drawnow;

pause(dt);

end

编辑:创建这些“模型”的关键是知道surf如何工作:给定一些矩阵X,Y,Z,这些矩阵的每个2x2子矩阵定义四边形的顶点。因此,我们的想法是将我们的模型分解为四边形(并在此矩阵中添加NaN,我们不希望它们之间有任何四边形)。查看以下片段,其中仅显示船体和所涉及的四边形。显示的数字表示坐标矩阵U,V,W中相应点的坐标的索引。我添加了一个小数字e拉开接缝,以便你可以真正看到四边形。将其设置为0以查看原始形状:

e = 0.2; %small shift to visualize seams

%sailboat

U = 0.7*[0-e,-1-e,-1-e,1+e,1+e,0+e;...%hull

0-e,0-e,0-e,0+e,0+e,0+e];

V = 0.7*[3+e,1,-3,-3,1,3+e;%hull

1+e,1,-2,-2,1,1+e];

W = 0.7*[1,1,1,1,1,1;%hull

0,0,0,0,0,0];

surf(U,V,W);

axis equal

view([161,30])

hold on

for i=1:2

for j=1:6

text(U(i,j),V(i,j),W(i,j),[num2str(i),',',num2str(j)]); %plot indices of points

end

end

xlabel('U')

ylabel('V')

zlabel('W')

title('i,j refers to the point with coordinates (U(i,j),V(i,j),W(i,j))')

hold off

matlab 水波模拟 代码,matlab - 在Matlab中模拟一艘在水波中航行的船 - SO中文参考 - www.soinside.com...相关推荐

  1. python找到一行单词中最长的_python - 查找.txt文件中最长的单词,不带标点符号 - SO中文参考 - www.soinside.com...

    我正在做Python文件I / O练习,尽管在尝试查找.txt文件每一行中最长的单词的练习上取得了巨大进步,但我无法摆脱标点符号.] > 这是我的代码:with open("origi ...

  2. oracle apex 日志,oracle-apex - 在oracle apex报告中显示员工记录或经理记录及其员工 - SO中文参考 - www.soinside.com...

    现在,创建一个函数来说明某人是否是经理.让它返回1(如果不是)(为什么不是0(为什么不是布尔值?您不能在select语句中使用它)). SQL> create or replace functi ...

  3. Java输入字符串输出成语_java - 在Java中,你怎么把这种模式/成语? - SO中文参考 - www.soinside.com...

    我的Java库提供了一个实现类SomethingClient接口SomethingClientImpl.该接口包含将被应用调用,如你所期望的方法. 但是有一个"镜像"接口Somet ...

  4. android 粘性view_android - 如何在RecyclerView中制作粘性标头? (有或没有外部库) - SO中文参考 - www.soinside.com...

    我正在使用room db,我有一张桌子,可以从其中获取LiveData列表.在该表中,有一个"日期"列,用于存储当前日期.当前日期默认为选中状态,但是在数据库中插入数据时,用户也可 ...

  5. matlab 高斯迭代代码_用Matlab编写你的第一个有限元_《数值计算与程序设计》系列课程...

    本课主要分析了有限元的基本理论, 不同于其他学习资料的是本文从数学的角度重新阐述了有限元分析的基本步骤,如通解与特解的讲解,并以一个偏微分方程实例,从基础插值出发,详细地讲解了有限元数学推导的每一步过 ...

  6. matlab kmeans c 代码,K-means之matlab实现

    引入 作为练手,不妨用matlab实现K-means 要解决的问题:n个D维数据进行聚类(无监督),找到合适的簇心. 这里仅考虑最简单的情况,数据维度D=2,预先知道簇心数目K(K=4) 理论步骤 关 ...

  7. matlab比例环节代码,典型环节MATLAB仿真.doc

    实验一 典型环节的MATLAB仿真 一.实验目的 1.熟悉MATLAB桌面和命令窗口,初步了解SIMULINK功能模块的使用方法. 2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节 ...

  8. matlab卡农代码微盘,MATLAB演奏国歌,除乐理知识基本抛弃卡农代码,未参照前国歌.......

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近很无聊,想起卡农代码,很是佩服,原卡农代码为小提琴三重奏,本人音乐修养不行,做不出来,在此感谢卡农大神代码的启发指点,并无多少相同 本帖第一部分为思路 ...

  9. matlab低通滤波器库函数代码_利用Matlab filterDesigner 工具生成FIR滤波器函数,并调用实现低通滤波...

    本文使用的开发环境为:Win10 Matlab2018a 版本. 在matlab命令窗口输入:filterDesigner命令,即可打开filterDesigner设计工具. 按照下图调整FIR低通滤 ...

最新文章

  1. python中的多继承
  2. 浅析图片XSS中的哪些技术问题
  3. 五千字详解消息通知!
  4. Docker部署ElasticSearch7.11.1并挂载+配置X-Pack设置帐号密码+Kibana7.11.1+IK插件
  5. TransactionScope只要一个操作失败,它会自动回滚,Complete表示事务完成
  6. 艾伟_转载:.NET 4.0新特性-- Corrupted State Exceptions
  7. slider节点透明背景_【Cocos Creator 实战教程(1)】——人机对战五子棋(节点事件相关)...
  8. 为什么Linux不需要碎片整理?
  9. VMware、Ubuntu和apt
  10. Extjs 4.1 学习笔记(二)(panel 自适应高度)
  11. W3School-CSS 字体(font)实例
  12. 20200108每日一句
  13. ETL工具——Taskctl Web应用篇
  14. Arduino 开发 — Arduino 函数库
  15. 百度分享不支持https的解决方案
  16. 星际争霸新手战术指南点滴
  17. 第一章 android以及智能手机行业相关简介
  18. 谈女人 作者:张爱玲
  19. 类 ApplicationInfo详解
  20. DM9006 linux driver

热门文章

  1. 语音识别、声纹识别的区别及测试
  2. ASCII编码-7Bit编码
  3. java自动化测试语言高级之泛型
  4. 几步教会你solidworks中的爆炸视图的制作
  5. 2021影像上海艺术博览会即将回归,多维度呈现本土影像艺术活力
  6. [Usaco2007 Nov]tanning分配防晒霜
  7. Java、JSP基于JavaEE的家庭影院系统
  8. 华东理工大学王昊奋博士VAG小组学术报告
  9. php pear mail smtp 不验证,怎么在php中使用pear_smtp实现一个邮件发送功能
  10. 自来水收费系统毕业论文(J2EE )