c語言課程設計報告-- 簡單圖形處理系統_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  C語言課程設計報告</b></p><p>  課程名稱: 計算機綜合課程設計 </p><p>  學 院: 土木工程學院 </p><p>  設計題目: 簡單圖形處理系統 </p><p> 

2、 2013年 9月 11日</p><p><b>  目錄</b></p><p>  1、課程設計目的···············3</p><p>  2、課程設計題目描述和要求·

3、;·········3</p><p>  3、模塊設計·················3</p><p>  4、課程設計報告內

4、容·············4</p><p>  5、調試及測試················11</p>

5、<p>  6、運行結果················12</p><p>  7、設計總結············

6、83;····14</p><p>  8、參考文獻·················15</p><p><b>  1、課程設計目的</b></p&g

7、t;<p>  開拓思維,檢查和鞏固所學的知識,為以后的學習和編程打下基礎。</p><p>  2、課程設計題目描述和要求</p><p><b>  2、1課程題目</b></p><p><b>  簡單圖形處理系統</b></p><p><b>  2、2課程要求&

8、lt;/b></p><p>  設某個圖形處理程序只考慮點、直線、圓三種基本圖形。</p><p>  對于點,給出點的橫縱坐標;</p><p>  對于直線,給出直線方程ax+by+c=0的三個系數a,b,c;</p><p>  對于圓,給出圓心坐標和半徑。</p><p>  要求程序可以輸入和輸出圖形

9、元素,求兩點距離,求兩直線交點,已知點和半徑形成圓,已知兩點形成直線</p><p><b>  3、模塊設計</b></p><p><b>  3、1模塊分析</b></p><p>  根據題目要求可以將題目中的每一個要求與一個函數對應下來,這樣算下來大概需要</p><p><b>

10、;  畫點函數</b></p><p><b>  根據兩點畫直線函數</b></p><p><b>  根據方程畫直線函數</b></p><p><b>  畫圓函數</b></p><p><b>  求兩點距離函數</b></p

11、><p><b>  求兩直線交點函數</b></p><p>  編程過程中可能需要一些其他的輔助函數,比如:畫坐標系函數,坐標轉換函數等;為幫大家選擇不同的函數,可在開頭設計一個目錄幫助選擇。</p><p><b>  3、2模塊設計</b></p><p>  根據模塊分析,以及編程方便起見,將

12、程序大致分為以下幾個模塊:</p><p>  1、目錄模塊:運用printf函數輸出目錄,并和switch架構搭配,幫助用者選擇合適的函數解決問題。</p><p>  2、圖形處理模塊:主要進行圖形的處理和輸出,包括畫點函數,畫坐標系函數,畫直線函數,畫圓函數。</p><p>  3、計算處理模塊:用于解決需要計算才能得到結果的部分,包括求兩個直線的交點函數,

13、求兩個點之間的距離函數,以及坐標轉換函數。</p><p><b>  大致流程圖為:</b></p><p>  4、課程設計報告內容</p><p>  ///////////////////////////////</p><p><b>  //頭文件包含</b></p>&l

14、t;p>  //////////////////////////////</p><p>  #include<stdio.h></p><p>  #include<graphics.h></p><p>  #include<conio.h></p><p>  #include<math.

15、h></p><p>  //////////////////////////////</p><p><b>  //函數聲明</b></p><p>  //////////////////////////////</p><p>  void line_1();

16、 //根據兩點畫直線</p><p>  void line_2(); //根據方程畫直線</p><p>  void dot(); //根據坐標畫點</p><

17、;p>  void yuan(); //根據半徑和圓心畫圓</p><p>  void lon(); //求兩點間的距離</p><p>  void dt();

18、 //根據兩條直線求交點</p><p>  void cad(); //畫坐標系</p><p>  void trans(double *x,double *y); //坐標轉換</p>

19、<p>  //////////////////////////////</p><p><b>  //定義整函數</b></p><p>  //////////////////////////////</p><p>  int main()</p><p><b>  {</b>&

