《程序設(shè)計(jì)藝術(shù)與方法》課程實(shí)驗(yàn)報(bào)告_第1頁(yè)
《程序設(shè)計(jì)藝術(shù)與方法》課程實(shí)驗(yàn)報(bào)告_第2頁(yè)
《程序設(shè)計(jì)藝術(shù)與方法》課程實(shí)驗(yàn)報(bào)告_第3頁(yè)
《程序設(shè)計(jì)藝術(shù)與方法》課程實(shí)驗(yàn)報(bào)告_第4頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、程序設(shè)計(jì)藝術(shù)與方法課程實(shí)驗(yàn)報(bào)告一實(shí)驗(yàn)名稱(chēng)STL 的熟悉與使用計(jì)算機(jī)與計(jì)算機(jī)科姓名班級(jí)學(xué)與技術(shù)學(xué)號(hào)系院專(zhuān)業(yè)信息學(xué)院122 班實(shí)驗(yàn)日期指導(dǎo)教師徐本柱成績(jī)一、實(shí)驗(yàn)?zāi)康暮鸵?( 1)掌握 C+ 中 STL 的容器類(lèi)使用。( 2)掌握 C+ 中 STL 的算法類(lèi)的使用。二、實(shí)驗(yàn)預(yù)習(xí)內(nèi)容Vector,list 可當(dāng)作列表使用的數(shù)據(jù)結(jié)構(gòu),它們都是動(dòng)態(tài)增長(zhǎng)的。1.vector 表示一段連續(xù)的內(nèi)存區(qū)域每個(gè)元素被順序儲(chǔ)存在這段內(nèi)存中。對(duì)vector 的隨即訪問(wèn)效率很高。但是在任意位置而不是在vector 末尾插入元素則效率很低,因?yàn)樗枰汛迦朐氐挠疫叺拿總€(gè)元素都拷貝一遍。類(lèi)似的刪除任一個(gè)而不是vector

2、 的最后一個(gè)元素效率低。2list 表示非連續(xù)的內(nèi)存區(qū)域并通過(guò)一對(duì)指向首尾元素的指針雙向進(jìn)行遍歷在list 的任意位置插入和刪除元素的效率都很高, 指針必須被賦值但不需要用拷貝元素來(lái)實(shí)現(xiàn)移動(dòng),另一方面它對(duì)隨機(jī)訪問(wèn)的支持并不好訪問(wèn)一個(gè)元素需要遍歷中間的元素,另外每個(gè)元素還有倆不能給個(gè)指針的額外空間開(kāi)銷(xiāo)。3 泛型算法讓編寫(xiě)一般化并可重復(fù)使用的算法,其效率與指針對(duì)某特定數(shù)據(jù)類(lèi)型而設(shè)計(jì)的算法相同。泛型即是指具有在多種數(shù)據(jù)類(lèi)型上皆可操作的含義,與模板有些相似。STL 巨大而且可以擴(kuò)充,它包含很多計(jì)算機(jī)基本算法和數(shù)據(jù)結(jié)構(gòu),而且將算法與數(shù)據(jù)結(jié)構(gòu)完全分離,其中算法是泛型的,不與任何特定數(shù)據(jù)結(jié)構(gòu)或?qū)ο箢?lèi)型系在一

3、起。三、實(shí)驗(yàn)項(xiàng)目摘要1. 練習(xí) vector 和 list 的使用。定義一個(gè)空的 vector ,元素類(lèi)型為 int ,生成 10個(gè)隨機(jī)數(shù)插入到 vector中,用迭代器遍歷 vector 并輸出其中的元素值。在vector頭部插入一個(gè)隨機(jī)數(shù),用迭代器遍歷vector并輸出其中的元素值。用泛型算法find查找某個(gè)隨機(jī)數(shù),如果找到便輸出,否則將此數(shù)插入 vector 尾部。用泛型算法sort 將 vector 排序,用迭代器遍歷vector 并輸出其中的元素值。刪除 vector 尾部的元素,用迭代器遍歷vector并輸出其中的元素值。將vector 清空。定義一個(gè) list ,并重復(fù)上述實(shí)驗(yàn),

