2014年全国数学建模B题程序
来源:互联网 发布:淘宝衣服洗了还能退吗 编辑:程序博客网 时间:2024/04/29 07:50
matlab亲测通过!
今年参加了数学建模,感觉挺高大上的,虽然我是数学专业的,但我这次主要负责编程,下面就给出我的matlab程序和部分图(桌面在下)和同志们分享。亲测通过!
function [x0,y0,z0]=DeskPoint_0(n,r)
%求桌面上各链接点坐标
%r为桌面圆的半径
%d为桌腿的宽度
%n为桌腿数目即桌腿与桌面链接点数目
x0=zeros(1,n);
y0=zeros(1,n);
z0=zeros(1,n);
sita=pi/20;
for i=1:n+1
if i<11&&i>=1 %1=<i<11
x0(i)=-r*sin((i-1)*sita);
y0(i)=-r*cos((i-1)*sita);
z0(i)=0;
elseif i>=11&&i<21 %11=<i<21
x0(i)=-r*cos((i-11)*sita);
y0(i)=r*sin((i-11)*sita);
z0(i)=0;
elseif i>=21&&i<31 %21=<i<31.
x0(i)=r*sin((i-21)*sita);
y0(i)=r*cos((i-21)*sita);
z0(i)=0;
elseif i>=31&&i<=41 %31=<i<=40
x0(i)=r*cos((i-31)*sita);
y0(i)=-r*sin((i-31)*sita);
z0(i)=0;
end
end
end
function long=Diameter2Edge(x0,y0,z0,r,n)
%计算直径到圆周上各链接点的距离
%x0,y0,z0分别为圆周上各链接点的x,y,z坐标
%r为桌面圆周的半径
%n为圆周上链接点的个数
long=zeros(1,n);
for i=1:n
long(i)=sqrt(x0(i)^2+z0(i)^2);
end
end
function [x1,y1,z1]=SolvePoint1(n,s,sita,yi)
%求钢筋上各连结点的坐标
%n为钢筋上链接点的个数
%s为最外面一条桌腿钢筋连接处与桌腿和桌面链接处接点的距离
%sita为最外面一条桌腿与桌面间的夹角
%yi为桌面上各链接点的y坐标
x1=zeros(1,n);
y1=zeros(1,n);
z1=zeros(1,n);
for i=1:n
if i<=n/2
x1(i)=-s*cos(pi-sita);
y1(i)=yi(i);
z1(i)=s*sin(pi-sita);
else
x1(i)=s*cos(pi-sita);
y1(i)=yi(i);
z1(i)=s*sin(pi-sita);
end
end
plot3(x1(1:n/2),y1(1:n/2),z1(1:n/2));
hold on;
plot3(x1((n/2+1):n),y1((n/2+1):n),z1((n/2+1):n));
hold on;
end
function edgeposition=DeskPaint(r,n,sita,s,ss)
%求各桌腿所在直线的参数方程并绘制出三维图形
%x0,y0,z0分别为各桌腿与桌面链接点的x,y,z坐标
%x1,y1,z1分别为各桌腿与钢筋联结点的x,y,z坐标
%n为桌腿的个数
%edgeposition为桌腿边缘曲线三维坐标矩阵
[x0,y0,z0]=SolvePoint0(n,r)
[x1,y1,z1]=SolvePoint1(n,s,sita,y0);
long=Diameter2Edge(x0,y0,z0,r,n);
x=zeros(n,100);
y=zeros(n,100);
z=zeros(n,100);
edgeposition=zeros(3,20);
for i=1:n
w=1;
j=0;
x(i,w)=j.*(x1(i)-x0(i))+x0(i);
y(i,w)=j.*(y1(i)-y0(i))+y0(i);
z(i,w)=j.*(z1(i)-z0(i))+z0(i);
between=sqrt((x(i,w)-x0(i))^2+(y(i,w)-y0(i))^2+(z(i,w)-z0(i))^2)+long(i);
while between<ss
x(i,w)=j.*(x1(i)-x0(i))+x0(i);
y(i,w)=j.*(y1(i)-y0(i))+y0(i);
z(i,w)=j.*(z1(i)-z0(i))+z0(i);
w=w+1;
j=j+0.1;
between=sqrt((x(i,w-1)-x0(i))^2+(y(i,w-1)-y0(i))^2+(z(i,w-1)-z0(i))^2)+long(i);
end
if i<=n/2
edgeposition(1,i)=x(i,w-1);
edgeposition(2,i)=y(i,w-1);
edgeposition(3,i)=z(i,w-1);
end
xx=x(i,:);
yy=y(i,:);
zz=z(i,:);
xx(w:100)=[];
yy(w:100)=[];
zz(w:100)=[];
plot3(xx,yy,zz);
hold on;
end
plot3(x0,y0,z0);
hold on;
title('折叠桌面动态三维图');
xlabel('x');
ylabel('y');
zlabel('z');
grid on;
end
运行图如下:
夹角为180度图 夹角为120度图
0 0
- 2014年全国数学建模B题程序
- 【题目】2016年全国研究生数学建模竞赛B题 具有遗传性疾病和性状的遗传位点分析
- 2009年数学建模B题
- 2017全国数学建模
- 全国研究生数学建模 总结
- 2014年建模全国大赛
- 2013年数学建模B题纸片拼接
- 从程序员角度分析2004年数学建模b题
- 2017年全国数学建模比赛赛后感想
- 2017年全国研究生数学建模自记
- 我的第一届华中地区数学建模联赛B题程序
- 2015年“深圳杯”数学建模夏令营-B题:DNA序列的k-mer index 问题
- 2015年“深圳杯”数学建模夏令营-B题:DNA序列的k-mer index 问题
- 葡萄酒的评价问题—2012年全国大学生数学建模竞赛B题
- 埃及水资源预测问题—2013年美国大学生数学建模竞赛B题
- 2007数学建模B题算法与实现源程序
- 2017数学建模B题回顾与解题分享
- 2014年美国数学建模竞赛C题总结
- 2级级联电压串联负反馈 算法
- Centos中Nginx部署基于IP的虚拟主机
- Cocos2d-X中的Slider控件
- HTML5 智能表单的应用
- 整合 Spring 和 Strust2
- 2014年全国数学建模B题程序
- sixth(求y)
- ZOJ 3822 概率DP
- JAVA计算圆面积和周长的程序
- poj 1823 最长空白段
- Android客户端通过socket与服务器通信
- 编程,艺术 or 科学?
- zoj3822 Domination (The 2014 ACM-ICPC Asia Mudanjiang Regional Contest D题)概率dp
- EditText 用代码的方式修改图标