20、lt;/p><p><b>  for(;;)</b></p><p><b>  {</b></p><p>  /*****************************目錄*********************************/</p><p><b>  int a;&l

21、t;/b></p><p>  printf(" 簡單圖形處理系統 \n");</p><p>  printf("由于精度問題,請盡量取較大的值,坐標系范圍x(-320—320),y(-320—320)\n\n\n");</p><p>

22、  printf("1·······························輸出點\n");</

23、p><p>  printf("2···························根據兩點輸出直線\n");</p&g

24、t;<p>  printf("3···························根據方程輸出直線\n");</p>

25、<p>  printf("4································輸出

26、圓\n");</p><p>  printf("5·························根據兩點計算兩點距離\n");&l

27、t;/p><p>  printf("6··························根據兩條直線求交點\n");</p>

28、<p>  printf("0·······························退出程序\n&

29、quot;);</p><p>  printf("請輸入選擇:");</p><p>  scanf("%d",&a);</p><p><b>  switch(a)</b></p><p><b>  {</b></p><p

30、>  case 1:dot();break;</p><p>  case 2:line_1();break;</p><p>  case 3:line_2();break;</p><p>  case 4:yuan();break;</p><p>  case 5:lon();break;</p><p>

31、;  case 6:dt();break;</p><p>  case 0:exit(0);</p><p>  default:printf("輸入錯誤,請重新輸入\n");break;</p><p><b>  }</b></p><p><b>  }</b></

32、p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  /********************************函數定義*************************************/</p><p>  void line_

33、1() //兩點畫直線函數</p><p><b>  {</b></p><p>  double a[4];</p><p>  printf("請輸入兩點坐標:(如:23,23 23,23)\n");</p><p&

34、gt;  scanf("%lf,%lf %lf,%lf",&a[0],&a[1],&a[2],&a[3]);</p><p>  /******************轉換坐標*************************/</p><p>  trans(&a[0],&a[1]);</p><p&

35、gt;  trans(&a[2],&a[3]);</p><p>  /*************按比例延伸坐標**********************/</p><p>  for(int i=0;a[2]>0&&a[3]>0&&a[2]<640&&a[3]<640;i++)</p>

36、<p><b>  {</b></p><p>  a[2]=a[2]+i*(a[2]-a[0]);</p><p>  a[3]=a[3]+i*(a[3]-a[1]);</p><p><b>  }</b></p><p>  for(i=0;a[0]>0&&a

37、[1]>0&&a[0]<640&&a[1]<640;i++)</p><p><b>  {</b></p><p>  a[0]=a[0]+i*(a[0]-a[2]);</p><p>  a[1]=a[1]+i*(a[1]-a[3]);</p><p><b&g

38、t;  }</b></p><p>  /****************畫圖******************************/</p><p><b>  cad();</b></p><p><b>  //設置線的顏色</b></p><p>  setlinecolo

39、r(YELLOW);</p><p><b>  //畫線</b></p><p>  line((int)a[0],(int)a[1],(int)a[2],(int)a[3]);</p><p><b>  getch();</b></p><p>  closegraph();</p>

40、;<p><b>  }</b></p><p>  void line_2() //方程畫直線函數</p><p><b>  {</b></p><p>  double a[3],b[2];</p>&l

41、t;p>  printf("請輸入直線方程:(如:3x+4y+5=0或3x+-4y+-5=0)\n");</p><p>  scanf("%lfx+%lfy+%lf=0",&a[0],&a[1],&a[2]);</p><p>  if(a[2]!=0)</p><p><b>  {

42、</b></p><p>  b[0]=(0-a[2])/a[1];</p><p>  b[1]=(0-a[2])/a[0];</p><p>  /******************轉換坐標*************************/</p><p>  trans(&b[1],&b[0]);<

43、/p><p><b>  a[0]=320;</b></p><p><b>  a[1]=320;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {

44、</b></p><p>  a[1]=(0-a[0])/a[1];</p><p><b>  a[0]=0;</b></p><p><b>  b[0]=0;</b></p><p><b>  b[1]=1;</b></p><p>

45、  /******************轉換坐標*************************/</p><p>  trans(&a[0],&b[0]);</p><p>  trans(&b[1],&a[1]);</p><p><b>  }</b></p><p>  /**

46、***********按比例延伸坐標**********************/</p><p>  for(int i=0;b[1]>0&&a[1]>0&&b[1]<640&&a[1]<640;i++)</p><p><b>  {</b></p><p>  b[1

47、]=b[1]+i*(b[1]-a[0]);</p><p>  a[1]=a[1]+i*(a[1]-b[0]);</p><p><b>  }</b></p><p>  for(i=0;a[0]>0&&b[0]>0&&a[0]<640&&b[0]<640;i++)<

48、;/p><p><b>  {</b></p><p>  a[0]=a[0]+i*(a[0]-b[1]);</p><p>  b[0]=b[0]+i*(b[0]-a[1]);</p><p><b>  }</b></p><p>  /****************畫圖*

49、*****************************/</p><p><b>  cad();</b></p><p><b>  //設置線的顏色</b></p><p>  setlinecolor(YELLOW);</p><p><b>  //畫線</b>&l

50、t;/p><p>  line((int)a[0],(int)b[0],(int)b[1],(int)a[1]);</p><p><b>  getch();</b></p><p>  closegraph();</p><p><b>  }</b></p><p>  v