4、并注意觀察結(jié)果2 練習(xí)泛型算法的使用。定義一個(gè) vector ,元素類(lèi)型為 int ,插入 10 個(gè)隨機(jī)數(shù),使用 sort 按升序排序,輸出每個(gè)元素的值,再按降敘排序,輸出每個(gè)元素的值。練習(xí)用find查找元素。用 min 和max 找出容器中的最小元素個(gè)最大元素,并輸出。四、實(shí)驗(yàn)結(jié)果與分析(源程序及相關(guān)說(shuō)明)1. 練習(xí) vector 和 list 的使用:#include <iostream>#include <vector>#include<iomanip>#include<ctime>#include <algorithm>usi

5、ng namespace std;vector<int> myV;bool sortup(int v1,int v2)return v1<v2;int main(int argc, char *argv)srand(time(NULL);/隨機(jī)產(chǎn)生十個(gè)數(shù)for (int i=0;i<10;i+)myV.push_back(rand();sort(myV.begin(),myV.end(),sortup);/用 sort 排序升序vector<int>:iterator it1;for (it1=myV.begin();it1!=myV.end();it1+)

6、cout<<(*it1)<<setw(6);/打印數(shù)組cout<<endl;int min=myV0;for (it1=myV.begin()+1;it1!=myV.end();it1+)if(*it1)<min)min=(*it1);cout<<"最小元素為 " <<min<<endl;int max=myV0;for (it1=myV.begin();it1!=myV.end();it1+)if(*it1)>max)max=(*it1);cout<<"最大元素為 &

7、quot; <<max<<endl;cout<<endl;int value=rand();it1=find(myV.begin(),myV.end(),value);if(*it1)=value)cout<<"找到了這個(gè)隨機(jī)數(shù) "<<endl ;elsecout<<"沒(méi)有找到這個(gè)隨機(jī)數(shù) "<<endl;myV.insert(myV.end(),value); / 數(shù)組中沒(méi)有隨機(jī)數(shù) ,插入尾部cout<<"插入尾部的隨機(jī)數(shù)為 "<&l

8、t;value<<endl;for (it1=myV.begin();it1!=myV.end();it1+)cout<<(*it1)<<setw(6);cout<<"n"<<endl;/隨機(jī)在 vector 頭部插入一個(gè)隨機(jī)數(shù)int t=rand();/定義 t;將一個(gè)隨機(jī)數(shù)賦給 t,插入到數(shù)組·頭部 myV.insert(myV.begin(),t);cout<<"插入頭部的隨機(jī)數(shù)為 " <<t<<endl;for (it1=myV.begin(

9、);it1!=myV.end();it1+)cout<<(*it1)<<setw(6);cout<<endl;/刪除尾部元素myV.pop_back ();for (it1=myV.begin();it1!=myV.end();it1+)cout<<(*it1)<<setw(6);cout<<endl;myV.clear();/ 清空數(shù)組if(myV.empty()cout << "It's empty!" << endl;system("PAUSE"

10、);/press any key to continue.return 0;運(yùn)行截圖:2 練習(xí)泛型算法的使用:#include<list>#include<iostream>/#inclued<algorithm>using namespace std;typedef list<int> lin;int value=1,6,7,8,9;/ 定義一個(gè)數(shù)組 value 并賦值void print(lin &l)int i;lin:iterator lit;/ 定義一個(gè)迭代器for(lit=l.begin();lit!=l.end();lit+

11、)cout<<(*lit)<<" "/ 依次打印 list 中的元素cout<<endl;bool sortsp(int v1,int v2)/定義一個(gè)升序排序算法return v1>v2;int main()lin lin2;lin2.push_front(3); / 單獨(dú)逐個(gè)插入幾個(gè)數(shù)lin2.push_front(4);lin2.insert(lin2.begin(),value,value+5);cout<<"lin2 內(nèi)的元素為: "print(lin2);lin2.sort();/ 對(duì)鏈表

12、 l1 進(jìn)行從小到大排序cout<<"排序后的 lin2: "print(lin2);lin2.push_front(10);/在 list 頭部插入 10cout<<"在 list 頭部插入 10 之后的結(jié)果: "print(lin2);lin2.remove(6);cout<<"刪除一個(gè)數(shù)后的lin1:"print(lin2);system("PAUSE");/press any key to contineu.return 0;/List 不允許對(duì)隨機(jī)數(shù)進(jìn)行操作運(yùn)行截圖:二

