計算多邊形面積_第1頁
計算多邊形面積_第2頁
計算多邊形面積_第3頁
計算多邊形面積_第4頁
計算多邊形面積_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算多邊形面積實驗報告一實驗內(nèi)容; 2二實驗目的; 2三實驗要求; 3四算法分析; 4五源程序及注釋; 61,主函數(shù) . 62,判斷函數(shù) . 83,計算多邊形面積函數(shù) 114,計算三角形面積函數(shù) 13六流程圖; 14七結(jié)果分析; 15八改進建議; 18九實驗分工。 18計算多邊形面積實驗報告王丹陽小組一實驗內(nèi)容;一名中學生,對數(shù)學研究很感興趣,或許,他思考的問題對專家來說太容易,但作為一名業(yè)余愛好者,特別是一位10歲的孩子,他的確很棒。在數(shù)學問題上,他思路敏捷,對碰到的問題都能以數(shù)學的方式輕松解決。一天,他看到桌子上他的4歲妹妹畫的一些線條,想:“這個多 邊形好像很規(guī)則,我剛剛學過怎樣計算三角

2、形、矩形和圓的面 積,我肯定能計算這個圖形的面積?!彼J真的標注各多邊形定點坐標,然后很快算出其面積是0.75。當然,他不滿足于計算如此簡單的問題, 他想:“如果多邊形是 隨機的,我如何計算它的面積呢?”請設(shè)計程序解決此問題。-實驗目的;( 1)掌握 c 語言的基本編程技能,模塊化編程思想,并初步學會在 實際背景下靈活運用。2)設(shè)計程序算出任意給定的空間站的需要維護的面的總數(shù)。三實驗要求;輸入:包含多個圖形。每個圖形第一行是一個整數(shù) n( 0=n=1000), 表示圖形的定點數(shù)接下來 n 行,每行是一對實數(shù),表示定點( xi 和 yi 坐標)。坐 標是有順序的,表示從圖形的第一個頂點到第二個頂

3、點,從第 二個頂點到第三個頂點,直到第 n 個頂點。n= 0表示輸入結(jié)束。輸出: 對每個圖形,輸出圖形編號,一個冒號,圖形的面積或者字符 串“ Impossible ”。如果圖形是多邊形, 計算其面積 (精確到兩位小數(shù))。根據(jù)輸入 的頂點序列,如果不能形成多邊形(即一條線與另一條不相鄰 的線相交),輸出“ Impossible ”,表示此圖形不是多邊形。如 果給定的頂點數(shù)不足以形成多邊形,也輸出 “Impossible ”。 每個測試例之間有一個空行。輸入:50.5 0.51 11 040 00 11 01 10輸出:Figure 1: 0.75Figure 2: Impossible四算法分

4、析;根據(jù)所給條件,應該把多邊形面積分解成若干個三角形的面積來 計算,然后逐個相加便可得到多邊形的面積。在此之前,必須判斷輸 入得點能否圍成封閉多邊形。判斷是否能圍城封閉多邊形就是判斷任意兩條線段是否相交。對 于不與 x 軸相交的兩條線段, 可采用數(shù)學方法分別計算直線方程, 然 后計算交點坐標, 在判斷交點是否位于相關(guān)直線四個點之間, 即兩條 線段是否相交。相關(guān)公式a1=(d1.y-d2.y)/(d1.x-d2.x);a2=(d3.y-d4.y)/(d3.x-d4.x);b1=d1.y-a1*d1.x;b2=d3.y-a2*d3.x;m=(b2-b1)/(a1-a2);n=a1*m+b1;(直線

5、 1:y=a1*x+b1 直線 2:y=a2*x+b2 交點( m,n) ) 當 a1=a2 時,兩直線平行,自然不存在相交的問題。 當不滿足沒有直線與 x 軸垂直時, 只需對上述公式簡單修改, 便可 判斷兩線段是否相交。當所給圖形中存在相交直線時 , 即可返回不能組成封閉圖形。 當不 存在相交直線時,即可采用分割法計算圖形的面積。在分割的過程中,應該注意分割線也不能與圖形中固有的線和其 他分割線相交。如果出現(xiàn)相交的情況,應該立即停止分割,并把尚未 分割的部分看成另一個多邊形, 調(diào)用計算函數(shù)本身進行計算。 這仍是 一個遞歸調(diào)用的過程。計算三角形面積時, 可直接調(diào)用相關(guān)庫函數(shù)簡化程序, 由三點坐

