数学建模-自来水管的连接问题

上传人:txadgkn****dgknqu... 文档编号:63863861 上传时间:2022-03-20 格式:DOC 页数:36 大小:429KB
收藏 版权申诉 举报 下载
数学建模-自来水管的连接问题_第1页
第1页 / 共36页
数学建模-自来水管的连接问题_第2页
第2页 / 共36页
数学建模-自来水管的连接问题_第3页
第3页 / 共36页
资源描述:

《数学建模-自来水管的连接问题》由会员分享,可在线阅读,更多相关《数学建模-自来水管的连接问题(36页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上 数学1101覃丽萍 信计1101 郭晓洁 数学1101 吕洋 自来水管道连接规划模型摘要在实际生活中,研究在绕开障碍物的前提下选取最优路径具有重要的现实意义。本文将着重分析讨论自来水管道连接规划问题,使自来水管道将各个供水点用最短路径连接,以达到节约成本,实现资源有效利用的目的。对于问题一,用三角形向量法确定是否为有效点。即在给定射线起点的情况下利用克莱默法则测出向量前的比例系数以判断射线与有界三角形是否相交,若相交,则该用户点在障碍区内为无效用户,否则,用户点不在障碍区内为有效用户。最终,得出第4,23,36,99号用户点在障碍区域内。同时并用记录矩阵SIGN记录

2、各个用户点的有效情况。对于问题二,求出障碍区边界点与两用户的交点坐标并运用向量法判断线段是否有效,将无效线段的距离赋值为无穷大,利用带权临接矩阵,使用Kruskal算法解得最小生成树并画出图形。 因问题二尚存不足,我们先后对模型进行两次改进。首先考虑到某两个有效用户之间可以用通过障碍物的顶点的折线连接使得水道管总长度更短,因此根据情况分别加入障碍物的十四个顶点再次生成有效线段的带权临接矩阵,求得各自的最小连通距离。比较各个情况的距离和,得到最短距离。其次考虑到在直角三角形斜边大于直角边,对有效用户连线夹角小于九十度的线段可用直角边替换斜边最终求的最优方案。最优方案sum=640.5283最后我

3、们对模型的可行性,合理性,科学性进行了阐述,得到模型。【关键词】:管道连接 向量法 障碍点筛选Kruskal算法 权值 最小生成树 直角三角形 问题重述 自来水是人们日常生活中不可缺少的生活要素,然而自来水管网的组建却有很多问题需要解决。本问题中,我们主要是通过障碍区坐标判断用户点的有效性同时在绕开障碍区的情况下以最小距离将有效用户点相连。需要完成的模型:(1) 判定表1中那些用户为有效用户。(2) 设计一个算法将有效用户用有效线段连接起来,并且连接的距离总和最小。问题分析建立模型要达到的目的就是节省管道,即在满足每个有效用户用水的情况下,使得铺设的管道最短。因此,自来水的管道规划问题可归结为

4、一个最优化问题,目标函数是求铺设的管道最短。由实际可知不是每两个用户之间都可以用直线相连,必须绕开一些障碍物也就是所谓的障碍区,所以我们应该首先要解决的就是找出这些障碍区域,然后再判断所给出的点是否位于障碍区域内,这样就筛选出了有效用户。接下来就是要把剩下的点用直线连接起来,通过障碍区域的线段视为无效线段把其剔除,筛选出有效线段。最后就是计算出这些有效线段的总和。三模型假设1. 文中给出所有点的坐标值准确无误;2. 在非障碍区用户之间可确保用直线连接;3. 障碍区域就是障碍顶点围成的凸多边形区域;4. 有效用户都能通过自来水管道获得自来水供应;5. 要保证在任意两点间线段不过障碍区的情况下,求

5、解连接形成的最短路径;3.1符号和变量的说明表6 论文符号说明符号含义A记录用户点的坐标信息SIGN记录各用户点是否在障碍区,若在对应位置记为1;若不在,则对应位置记为0INSIGN记录在障碍区的用户点的序号N记录保留用户点的个数NUM记录任意两用户点之间可用线段连接起来且不过障碍区的线段DIS记录不在障碍区各用户点之间可用不过障碍区线段连接的线段的长度EE记录生成的最小生成树的各点及各线段信息Sum表示产生的最小生成树中所有管道的总长M记录构成锐角的三点坐标矩阵N记录垂点坐标矩阵四模型建立4.1问题一的模型建立和求解 经分析可知该问题可转化为判断射线与障碍区顶点构成的三角形是否有交点,若有则

6、为无效用户,如无则为有效用户。模型大致可以分如下几个步骤:(1) 对于由简单三角形构成的障碍区:设三角形三个顶点坐标:(,), (,),(,)用户点坐标P(x,y,z)定义射线: 起点 O(,) 方向 =(x,y,z) 三角形内任意一点坐标: () ()射线公式 +t (II)(2)克莱默法则确定系数 =令A=若detA= 0则此三点不构成三角形(3)判断用户点的有效性若(I)=(II),则射线与闭三角形有交点,此时P为无效用户点,为有效用户对于多边凸面体,划分为多个三角形考虑即可程序执行结果:无效用户点 序号 坐标 序号 坐标障碍区199.0000(6.4781,17.0793)障碍区24.

7、0000(48.5982,33.3951)36.0000(41.8649,41.1953)障碍区3无障碍区423.0000(81.3166,87.4367) 执行编码见附录一(该程序在c+环境中执行,在执行之前需要建立一些文件夹,具体执行论文后附名为覃丽萍程序包文件夹,执行过程是把每个障碍区的端点依次覆盖)4.2问题二模型的建立与求解由问题分析可知,要筛选出有效用户点之间的有效线段,要分两步:一是求出过任意两个有效用户点的直线m与过各障碍区中任意两个顶点的直线L的交点坐标;二是运用向量法判断该交点是否在以上述两有效用户点为端点上的线段m1和以上述障碍区顶点为端点的线段L1上,然后判断过该两个有

8、效用户点的线段是否为有效线段。第一步:运用矩阵的方法求解两直线之间的交点坐标 如果任意两个有效用户点的坐标分别为A(x1,y1)、B(x2,y2),同一障碍区任意两个顶点坐标为M(x3,y3)、N(x4,y4)。则两直线方程分别为:(1)(2);则由解线性方程组的方法有,线性方程组的的系数矩阵为: ;在运用Matlab求解该线性方程组时,不妨把 分别设为: 可以求得=A。第二步:运用向量法判断线段是否为有效线段若求得的交点坐标为P(x,y),则通过向量关系PM=PN,可以求的。若0,则该线段为有效线段;若0,则要考虑向量关系PA=PB,若0,则该线段为有效线段,否则,该线段为无效线段。(编程见

9、附录二)判断完有效线段后一是利用Kruskal算法思想设计Matlab程序进行最小生成树所需边的筛选;二是设计算法将筛选出来的构成最小生成树的各边连接起来,求出最短路径长度,并画出连接图形。具体算法如下1. 利用Kruskal算法求解最小生成树把各个边赋予相应的权值,将构成一个网我们可以先求出由96个用户点中任意两个用户点之间的距离构成的邻接矩阵DIS,再根据问题二中求得的有效线段与无效线段对邻接矩阵进行修改,将邻接矩阵中对应无效线段的位置的值修改为inf,可以得到一个新的邻接矩阵DIS。接下来,用冒泡排序法对所有有效线段长度按从小到大的顺序进行排序。这时,需要借助Kruskal算法进行最小生

10、成树的计算。然后把最小生成树对应边的线段长度、起点、终点信息记录在矩阵EE中。然后从第一条边开始,依边权递增的顺序查看每一条边,并按下述方法连接2个不同的连通分支,当查看到第k条边(v,w)时,如果端点v和w分别是当前2个不同的连通分支𝑇1和𝑇2中的顶点时,就用边(v,w)将𝑇1和𝑇2连接成一个连通分支,然后继续查看第k+1条边,如果端点v和w在当前的同一个连通分支中,就直接再查看第k+1条边。这个过程一直进行,当只剩下一个连通分支时停止。然后根据有效用户点间的距离生成邻接矩阵(无效线段的值赋为无穷)。根据邻接矩阵,设计Krusk

11、al算法程序生成最小生成树。如下图并计算总长。总长结果为sum= 653.0196 (程序见附录三)4.3模型的优化和推广 (1)模型的第一步改进对于已有模型的不足,可以在此模型基础上进行优化,算出新的最短路。容易看出原有模型没有考虑一种可能出现的情况:某两个有效用户之间用通过障碍物的顶点的折线连接,而这样得到的水道管总长度更短。 因此,上述模型得到的最短距离离实际的最短距离还有一定的误差。可以使用以下方法:在障碍物14个顶点中,任选其中一个加入96个有效用户点中,并再次进行有效性判断生成新的邻接矩阵。按照上述算法,就可得到就可得到一个新的距离。 程序仍然执行第一步的所有程序只是依次将14个边

12、界点带入第一次仅带入一点,第二次带入相邻两点。在此过程中需要改变矩阵大小及其for循环的最大值。多次带入得出加入一号边界点最短连接图如下图所示:算的总长为sum=643.8404 (2)模型的第二步改进显然最小生成树中除去树杈的末端用户点,每个有效用户必与另外两个用户相连,根据直角三角形斜边大于直角边的原理可在最小的生成树的基础上做如下改进:(1)求两相连线段的夹角并判断其是否为锐角并将结果记录在M矩阵中;(程序见附录四)由向量的内积值的正负可判断其夹角是否为锐角。若为钝角则不做任何改变,若为锐角则作如下讨论:对于一般情况的ABC.如图(2-1)图(2-1)此时最短路径有两种替换CB或替换AB

13、,即由较短边向较长边引垂线或有较长边向较短边引垂线。求解方法如下:由*=* 可得/=(*)/设/=(*)/=t (III)设A(,) , B (,)则由(III)可得垂足坐标为(t+(1-t),t+(1-t) )。同理可求得的坐标。有了垂点坐标将垂点坐标带入最小生成树程序得到最优解(程序见附录五)对以上两种情况分别执行,其程序结果图如下:(1) 长边向短边引垂线垂点坐标如下75.8942 22.480293.1373 79.091653.4231 69.2768 71.5235 88.113427.3054 4.906179.5207 12.114037.9377 63.482541.1751

14、 60.500728.7187 83.770128.4281 84.409678.8445 61.039452.2196 25.974752.7029 27.286788.4034 4.669089.4515 4.5176结果sum= 641.9616(改进点已用红点标出)(2) 短边向长边引垂线垂点坐标如下76. 22.92. 78.53. 69.71. 91.27. 43.79. 12.37. 63.40. 60.27. 84.28. 84.82. 62.53. 26.51. 27.88. 6.88. 4.结果sum=640.5283(改进点已用红点标出) 经比较可得法(2)所得权值距离较

15、短,故最优解SUM=640.5283(程序见附录六)参考文献:精通MATLAB最优化计算作者:龚纯 出版社:电子工业出版社MATLAB语言常用算法程序集 作者:王正林 出版社:电子工业出版社c+程序设计教程 作者:钱能 出版社:清华大学出版社附录(除特别说明外程序均在matlab中运行)附录一(该程序在c+环境中运行)#include#includeneed.husing namespace std;int MARx1(double x0,double y0,double x1,double y1,double x2,double y2,double x,double y);int main(

16、)int m=0;int a;cout用户坐标记录中.endl;dot dot1;/定义类dot1.Ruser();/调用类函数读取用户点坐标文件dot1.RIuser();/调用类函数读取障碍区顶点坐标文件for(int q=0;qdot1.aldotnum;q+)/下面的是运用三角形向量法判断点是否在区域内for(int n=1;ndot1.alldot20-1;n+)for(int p=2+n-1;pdot1.alldot20;p+)/此函数为向量法判断点是否在三角形内a=MARx1(dot1.headdot00,dot1.headdot01,dot1.headdotn0,dot1.he

17、addotn1,dot1.headdotp0,dot1.headdotp1,dot1.udotq0,dot1.udotq1);if(a=1)cout点dot1.udotq0 dot1.udotq1在区域m+1里endl;break;if(a=1)break;/if(a=0)/cout点dot1.udotq0 dot1.udotq1不在区域里endl;while(1)char b;coutb;if(b=n)break;return 0;int MARx1(double x0,double y0,double x1,double y1,double x2,double y2,double x,do

18、uble y)double x3,y3;x3=(x-x0)*(y2-y0)-(x2-x0)*(y-y0)/(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);y3=(x1-x0)*(y-y0)-(x-x0)*(y1-y0)/(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);if(x3+y3=0&y3=0)return 1;else return 0;附录二A=1.0000 95.0129 58.27922.0000 23.1139 42.34963.0000 60.6843 51.55124.0000 48.5982 33.39515.0000 89.1299 43.