13、實(shí)驗(yàn)名稱(chēng)搜索算法的實(shí)驗(yàn)計(jì)算機(jī)與計(jì)算機(jī)科姓名黃星辰班級(jí)學(xué)與技術(shù)學(xué)號(hào)系院專(zhuān)業(yè)信息學(xué)院122 班實(shí)驗(yàn)日期指導(dǎo)教師徐本柱成績(jī)一、實(shí)驗(yàn)?zāi)康暮鸵?掌握寬度優(yōu)先搜索算法。2掌握深度優(yōu)先搜索算法。二、實(shí)驗(yàn)預(yù)習(xí)內(nèi)容1 寬度優(yōu)先搜索算法:又稱(chēng)廣度優(yōu)搜索。是最簡(jiǎn)單的圖的算法的原形。其屬于一種盲搜尋法,目的是系統(tǒng)地展開(kāi)并檢查圖中的所有節(jié)點(diǎn),以尋找結(jié)果。換句話說(shuō),它并不考慮結(jié)果的可能位址,徹底地搜索整張圖,直到找到結(jié)果為止。2 深度優(yōu)先搜索算法:被選擇后,被連接的它的目的是要達(dá)到被搜索結(jié)構(gòu)的葉結(jié)點(diǎn)。在一個(gè) HTML文件中, 當(dāng)一個(gè)超鏈HTML文件將執(zhí)行深度優(yōu)先搜索,即在搜索其余的超鏈走到不能再深入為止,然后返回到某一

14、個(gè)HTML文件,再繼續(xù)選擇該HTML文件中的其他超鏈。當(dāng)不再有其他超鏈可選擇時(shí),說(shuō)明搜索已經(jīng)結(jié)束。三、實(shí)驗(yàn)項(xiàng)目摘要1.將書(shū)上的走迷宮代碼上機(jī)運(yùn)行并檢驗(yàn)結(jié)果,并注意體會(huì)搜索的思想。2 .八皇后問(wèn)題:在一個(gè)國(guó)際象棋棋盤(pán)上放八個(gè)皇后,使得任何兩個(gè)皇后之間不相互攻擊,求出所有的布棋方法。上機(jī)運(yùn)行并檢驗(yàn)結(jié)果。思考:將此題推廣到 N 皇后的情況,檢驗(yàn)在 N 比較大的情況下,比方說(shuō) N=16 的時(shí)候,你的程序能否快速的求出結(jié)果,如果不能,思考有什么方法能夠優(yōu)化算法。3騎士游歷問(wèn)題:在國(guó)際棋盤(pán)上使一個(gè)騎士遍歷所有的格子一遍且僅一遍,對(duì)于任意給定的頂點(diǎn),輸出一條符合上述要求的路徑。4 倒水問(wèn)題:給定 2 個(gè)沒(méi)有

15、刻度容器,對(duì)于任意給定的容積,求出如何只用兩個(gè)瓶裝出L 升的水,如果可以,輸出步驟,如果不可以,請(qǐng)輸出No Solution。四、實(shí)驗(yàn)結(jié)果與分析(源程序及相關(guān)說(shuō)明)2,八皇后問(wèn)題:#include <stdio.h>/* 聲明常量 N 存儲(chǔ)行和列 */#define N 8#define NUM 8/* 聲明全局變量, hNN 控制盤(pán)格, HNN 控制輸出, nN 存儲(chǔ)每一步的* 縱坐標(biāo), count 用于計(jì)數(shù)。*/int hNN,nN,HNN;int count=0;/* 聲明函數(shù) void tryit(int,int) 嘗試符合條件的方法 */ void tryit(int,i

16、nt);/* 聲明函數(shù) void outputArray(intN) 輸出數(shù)組 */void outputArray(intN);main()int x=0,y=0,i,j;/* 初始化為零 */for(i=0;i<=N-1;i+)for(j=0;j<=N-1;j+)hij=0;tryit(x,y);printf("/ 其他的布局略 n");printf(" 共有 %d 種布局 .n",92);return(0);/* 定義函數(shù) void tryit(int,int) 嘗試符合條件的方法 */ void tryit(int x,int y)i

17、nt i,j;if(count<=NUM)/* 重復(fù)時(shí)跳出遞歸 */if(H00=1&&H14=1&&H27=1&&H35=1&&H42=1&&H56 =1&&H61=1&&H73=1)&&count!=1)elseif(x>=0&&x<=N-1&&y>=0&&y<=N-1&&hxy=0)/* 對(duì)與皇后在同一行、列、斜線上的點(diǎn)作出處理*/for(j=0;j<=7;j+)