51、oid dot() //坐標畫點函數</p><p><b>  {</b></p><p>  double a[2];</p><p>  printf("請輸入點的坐標:(如:34,23)\n");</p><

52、;p>  scanf("%lf,%lf",&a[0],&a[1]);</p><p>  trans(&a[0],&a[1]);</p><p><b>  cad();</b></p><p><b>  //設置點的顏色</b></p><p

53、>  setcolor(YELLOW);</p><p><b>  //畫點</b></p><p>  putpixel((int)a[0],(int)a[1],WHITE);</p><p><b>  getch();</b></p><p>  closegraph();</p

54、><p><b>  }</b></p><p>  void yuan() //根據半徑和圓心畫圓函數</p><p><b>  {</b></p><p>  double a[3];</p>

55、<p>  printf("請輸入半徑和圓心的坐標:(如:23 23,23)\n");</p><p>  scanf("%lf %lf,%lf",&a[0],&a[1],&a[2]);</p><p>  trans(&a[1],&a[2]);</p><p><b&g

56、t;  cad();</b></p><p><b>  //設置圓的顏色</b></p><p>  setcolor(YELLOW);</p><p><b>  //畫圓</b></p><p>  circle((int)a[1],(int)a[2],(int)a[0]);<

57、;/p><p><b>  getch();</b></p><p>  closegraph();</p><p><b>  }</b></p><p>  void cad() //畫坐標系</p>

58、;<p><b>  {</b></p><p><b>  //初始化圖形界面</b></p><p>  initgraph(640,640);</p><p><b>  //設定圖形顏色</b></p><p>  setcolor(WHITE);<

59、/p><p><b>  //畫坐標線及箭頭</b></p><p>  line(0,320,640,320);</p><p>  line(320,0,320,640);</p><p>  line(640,320,635,315);</p><p>  line(640,320,635,32

60、5);</p><p>  line(320,0,325,5);</p><p>  line(320,0,315,5);</p><p><b>  //設置字體顏色</b></p><p>  settextcolor(GREEN);</p><p><b>  //設置字體格式&l

61、t;/b></p><p>  settextstyle(20, 0, _T("宋體"));</p><p>  //標注x,y和坐標范圍</p><p>  outtextxy(610,330,"320");</p><p>  outtextxy(630,295,"x");

62、</p><p>  outtextxy(330,10,"y");</p><p>  outtextxy(290,10,"320");</p><p>  outtextxy(323,325,"0");</p><p><b>  }</b></p>

63、;<p>  void lon() //兩點間的距離函數</p><p><b>  {</b></p><p>  double a[4],c;</p><p>  printf("請輸入兩點的坐標:(如:23,23 23,23

64、)\n");</p><p>  scanf("%lf,%lf %lf,%lf",&a[0],&a[1],&a[2],&a[3]);</p><p><b>  //用勾股定理計算</b></p><p>  c=fabs(a[0]-a[2])*fabs(a[0]-a[2])+fab

65、s(a[1]-a[3])*fabs(a[1]-a[3]);</p><p>  c=sqrt(c);</p><p>  printf("兩點間的距離為:%lf\n",c);</p><p><b>  }</b></p><p>  void dt()

66、 //求交點函數</p><p><b>  {</b></p><p>  double a[3],b[3],t,x,y;</p><p>  printf("請輸入一條直線方程:(如:3x+4y+5=0)\n");</p><p>  scanf(&q