19、29076.0000 76.2097 22.59507.0000 45.6468 57.98078.0000 1.8504 76.03659.0000 82.1407 52.982310.0000 44.4703 64.052611.0000 61.5432 20.906912.0000 79.1937 37.981813.0000 92.1813 78.332914.0000 73.8207 68.084615.0000 17.6266 46.109516.0000 40.5706 56.782917.0000 93.5470 79.421118.0000 91.6904 5.918319.

20、0000 41.0270 60.286920.0000 89.3650 5.026921.0000 5.7891 41.537522.0000 35.2868 30.499923.0000 81.3166 87.436724.0000 0.9861 1.500925.0000 13.8891 76.795026.0000 20.2765 97.084527.0000 19.8722 99.008328.0000 60.3792 78.886229.0000 27.2188 43.865930.0000 19.8814 49.831131.0000 1.5274 21.396332.0000 7

21、4.6786 64.349233.0000 44.5096 32.003634.0000 93.1815 96.009935.0000 46.5994 72.663236.0000 41.8649 41.195337.0000 84.6221 74.456638.0000 52.5152 26.794739.0000 20.2647 43.992440.0000 67.2137 93.338041.0000 83.8118 68.333242.0000 1.9640 21.256043.0000 68.1277 83.923844.0000 37.9481 62.878545.0000 83.