18、if(hxj=0)hxj=x+1;if(hjy=0)hjy=x+1;if(x+j>=0&&x+j<=N-1&&y+j>=0&&y+j<=N-1&&hx+jy+j=0)hx+jy+j=x+1;if(x+j>=0&&x+j<=N-1&&y-j>=0&&y-j<=N-1&&hx+jy-j=0)hx+jy-j=x+1;if(x-j>=0&&x-j<=N-1&&y+j>=0&

19、;&y+j<=N-1&&hx-jy+j=0)hx-jy+j=x+1;if(x-j>=0&&x-j<=N-1&&y-j>=0&&y-j<=N-1&&hx-jy-j=0)hx-jy-j=x+1;/* 對(duì)皇后處的點(diǎn)作出標(biāo)志*/hxy=-x-1;/* 完成一種走法作出處理*/if(x=7)/* 轉(zhuǎn)換成輸出的格式 */for(i=0;i<=N-1;i+)for(j=0;j<=N-1;j+)if(hij<0)Hij=1;elseHij=0;count=count+1;/*

20、 輸出前幾種情況 */if(count<=NUM)printf("- 布局 %d-n",count);outputArray(H);/* 對(duì)下一種走法,清楚前一次的影響*/for(i=0;i<=N-1;i+)for(j=0;j<=N-1;j+)if(hij=x|hij=-x|hij=-x-1)hij=0;/* 遞歸,嘗試另一種方法 */tryit(x-1,nx-1+1);/* 未走完一次,繼續(xù)下一行*/elsenx=y;tryit(x+1,0);else/* 此路不通時(shí),返回上一行,嘗試下一種方法*/if(y>7)/* 清楚前一次影響 */for(i

21、=0;i<=N-1;i+)for(j=0;j<=N-1;j+)if(hij=x|hij=-x)hij=0;/* 分情況遞歸 */if(x-1>=0)tryit(x-1,nx-1+1);elsetryit(0,0);/* 嘗試下一格 */elsetryit(x,y+1);/* 定義函數(shù) void outputArray(intN) 輸出數(shù)組 */void outputArray(int hN)int i,j;for(i=0;i<=N-1;i+)for(j=0;j<=N-1;j+)printf("%d ",hij);printf("n&q

22、uot;);運(yùn)行截圖:3. 騎士游歷問(wèn)題:在國(guó)際棋盤(pán)上使一個(gè)騎士遍歷所有的格子一遍且僅一遍,對(duì)于任意給定的頂點(diǎn),輸出一條符合上述要求的路徑。#include <stdio.h>int board88 = 0;int main(void) int startx, starty;int i, j;printf(" 輸入起始點(diǎn): "); scanf("%d %d", &startx, &starty); if(travel(startx, starty) printf(" 游歷完成! n");else print

23、f(" 游歷失?。?n");for(i = 0; i < 8; i+) for(j = 0; j < 8; j+) printf("%2d ", boardij);putchar('n');return 0;int travel(int x, int y)int ktmove18 = -2, -1, 1, 2, 2, 1, -1, -2; /int ktmove28 = 1, 2, 2, 1, -1, -2, -2, -1; /int nexti8 = 0;int nextj8 = 0; /記錄出路的個(gè)數(shù)int exists8

24、 = 0;int i, j, k, m, l;int tmpi, tmpj;int count, min, tmp;i = x;j = y;boardij = 1;for(m = 2; m <= 64; m+) for(l = 0; l < 8; l+)existsl = 0;l = 0;/ 試探八個(gè)方向for(k = 0; k < 8; k+) tmpi = i + ktmove1k;對(duì)應(yīng)騎士可走的八個(gè)方向測(cè)試下一步的出路tmpj = j + ktmove2k; /如果是邊界了,不可走if(tmpi < 0 | tmpj < 0 | tmpi > 7 |

25、tmpj > 7)continue; / 如果這個(gè)方向可走,記錄下來(lái)if(boardtmpitmpj = 0) nextil = tmpi;nextjl = tmpj; /可走的方向加一個(gè)l+;count = l; / 如果可走的方向?yàn)? 個(gè),返回if(count = 0) return 0;else if(count = 1) / 只有一個(gè)可走的方向/ 所以直接是最少出路的方向min = 0;else / 找出下一個(gè)位置的出路數(shù)for(l = 0; l < count; l+) for(k = 0; k < 8; k+) tmpi = nextil + ktmove1k;t

