地铁站规划Word下载.docx
《地铁站规划Word下载.docx》由会员分享,可在线阅读,更多相关《地铁站规划Word下载.docx(20页珍藏版)》请在冰点文库上搜索。
![地铁站规划Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/4ff26786-719e-47ab-9e5c-64141647051d/4ff26786-719e-47ab-9e5c-64141647051d1.gif)
因此选择内接六边形进行连接。
接下来就是不断地在以原来六边形的基础上生成新的六边形直到完全覆盖城市为止。
如下图可以把六边形覆盖过程看成是由第一个六边形A先沿30度方向平移生成新的六边形直到生成的新六边形完全离开城区。
然后将A沿y轴向上平移得到新的六边形B,再将B沿30度方向平移得到新的六边形直到新的六边形完全离开城区………以此类推就可以将整个城区用六边形覆盖。
我们组用C++模拟这个覆盖过程。
至于设计出最佳地铁线路,可以转换为求最小生成树问题。
模型假设:
1.每个地铁站近似地看成一个质点
2.城区的任何地方都可以建造地铁
模型建立与求解:
首先用matlab求各点坐标,进而求出各个直线的解析式。
用C++编程求得最少需要221个六边形覆盖城区,我们组将每个六边形的中点作为作为建立地铁站的位置。
以下为221个地铁站的坐标:
060
866.9282
880.7846
873.8564
894.641
887.7128
16101.569
1694.641
1687.7128
1680.7846
1673.8564
1666.9282
16115.426
16108.497
16129.282
16122.354
16143.138
16136.21
1660
32143.138
32136.21
32129.282
32122.354
32115.426
32108.497
32101.569
3294.641
3287.7128
3280.7846
3273.8564
3266.9282
3260
48143.138
48136.21
48129.282
48122.354
48115.426
48108.497
48101.569
4894.641
4887.7128
4880.7846
4873.8564
4866.9282
4860
64143.138
64136.21
64129.282
64122.354
64115.426
64108.497
64101.569
6494.641
6487.7128
6480.7846
6473.8564
6466.9282
6460
80143.138
80136.21
80129.282
80122.354
80115.426
80108.497
80101.569
8094.641
8087.7128
8080.7846
8073.8564
8066.9282
8060
96143.138
96136.21
96129.282
96122.354
96115.426
96108.497
96101.569
9694.641
9687.7128
9680.7846
9673.8564
9666.9282
9660
112143.138
112136.21
112129.282
112122.354
112115.426
112108.497
112101.569
11294.641
11287.7128
11280.7846
11273.8564
11266.9282
11260
128143.138
128136.21
128129.282
128122.354
128115.426
128108.497
128101.569
12894.641
12887.7128
12880.7846
12873.8564
12866.9282
12860
136150.067
136143.138
136136.21
136129.282
136122.354
136115.426
136108.497
136101.569
13694.641
13687.7128
13680.7846
13673.8564
13666.9282
13660
136163.923
136156.995
144170.851
144163.923
144156.995
144150.067
144143.138
144136.21
144129.282
144122.354
144115.426
144108.497
144101.569
14494.641
14487.7128
152177.779
152170.851
152163.923
152156.995
152150.067
152143.138
152136.21
152129.282
152122.354
152115.426
152108.497
152101.569
160184.708
160177.779
160170.851
160163.923
160156.995
160150.067
160143.138
160136.21
160129.282
160122.354
160115.426
168191.636
168184.708
168177.779
168170.851
168163.923
168156.995
168150.067
168143.138
168136.21
168129.282
176198.564
176191.636
176184.708
176177.779
176170.851
176163.923
176156.995
176150.067
176143.138
利用C++编写程序计算221个点之间的距离,随后即可用matlab求出最小生成树的邻接矩阵,由于运行结果是一个221*221的矩阵,太过巨大,因此只选择结果的某一个部分,该结果表示第一个地铁站与第二个地铁站相连,距离为10.583,第二个地铁站与第四个地铁站相连,距离为6.9282……..以此类推,就可以画出地铁线路得到地铁如何换乘。
附录:
1.C++编程模拟六边形覆盖城区的过程
#include<
iostream>
math.h>
fstream>
usingnamespacestd;
intnum=0;
boolflag(doublex,doubley)
{boolt=true;
if((144-y>
=0&
&
y-60>
5.6*x-y+60>
-0.8*x-y+240>
=0)||(0.8*x+y-240>
-0.8*x-y+347.5725>
1.25*x-y-6>
-1.25*x+y+356.5711>
=0))t=true;
else
t=false;
returnt;
}
booloutside(doublex0,doubley0)
{
doublex1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6;
intjishu=0;
if(flag(x0,y0))jishu++;
x1=x0+8;
y1=y0;
x2=x0+4;
y2=y0+4*sqrt(3);
x3=x0-4;
y3=y2;
x4=x0-8;
y4=y0;
x5=x0-4;
y5=y0-4*sqrt(3);
x6=x2;
y6=y5;
if(flag(x1,y1))jishu++;
if(flag(x2,y2))jishu++;
if(flag(x3,y3))jishu++;
if(flag(x4,y4))jishu++;
if(flag(x5,y5))jishu++;
if(flag(x6,y6))jishu++;
if(jishu==0)returnfalse;
else
returntrue;
doublebornx(doublex0)
returnx0+8;
doubleborny(doubley0)
returny0-4*sqrt(3);
intmain()
ofstreamoutfile("
subway.txt"
ios:
:
in);
if(!
outfile)cout<
<
"
openfileerror"
endl;
doublex0=0;
doubley0=60;
doublefix0=x0;
doublefiy0=y0;
inti=0;
intj=0;
while(j<
=30)
{
i=0;
while(i<
{
if(flag(x0,y0)){outfile<
x0<
"
y0<
num++;
else
x0=bornx(x0);
y0=borny(y0);
i++;
}
x0=fix0;
y0=fiy0+8*sqrt(3);
fix0=x0;
fiy0=y0;
j++;
}
fix0=0;
fiy0=60;
x0=fix0;
y0=fiy0-8*sqrt(3);
fix0=x0;
fiy0=y0;
j=0;
while(j<
=10)
y0=fiy0-8*sqrt(3);
cout<
num;
return0;
2.计算各点的距离
#include<
main()
ifstreaminfile("
distance.txt"
out);
doublea[221][2];
while(i<
=220)
{
infile>
>
a[i][0]>
a[i][1];
i++;
i=0;
intj=0;
doubleb;
j=0;
{
b=sqrt((a[i][0]-a[j][0])*(a[i][0]-a[j][0])+(a[i][1]-a[j][1])*(a[i][1]-a[j][1]));
outfile<
b<
;
j++;
}
outfile<
3最小生成树的matlab代码
function
[b,u,w]=mintrees(a,k)%最小生成树
,a
邻接矩阵,k
起点
if
nargout==1
k=1;
end
[m,n]=size(a);
for
i=1:
m
j=1:
n
a(i,j)==0
a(i,j)=inf;
b=zeros(n);
u
(1)=k;
j=1;
v=zeros(1,n);
v(k)=1;
o=1:
n-1
sn=ones(3,n)*inf;
xk=1:
j
k=u(xk);
p=max(a(k,:
));
v(i)<
1&
a(k,i)<
p
p=a(k,i);
a(k,i)==p
break;
sn([1
2
3],k)=[i,p,u(xk)];
[w(j),k]=min(sn(2,:
j=j+1;
u(j)=sn(1,k);
b(sn(1,k),sn(3,k))=sn(2,k);
v(u(j))=1;
在命令窗口输入
A=load(‘distance.txt’);
B=mintrees(A)%B为最小生成树的领阶矩阵