22、1796 13.377346.0000 50.2813 20.713347.0000 70.9471 60.719948.0000 42.8892 62.988849.0000 30.4617 37.047750.0000 18.9654 57.514851.0000 19.3431 45.142552.0000 68.2223 4.389553.0000 30.2764 2.718554.0000 54.1674 31.268555.0000 15.0873 1.286356.0000 69.7898 38.396757.0000 37.8373 68.311658.0000 86.0012

23、 9.284259.0000 85.3655 3.533860.0000 59.3563 61.239561.0000 49.6552 60.854062.0000 89.9769 1.576063.0000 82.1629 1.635564.0000 64.4910 19.007565.0000 81.7974 58.691866.0000 66.0228 5.758167.0000 34.1971 36.756868.0000 28.9726 63.145169.0000 34.1194 71.763470.0000 53.4079 69.266971.0000 72.7113 8.407

24、972.0000 30.9290 45.435573.0000 83.8496 44.182874.0000 56.8072 35.325075.0000 37.0414 15.360676.0000 70.2740 67.564577.0000 54.6571 69.921378.0000 44.4880 72.750979.0000 69.4567 47.838480.0000 62.1310 55.484281.0000 79.4821 12.104782.0000 95.6843 45.075483.0000 52.2590 71.588384.0000 88.0142 89.2842