26、mpj = nextjl + ktmove2k;if(tmpi < 0 | tmpj < 0 |tmpi > 7 | tmpj > 7) continue;if(boardtmpitmpj = 0)existsl+;tmp = exists0;min = 0; / 從可走的方向中尋找最少出路的方向for(l = 1; l < count; l+) if(existsl < tmp) tmp = existsl;min = l;/ 走最少出路的方向i = nextimin;j = nextjmin;boardij = m;return 1;運(yùn)行截圖:4.倒水問(wèn)

27、題:#include"stdio.h"int main()int ca,cb,cc,x,y;while(scanf("%d%d%d",&ca,&cb,&cc)!=EOF)if(cb=cc) printf("fill Bn");else if(ca=cc)printf("fill An");printf("pour A Bn");elsex=y=0;if(ca<cc)while(1) if(y=0)y=cb;printf("fill Bn");if

28、(y>ca-x)/如果 b 中的水大于 a 中的剩余容積,就把a(bǔ) 灌滿 /y-=ca-x;x=ca;printf("pour B An");else/如果 b 中的水小于 a 中的剩余容積,那么把b 中的水全加入 a/x+=y;y=0;printf("pour B An");if(y=cc)/如果 b 中的水已經(jīng)和 cc 相等,那就結(jié)束 /break;if(ca=x)/如果 a 中的水滿了,就把a(bǔ) 倒空 /x=0;printf("empty An");elsewhile(1)if(x=0)x=ca;printf("fi

29、ll An");if(x>cb-y)/如果 a 中的水大于 b 中的剩余容積,就把b 灌滿 /x-=cb-y;y=cb;printf("pour A Bn");else/如果 a 中的水小于 b 中的剩余容積,那么把a(bǔ) 中的水全加入 b/y+=x;x=0;printf("pour A Bn");if(y=cc)/如果 b 中的水已經(jīng)和 cc 相等,那就結(jié)束 /break;if(y=cb)/如果 b 中的水滿了,就把b 倒空 /y=0;printf("empty Bn");printf("successn&qu

30、ot;);return 0;運(yùn)行截圖:三實(shí)驗(yàn)名稱(chēng)計(jì)算幾何算法的實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)科姓名黃星辰班級(jí)學(xué)與技術(shù)學(xué)號(hào)系院專(zhuān)業(yè)信息學(xué)院122 班實(shí)驗(yàn)日期指導(dǎo)教師徐本柱成績(jī)一、實(shí)驗(yàn)?zāi)康暮鸵?理解線段的性質(zhì)、叉積和有向面積。2掌握尋找凸包的算法。3綜合運(yùn)用計(jì)算幾何和搜索中的知識(shí)求解有關(guān)問(wèn)題。二、實(shí)驗(yàn)預(yù)習(xí)內(nèi)容凸包:是一組點(diǎn)集中的子集,這一子集形成的凸多邊形可以將點(diǎn)集中所有的點(diǎn)都圍住,并且這一凸邊形的面積是最小的。一種尋找凸包的算法:打包法首先,我們找出點(diǎn)集中最下方的點(diǎn),如果這樣的點(diǎn)不止一個(gè),就選用最左邊的點(diǎn)(如P0)。顯然,這個(gè)點(diǎn)(P0)是凸包子集中的一個(gè)點(diǎn)??梢栽O(shè)想在P0處拴了一根皮筋的一端,另一端放在和

31、P0成水平位置的右側(cè)?,F(xiàn)在,將皮筋,沿逆時(shí)針?lè)较蜣D(zhuǎn)動(dòng),首先會(huì)碰到 P1,這樣就找到了另一個(gè)凸包子集中的點(diǎn)。以 P1 為中心,做和們將碰到 P3,又一個(gè)凸包的點(diǎn)。我們可以一直這樣做下去,直到再一次遇到P0一樣的事,會(huì)發(fā)現(xiàn),我P0,凸包就被找出來(lái)了。具體而言,在第一次找到P0點(diǎn)之后,以P0為每個(gè)矢量的起點(diǎn),其它的點(diǎn)為矢量的終點(diǎn),來(lái)比較任意兩個(gè)矢量的轉(zhuǎn)角,就可以對(duì)余下的點(diǎn)進(jìn)行按極角排序三、實(shí)驗(yàn)項(xiàng)目摘要1 將講義第三章第三節(jié)中的凸包代碼上機(jī)運(yùn)行并檢驗(yàn)結(jié)果。2完成講義第三章的課后習(xí)題,上機(jī)運(yùn)行并檢驗(yàn)結(jié)果。3思考:判線段相交時(shí),如果有個(gè)線段的端點(diǎn)在另一條線段上,注意可能與另一條線段上的端點(diǎn)重合,思考這樣的