6、 標計算三角形面積的公式如下:a=sqrt(pow(d1.x-d2.x,2)+pow(d1.y-d2.y,2);b=sqrt(pow(d1.x-d3.x,2)+pow(d1.y-d3.y,2);c=sqrt(pow(d2.x-d3.x,2)+pow(d2.y-d3.y,2);cos=(pow(a,2)+pow(b,2)-pow(c,2)/(2*a*b);s=0.5*a*b*sqrt(1-pow(cos,2);s 即為三角形的面積綜合以上算法 , 為簡化函數(shù)的參數(shù) , 本程序采用結(jié)構(gòu)體數(shù)組作為數(shù)據(jù)類型 ,每個結(jié)構(gòu)體存儲一個點的兩個坐標。五源程序及注釋;#include stdio.h#inclu

7、de conio.h#include / 包含所需頭文件#includetypedef struct dia / 定義存儲點所需結(jié)構(gòu)體double x;double y;DIAN;1,主函數(shù)main() / 主函數(shù)DIAN dian100; / 點存儲數(shù)組int un; / 點的數(shù)量int i=0,j;double sum10 ; / 結(jié)果臨時存儲數(shù)組int panduan(DIAN d1,DIAN d2,DIAN d3,DIAN d4);/函數(shù)聲明double jisuan(int n,DIAN dian);double sanjiao(DIAN d1,DIAN d2,DIAN d3);pr

8、intf(ttt 歡迎使用多邊形面積計算系統(tǒng) n); / 用戶交互 界面printf(H*n);for(j=0;j10;j+) / 主函數(shù)大循環(huán),用于同時 測試多個各測 試例printf( 請輸入第 %d 個圖形所包含的點的個數(shù) _,j+1); / 數(shù) 據(jù)輸入scanf(%d,&un);if(un=0)break;for(i=0;iun;i+)printf(n 請輸入第 %d 個點 ,i+1);scanf(%lf%lf,&diani.x,&diani.y);sumj=jisuan(un,dian);/ 計算多邊形面積,并臨時存儲 for(i=0;ij;i+) if(sumi=0) printf

9、( 第 %d 個圖形不能圍城封閉面積 n,i+1); / 輸出結(jié)果 elseprintf( 第 %d 個圖形的面積為 %.2lf 。 n,i+1,sumi) ; return 0;2,判斷函數(shù)int panduan(DIAN d1,DIAN d2,DIAN d3,DIAN d4)/ 判斷能否組成多 邊形函數(shù)double a1,a2,b1,b2,m,n;if(d1.x!=d2.x)|(d1.y!=d2.y)&(d1.x!=d3.x)|(d1.y!=d3.y )&(d1.x!=d4.x)|(d1.y!=d4.y)&(d3.x!=d2.x)|(d3.y!=d2.y)&(d4.x!=d2.x)|(d4

10、.y!=d2.y)&(d4.x!=d3.x)|(d4.y!=d3 .y)/ 判斷是否有重合的點if(d1.x-d2.x)!=0)&(d3.x-d4.x)!=0) / 第一類:兩直線 均不與 x 軸垂直a1=(d1.y-d2.y)/(d1.x-d2.x);a2=(d3.y-d4.y)/(d3.x-d4.x);b1=d1.y-a1*d1.x; / 求兩直線方程b2=d3.y-a2*d3.x;if(a1=a2)return 1;/判斷兩直線是否平行else m=(b2-b1)/(a1-a2);/ 求兩直線交點 n=a1*m+b1;if(m=d2.x)|(m=d1.x)&(m=d2.x)&(n=d2.

11、y)|(n=d1.y)&(n=d2.y)&(m=d4.x)|(m=d3.x)&(m=d4.x)&(n=d4.y)| |(n=d3.y)&(n=d4.y)return 0; / 判斷兩直線是否相交else return 1;第二類:if(d1.x-d2.x)=0)&(d3.x-d4.x)=0) return 1; / 兩直線均與 x 軸垂直第三類:只有一條直線if(d1.x-d2.x)=0)&(d3.x-d4.x)!=0)/ 與 x 軸垂直/ 求直線方a2=(d3.y-d4.y)/(d3.x-d4.x);b2=d3.y-a2*d3.x;m=d1.x;/ 求兩直線交點 n=a2*m+b2;if(m

12、=d2.x)|(m=d1.x)&(m=d2.x)&(n=d2.y)|(n=d1.y)&(n=d2.y)&(m=d4.x)|(m=d3.x)&(m=d4.x)&(n=d4.y)|(n=d3.y)&(n=d4.y)return 0;/判斷兩直線是否相交else return 1;if(d3.x-d4.x)=0)&(d1.x-d2.x)!=0)/第四類:只有一條直線與 x 軸垂直 a1=(d1.y-d2.y)/(d1.x-d2.x); / 求直線方程 b1=d1.y-a1*d1.x;m=d3.x;n=a1*m+b1;/ 求兩直線交點if(m=d2.x)|(m=d1.x)&(m=d2.x)&(n=d2

13、.y)|(n=d1.y)&(n=d2.y)&(m=d4.x)|(m=d3.x)&(m=d4.x)&(n=d4.y)| |(n=d3.y)&(n=d4.y)return 0;/判斷兩直線是否相交else return 1;else return 1;3,計算多邊形面積函數(shù)double jisuan(int un,DIAN dian)/計算函數(shù),計算多邊形的面積int i,j,key=1,key2=1;double s=0;double sanjiao(DIAN d1,DIAN d2,DIAN d3);/函數(shù)聲明if(un=2)return 0;for(i=0;iun-1;i+)調(diào)用for(j=0

14、;jun-1;j+)key=panduan(diani,diani+1,dianj,dianj+1);/判斷函數(shù),判斷能否圍成封閉多邊形if(key=0)return 0;for(j=1;jun-2;j+)key=panduan(dian0,dianun-1,dianj,dianj+1);/ 判 斷能否圍成多邊形if(key=0)return 0;for(i=0;iun-2;i+)key2=1;for(j=0;jun-2;j+)if(panduan(dian0,diani+1,dianj,dianj+1)=0)/ 判斷分 割線是否與其他線相交key2=0;break;if(key2=1)s=s

