我刚刚制作了一个由四边形组成的帆船的简单模型。这允许我们使用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. 云计算究竟能帮你具体做些什么事?
  2. 【测试】小龟小车A2裸板下载arduino程序
  3. 1012 The Best Rank (25 分)【难度: 中 / 知识点: 排序 前缀和】
  4. 开启物联网的真正潜力需要在更大程度上克服数据挑战
  5. 2017计算机应用+简答,2017计算机应用基础试题及答案
  6. using语句之-释放资源和异常处理
  7. @qualifier注解_常见的 Spring 注解概览
  8. Java中String类 compareTo()方法比较字符串详解
  9. 从零开始学 Web 之 ES6(三)ES6基础语法一
  10. git init、git status、git config user.name、git add、git commit、git remote、git push、git clone、git pull
  11. .net html第一张图片,基于Asp.net C#实现HTML转图片(网页快照)
  12. Metasequoia 4 for Mac(3D建模)
  13. 3D打印机改装雕刻机经验分享
  14. express不是内部或外部命令
  15. 通俗易懂解释什么是“中台”
  16. BASH SHELL ls -l 输出了什么
  17. Twitter、Google背后的“卖水人”,力盟科技也来港股分一杯羹?
  18. ocr人脸识别是什么原理,ocr的工作原理是什么
  19. 安装win10时无法安装若要在此计算机,win10安装时遇问题如何解决 win10安装解决方案...
  20. 新进入一个研发团队,或者项目组要做什么?

热门文章

  1. 安兔兔android手机性能排行榜,安兔兔手机性能排行榜
  2. 服务器的CPLD的上下电控制时序及源代码实现
  3. 理解资产定价领域的“均衡模型”:APT、CAPM、马歇尔、瓦尔拉斯、无套利均衡
  4. C++ 高精度除法运算(c=a/b)
  5. 博客园自定义样式主题 -- cnblogs theme
  6. 手把手教你如何获取微信公众号用户的个人信息(包括OpenId)
  7. 路缘石成型机应对公路项目施工的技术层面
  8. 基于STC89C52单片机的智能风扇
  9. 可擦玻璃平顶的机器人_哪款智能擦玻璃机器人/擦窗机器人性价比高?
  10. 自己搭建网站一个月多少钱?