67、uot;%lfx+%lfy+%lf=0",&a[0],&a[1],&a[2]);</p><p>  printf("請輸入另一條直線方程:(如:3x+4y+5=0)\n");</p><p>  scanf("%lfx+%lfy+%lf=0",&b[0],&b[1],&b[2]);</

68、p><p>  //分不同的情況討論</p><p>  if(a[0]/b[0]==a[1]/b[1]&&a[2]/b[2]!=a[1]/b[1])</p><p><b>  {</b></p><p>  printf("無交點\n");</p><p>&l

69、t;b>  }</b></p><p>  else if(a[0]/b[0]==a[1]/b[1]&&a[2]/b[2]==a[1]/b[1])</p><p><b>  {</b></p><p>  printf("有無數個交點\n");</p><p>&l

70、t;b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  t=a[0]*b[1]-b[0]*a[1];</p><p>  a[2]=(0-a[2])*b[1]-(0-b[2])*a[1];</p>

71、<p>  b[2]=a[0]*(0-b[2])-b[0]*(0-a[2]);</p><p><b>  x=a[2]/t;</b></p><p><b>  y=b[2]/t;</b></p><p>  printf("兩條直線的交點為:%lf,%lf\n",x,y);</p

72、><p><b>  }</b></p><p><b>  }</b></p><p>  void trans(double *x,double *y) //轉換坐標</p><p><b>  {</b></p>

73、<p>  *x=*x+320;</p><p>  *y=320-*y;</p><p><b>  }</b></p><p><b>  調試及測試</b></p><p><b>  5、1調試</b></p><p>  本程序在個人

74、電腦的windows 7環(huán)境下安裝的Visual C++6.0語言系統下調試,通過調試發(fā)現了一些error,有的是語法錯誤,有的是邏輯錯誤,但是經過修改,這些error都被消除,調試結果如下:</p><p>  現在程序已經可以安全運行。</p><p><b>  5、2測試</b></p><p>  通過運行程序,發(fā)現了一些被遺漏的情況

75、,如求兩條直線的交點的時候沒有考慮到平行和重合的情況,但是經過改正,已經將被遺漏的情況添加在了里面。</p><p><b>  運行結果</b></p><p><b>  6、1目錄</b></p><p><b>  6、2輸出點</b></p><p><b>

76、;  6、2輸出圓</b></p><p><b>  6、3輸出直線</b></p><p><b>  6、4求交點</b></p><p><b>  設計總結</b></p><p><b>  7、1心得體會</b></p>

77、;<p>  通過這次的程序設計,我深切意識到目前我們所學的有關C語言的知識是多么的少,而且由于學完C語言之后很少應用,以至于遺忘了很多已經學過的東西,比如文件處理函數等。在網上查閱資料的時候發(fā)現一些人用已經學過的東西也能編寫一些很高級的程序。由此認識到學以致用非常重要,在接下來的時間里,我一定會好好利用圖書館及網絡資源,擴充自己的知識面。與此同時會花更多的時間與大家交流,來使彼此成長的更快。</p><

78、;p><b>  7、2編寫所遇問題</b></p><p>  1、Visual C++ 6.0運行平臺沒有圖形處理函數</p><p>  2、系統坐標和常規(guī)坐標系不一致</p><p>  3、畫線函數只能畫出線段不能畫出直線</p><p>  4、整個圖形處理函數只能在整數單位上標點</p>

79、<p><b>  7、3問題解決方案</b></p><p>  1、在網上找到了圖形處理函數頭文件,將該文件安裝到Visual C++ 6.0上,就可以在Visual C++ 6.0運行圖形處理函數。</p><p>  2、添加一個坐標轉換函數,使得坐標系與常規(guī)坐標系一致。</p><p>  3、將線段的兩個端點的坐標按照比

80、例進行延長,使得兩個端點坐標在窗口之外,這樣視覺上就是一條直線。</p><p>  4、整個計算過程采用雙精度進行計算,在畫圖時將雙進度轉化為整型變量,這樣就可以運用圖形處理函數。</p><p><b>  參考文獻</b></p><p>  【1】譚浩強編著.C程序設計(第四版),北京,清華大學出版社,2010年</p>

溫馨提示

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

評論

0/150

提交評論