15、+sanjiao(dian0,diani+1,diani+2);/ 分別計算分割后三 角形的面積并累加else if(key2=0)s=s+jisuan(un-i-1,&(diani+1);/ 若分割線與其他線相交,遞 歸調(diào)用計算函數(shù)計算為分割部分的面積goto www;www:if(key2=0) / 最后加上剩余部分的面積 s=s+sanjiao(dian0,diani+1,dianun-1);return s;4,計算三角形面積函數(shù)double sanjiao(DIAN d1,DIAN d2,DIAN d3)/計算三角形面積函數(shù)double s,a,b,c,cos;a=sqrt(pow(

16、d1.x-d2.x,2)+pow(d1.y-d2.y,2);b=sqrt(pow(d1.x-d3.x,2)+pow(d1.y-d3.y,2);/分別計算三邊長c=sqrt(pow(d2.x-d3.x,2)+pow(d2.y-d3.y,2);cos=(pow(a,2)+pow(b,2)-pow(c,2)/(2*a*b);/計算兩邊的夾角的余弦s=0.5*a*b*sqrt(1-pow(cos,2);/ 計算三角形的面積return s;六流程圖;=七結(jié)果分析;經(jīng)過若干組數(shù)據(jù)的經(jīng)驗,上述程序完全能實現(xiàn)指定的功能。能夠 準確識別各種類型的多邊形并計算面積,經(jīng)過較為簡單的數(shù)據(jù)與老師給定的數(shù)據(jù)的驗證,該程

17、序運行結(jié)果 正確。驗證結(jié)果如圖所示: 1洛語深程設(shè)計侈邊形直唄 DebuglLexer請輸入第1個圖形所包含的點的個數(shù)一4請輸入第1I0請輸入第2個點01請輸入第3個點10點和 的面 _1包封 所城 一形圍 點圖能 不 4 2形 心嗯 3刖d刖1 ir請第歡迎使用多邊形面積計算系統(tǒng)請輸入第1個圖形所包含的點的個數(shù)一5請輸入第1個點00請輸入第2個點_2 0請輸入第3個點22|青輸入第4個點11HJ小O 鬻 2XU 0T -1 點圖面 的 5 2形 君驀圖 睜 厶Sd刖1 請請第r H七語課程設(shè)計多邊形面枳Debugll.exe,歡迎使用多邊形面積計算系統(tǒng)請輸人第1個點0 0諳輸人第2個點0 1

18、請輸人第3個點 0.5 0.5請輸人第4個點 1 1請攪人第5個點 1 0瑋驗人第2丄圖羽朋包含的點的個數(shù)0第1彳圖形的面粗為0-75 oPress any key to continue礙的個數(shù)continue0請輸入第5個點2 4請輸人第4個點5 9請輸入第3個點9 3請輸入第2個點_7 9請輸入第1個點0 5請輸入第1個圖形所包含的點的個數(shù)6I:c語課程設(shè)計謬邊形面積Debugll.gIo 點圖能t 不ey 62形k 幕君圖ny AAA s 11es 請請第prQB C:Windowssystem32cmd.exe歡迎使用多邊形面積計算糸統(tǒng)請輸入第1個圖形所包含的點的個數(shù)9請輸入第1個點2 5請輸入第2個點9 4請輸入第3個點 0 5請輸入第4個點2 6請輸入第5個點8 4請輸入第6個點7 4請輸入

溫馨提示

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

評論

0/150

提交評論