25、85.0000 17.2956 27.310286.0000 97.9747 25.476987.0000 27.1447 86.560388.0000 25.2329 23.235089.0000 87.5742 80.487290.0000 73.7306 90.839891.0000 13.6519 23.189492.0000 1.1757 23.931393.0000 89.3898 4.975494.0000 19.9138 7.838495.0000 29.8723 64.081596.0000 66.1443 19.088797.0000 28.4409 84.386998.0

26、000 46.9224 17.390099.0000 6.4781 17.0793100.0000 98.8335 99.4295;B=1 3.2060 12.91662 17.4571 19.33773 4.7576 20;C=1 50 302 53.7465 48.44903 46.9222 57.11955 43.1123 56.31874 33.3207 39.8050;D=1 54.6982 702 53.7465 903 46.9222 80;E=1 90 752 80 953 70 80;%创建用户点坐标及障碍区顶点坐标SIGN=zeros(1,100);%生成1行100列的记录

27、矩阵, for n=1:100if(A(n,1)=4|A(n,1)=23|A(n,1)=36|A(n,1)=99)SIGN(n)=0else SIGN(n)=1endendSIGN; %若点不在障碍区则对应位置记为1若否记0OUTSIGN=find(SIGN=0)p=0;for i=1:100 p=p+SIGN(i);endp%下面进行有效线段的筛选NUM=zeros(100,100);for i=1:100 for j=i+1:100 NUM(i,j)=1; endendb1=(B(1,3)-B(2,3)/(B(1,2)-B(2,2);bb1=(B(1,3)*B(2,2)-B(1,2)*B(

28、2,3)/(B(1,2)-B(2,2);b2=(B(2,3)-B(3,3)/(B(2,2)-B(3,2);bb2=(B(2,3)*B(3,2)-B(2,2)*B(3,3)/(B(2,2)-B(3,2);b3=(B(3,3)-B(1,3)/(B(3,2)-B(1,2);bb3=(B(3,3)*B(1,2)-B(3,2)*B(1,3)/(B(3,2)-B(1,2);BB=b1 bb1;b2 bb2;b3 bb3;c1=(C(1,3)-C(2,3)/(C(1,2)-C(2,2);cc1=(C(1,3)*C(2,2)-C(1,2)*C(2,3)/(C(1,2)-C(2,2);c2=(C(2,3)-C(

29、3,3)/(C(2,2)-C(3,2);cc2=(C(2,3)*C(3,2)-C(2,2)*C(3,3)/(C(2,2)-C(3,2);c3=(C(3,3)-C(4,3)/(C(3,2)-C(4,2);cc3=(C(3,3)*C(4,2)-C(3,2)*C(4,3)/(C(3,2)-C(4,2);c4=(C(4,3)-C(5,3)/(C(4,2)-C(5,2);cc4=(C(4,3)*C(5,2)-C(4,2)*C(5,3)/(C(4,2)-C(5,2);c5=(C(5,3)-C(1,3)/(C(5,2)-C(1,2);cc5=(C(5,3)*C(1,2)-C(5,2)*C(1,3)/(C(5

30、,2)-C(1,2);CC=c1 cc1;c2 cc2;c3 cc3;c4 cc4;c5 cc5;d1=(D(1,3)-D(2,3)/(D(1,2)-D(2,2);dd1=(D(1,3)*D(2,2)-D(1,2)*D(2,3)/(D(1,2)-D(2,2);d2=(D(2,3)-D(3,3)/(D(2,2)-D(3,2);dd2=(D(2,3)*D(3,2)-D(2,2)*D(3,3)/(D(2,2)-D(3,2);d3=(D(3,3)-D(1,3)/(D(3,2)-D(1,2);dd3=(D(3,3)*D(1,2)-D(3,2)*D(1,3)/(D(3,2)-D(1,2);DD=d1 dd

31、1;d2 dd2;d3 dd3;e1=(E(1,3)-E(2,3)/(E(1,2)-E(2,2);ee1=(E(1,3)*E(2,2)-E(1,2)*E(2,3)/(E(1,2)-E(2,2);e2=(E(2,3)-E(3,3)/(E(2,2)-E(3,2);ee2=(E(2,3)*E(3,2)-E(2,2)*E(3,3)/(E(2,2)-E(3,2);e3=(E(3,3)-E(1,3)/(E(3,2)-E(1,2);ee3=(E(3,3)*E(1,2)-E(3,2)*E(1,3)/(E(3,2)-E(1,2);EE=e1 ee1;e2 ee2;e3 ee3;for i=1:100 for j

32、=i+1:100 x1=A(i,2); y1=A(i,3); x2=A(j,2); y2=A(j,3); a=(y1-y2)/(x1-x2); b=(y1*x2-x1*y2)/(x1-x2); for k=1:3 M=a -1;BB(k,1) -1; N=b 0;BB(k,2) 0; if(det(M)=0) P=MN; x=P(1,1); y=P(2,1); M1=x-B(k,2) y-B(k,3); N1=x-B(mod(k,3)+1,2) y-B(mod(k,3)+1,3); m=M1/N1; aa=x-x1,y-y1; bb=x-x2,y-y2; if(xor(aa(1),bb(1)|

33、xor(aa(1),bb(1)mm=0; else mm=aa/bb; end if(m0) if(mm0) NUM(i,j)=NUM(i,j)*0; else NUM(i,j)=NUM(i,j)*1; end else NUM(i,j)=NUM(i,j)*1; end end end for k=1:5 M=a -1;CC(k,1) -1; N=b 0;CC(k,2) 0; if(det(M)=0) P=MN; x=P(1,1); y=P(2,1); M1=x-C(k,2) y-A(k,3); N1=x-C(mod(k,5)+1,2) y-C(mod(k,5)+1,3); m=M1/N1;

34、aa=x-x1,y-y1; bb=x-x2,y-y2; if(xor(aa(1),bb(1)|xor(aa(1),bb(1)mm=0; else mm=aa/bb; end if(m0) if(mm0)NUM(i,j)=NUM(i,j)*0; else NUM(i,j)=NUM(i,j)*1; end else NUM(i,j)=NUM(i,j)*1; end end end for k=1:3 M=a -1;DD(k,1) -1; N=b 0;DD(k,2) 0; if(det(M)=0) P=MN; x=P(1,1); y=P(2,1); M1=x-D(k,2) y-D(k,3); N1=

35、x-D(mod(k,3)+1,2) y-D(mod(k,3)+1,3); m=M1/N1; aa=x-x1,y-y1; bb=x-x2,y-y2; if(xor(aa(1),bb(1)|xor(aa(1),bb(1)mm=0; else mm=aa/bb; end if(m0) if(mm0)NUM(i,j)=NUM(i,j)*0; else NUM(i,j)=NUM(i,j)*1; end else NUM(i,j)=NUM(i,j)*1; end end end for k=1:3 M=a -1;EE(k,1) -1; N=b 0;EE(k,2) 0; if(det(M)=0) P=MN;

36、 x=P(1,1); y=P(2,1); M1=x-E(k,2) y-E(k,3); N1=x-E(mod(k,3)+1,2) y-E(mod(k,3)+1,3); m=M1/N1; aa=x-x1,y-y1; bb=x-x2,y-y2; if(xor(aa(1),bb(1)|xor(aa(1),bb(1)mm=0; else mm=aa/bb; end if(m0) if(mmx(1,j) a=x(1,i);x(1,i)=x(1,j);x(1,j)=a; a=x(2,i);x(2,i)=x(2,j);x(2,j)=a; a=x(3,i);x(3,i)=x(3,j);x(3,j)=a; end

37、endendR=zeros(1,n); %R用于记录已选的点的标号for i=1:n l(i)=i;end%l 用于对点的筛选,防止形成回路%初始时选e1加入集合EEEE(1,1)=x(1,1); %EE矩阵的第一行记录最小生成树的边长EE(2,1)=x(2,1); %EE矩阵的第二行记录边的起点EE(3,1)=x(3,1); %EE矩阵的第三行记录边的终点a=min(l(x(2,1),l(x(3,1);l(x(2,1)=a;l(x(3,1)=a;%用于筛选点,防止形成回路b=1;%记录EE中边数R(1)=x(2,1);R(2)=x(3,1);c=2;for i=2:k%步骤四if b=n-1

38、 %如果树中边数达到n-1break %算法终止end%步骤二O1=find(R=x(2,i);O2=find(R=x(3,i);size1=size(O1,2);size2=size(O2,2);if(size1=0&size2=0) if l(x(2,i)=l(x(3,i); else %如果两顶点标号不同 b=b+1; %将这条边加入EE EE(1,b)=x(1,i); EE(2,b)=x(2,i); EE(3,b)=x(3,i); a=min(l(x(2,i),l(x(3,i); b1=max(l(x(2,i),l(x(3,i); S1=find(l=b1); len=size(S1,

39、2); for j=1:len l(S1(j)=a; end endelseif(size1=0&size2=0) R(c+1)=x(2,i); c=c+1;endif(size2=0&size1=0) R(c+1)=x(3,i); c=c+1;endif(size2=0&size1=0) R(c+1)=x(2,i); R(c+2)=x(3,i); c=c+2;endb=b+1; %将这条边加入EEEE(1,b)=x(1,i);EE(2,b)=x(2,i);EE(3,b)=x(3,i);a=min(l(x(2,i),l(x(3,i);b1=max(l(x(2,i),l(x(3,i);S1=fi

40、nd(l=b1);len=size(S1,2); for j=1:len l(S1(j)=a; endendendEE;sum=0;for i=1:p-1 sum=sum+EE(1,i);endsumhold on;for i=1:100 x=A(i,2); y=A(i,3); plot(x,y,o)endfor i=1:n-1 x1=AL(EE(2,i),2); y1=AL(EE(2,i),3); x2=AL(EE(3,i),2); y2=AL(EE(3,i),3); X=x1,x2; Y=y1,y2; plot(X,Y)endfor i=1:3 x1=B(i,2); y1=B(i,3);

41、x2=B(mod(i,3)+1,2); y2=B(mod(i,3)+1,3); X=x1,x2; Y=y1,y2; plot(X,Y,m)endfor i=1:5 x1=C(i,2); y1=C(i,3); x2=C(mod(i,5)+1,2); y2=C(mod(i,5)+1,3); X=x1,x2; Y=y1,y2; plot(X,Y,m)endfor i=1:3 x1=D(i,2); y1=D(i,3); x2=D(mod(i,3)+1,2); y2=D(mod(i,3)+1,3); X=x1,x2; Y=y1,y2; plot(X,Y,m)endfor i=1:3 x1=E(i,2);

42、 y1=E(i,3); x2=E(mod(i,3)+1,2); y2=E(mod(i,3)+1,3); X=x1,x2; Y=y1,y2; plot(X,Y,m)end附录四(该程序在C+环境中运行)#includeofu.hvoid ofu:readdot()ifstream infile(raddot.txt,ios:in);if(!infile)cerr用户点坐标打开失败endl;exit(1);for(m=0;mdotm;else break;if(m%6!=0)couterror fileendl;coutmendl;a=m;for(n=0;na) break;cout总共有n行点组

43、endl;infile.close();void ofu:judgedot()double a;/这个只是用来判断是不是锐角for(int p=0;p0)cout第p+1行的角是锐角:endl;else continue;附录五M=76.2122.5993.5579.4253.4169.2773.7390.8427.2243.8779.4812.137.9562.8841.0360.2928.4484.3928.4484.3981.858.6952.5226.7952.5226.7989.365.02789.365.027;79.4812.1907552.2671.5967.2193.3430.4637.0576.2122.5929.8764.0837.9562.8813.8976.813.8976.883.8168.3361.5420.9144.5132869.28485.373.534;66.1419.0992.1878.3354.6669.9268.1383.9230.9345.4483.1813.3837.8468.3142.8962.9934.1271

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!