32、情況。4房間最短路問(wèn)題:給頂一個(gè)內(nèi)含阻礙墻的房間,求解出一條從起點(diǎn)到終點(diǎn)的最最短路徑。房間的邊界固定在 x=0,x=10,y=0 和 y=10 。起點(diǎn)和重點(diǎn)固定在 (0,5) 和(10,5) 。房間里還有墻,每個(gè)墻有兩個(gè)門(mén)。輸入給定的墻的個(gè)數(shù),每個(gè)墻的 x 位置和兩個(gè)門(mén)的輸出最短路的長(zhǎng)度0到18個(gè)y 坐標(biāo)區(qū)間,四、實(shí)驗(yàn)結(jié)果與分析(源程序及相關(guān)說(shuō)明)3.思考:用跨立方法,跨立的含義是:如果一條線段的一個(gè)端點(diǎn)在一條直線的一邊,另一個(gè)端點(diǎn)在這條直線的另一端,我們就說(shuō)這條線段跨立在這條直線上。線段相交滿足且只需滿足如下兩個(gè)條件就可以了:1 兩條線段相互跨立; 2 一條線段的一個(gè)端點(diǎn)在另一條線段上。如果

33、兩線段相交,則兩線段必然相互跨立對(duì)方。若p1p2 跨立 p3p4 ,則矢量( p1 p3 ) 和 ( p2 - p1 )位于矢量 ( p4 p3 )的兩側(cè),即( p1 p3) × ( p4- p3 ) * ( p2 p3 ) × ( p4 p3 ) < 0。上式可改寫(xiě)成 ( p1 p3 ) × ( p4- p3 ) * ( p4 p3 )×( p2 p3) > 0。當(dāng)( p1 p3 ) × ( p4p3 ) = 0 時(shí),說(shuō)明 ( p1 p3 ) 和 ( p4 p3 )共線,但是因?yàn)橐呀?jīng)通過(guò)快速排斥試驗(yàn), 所以 p1 一定在線段 p3

34、p4 上;同理,( p4p3 ) × (p2 p3 ) =0 說(shuō)明 p2 一定在 p3p4上。所以判斷 p1p2 跨立 Q1Q2 的依據(jù)是:( p1 p3 ) × ( p4 p3 ) * ( p4 p3 ) × ( p2p3 ) >= 0。同理判斷 Q1Q2 跨立P1P2 的依據(jù)是: ( p3 - p1 ) × ( p2 - p1 ) * ( p2 - p1 )× ( p4 - p1 ) >= 0 。代碼中函數(shù)bool segment_intersect()用于判斷 p1、p2 構(gòu)成的線段和可以看出共五種情況兩線段是相交的,反之就輸

35、出“p3、p4 構(gòu)成的線段是否相交。The two are Not intersected!”4.房間最短路問(wèn)題:#include<iostream>#include<utility>#include<vector>innclude<algorithm>using namespace std;typedef pair<double,double> POINT;/線段double direction(POINT p,POINT p1,POINT p2)POINT v1,v2;v1.first=p2.first-p1.first;v1.s

36、econd=p2.second-p1.first;v2.first=p1.first-p.first;return v1.first*v2.second-v1.second*v2.second;bool on_segment(POINT p,POINT p1,POINT p2)double min_x=p1.first<p2.first?p1.first:p2.first;max_x=p1.first>p2.first?p1.first:p2.first;double min_y=p1.second<p2.second?p1.second:p2.second; double max_y=p1.second>p2.second?p1.second:p2.second; if(p.first>=min_x&&p.first<max_x&&p.second>= min_y&&p.second<=max_y)return true;elsereturn false;POINT startPoint;bool so

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論