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

下載本文檔

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

文檔簡介

1、<p><b>  C語言課程設(shè)計報告</b></p><p>  課程名稱: 計算機(jī)綜合課程設(shè)計 </p><p>  學(xué) 院: 土木工程學(xué)院 </p><p>  設(shè)計題目: 簡單圖形處理系統(tǒng) </p><p> 

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

3、;·········3</p><p>  3、模塊設(shè)計·················3</p><p>  4、課程設(shè)計報告內(nèi)

4、容·············4</p><p>  5、調(diào)試及測試················11</p>

5、<p>  6、運(yùn)行結(jié)果················12</p><p>  7、設(shè)計總結(jié)············

6、83;····14</p><p>  8、參考文獻(xiàn)·················15</p><p><b>  1、課程設(shè)計目的</b></p&g

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

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

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

10、;  畫點(diǎn)函數(shù)</b></p><p><b>  根據(jù)兩點(diǎn)畫直線函數(shù)</b></p><p><b>  根據(jù)方程畫直線函數(shù)</b></p><p><b>  畫圓函數(shù)</b></p><p><b>  求兩點(diǎn)距離函數(shù)</b></p

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

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

13、求兩個點(diǎn)之間的距離函數(shù),以及坐標(biāo)轉(zhuǎn)換函數(shù)。</p><p><b>  大致流程圖為:</b></p><p>  4、課程設(shè)計報告內(nèi)容</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>  //函數(shù)聲明</b></p><p>  //////////////////////////////</p><p>  void line_1();

16、 //根據(jù)兩點(diǎn)畫直線</p><p>  void line_2(); //根據(jù)方程畫直線</p><p>  void dot(); //根據(jù)坐標(biāo)畫點(diǎn)</p><

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

18、 //根據(jù)兩條直線求交點(diǎn)</p><p>  void cad(); //畫坐標(biāo)系</p><p>  void trans(double *x,double *y); //坐標(biāo)轉(zhuǎn)換</p>

19、<p>  //////////////////////////////</p><p><b>  //定義整函數(shù)</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(" 簡單圖形處理系統(tǒng) \n");</p><p>  printf("由于精度問題,請盡量取較大的值,坐標(biāo)系范圍x(-320—320),y(-320—320)\n\n\n");</p><p>

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

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

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

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

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

27、t;/p><p>  printf("6··························根據(jù)兩條直線求交點(diǎn)\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>  /********************************函數(shù)定義*************************************/</p><p>  void line_

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

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

35、gt;  trans(&a[2],&a[3]);</p><p>  /*************按比例延伸坐標(biāo)**********************/</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>  //設(shè)置線的顏色</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() //方程畫直線函數(shù)</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>  /******************轉(zhuǎn)換坐標(biāo)*************************/</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、  /******************轉(zhuǎn)換坐標(biāo)*************************/</p><p>  trans(&a[0],&b[0]);</p><p>  trans(&b[1],&a[1]);</p><p><b>  }</b></p><p>  /**

46、***********按比例延伸坐標(biāo)**********************/</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>  //設(shè)置線的顏色</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() //坐標(biāo)畫點(diǎn)函數(shù)</p><p><b>  {</b></p><p>  double a[2];</p><p>  printf("請輸入點(diǎn)的坐標(biāo):(如: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>  //設(shè)置點(diǎn)的顏色</b></p><p

53、>  setcolor(YELLOW);</p><p><b>  //畫點(diǎn)</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() //根據(jù)半徑和圓心畫圓函數(shù)</p><p><b>  {</b></p><p>  double a[3];</p>

55、<p>  printf("請輸入半徑和圓心的坐標(biāo):(如: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>  //設(shè)置圓的顏色</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() //畫坐標(biāo)系</p>

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

59、/p><p><b>  //畫坐標(biāo)線及箭頭</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>  //設(shè)置字體顏色</b></p><p>  settextcolor(GREEN);</p><p><b>  //設(shè)置字體格式&l

61、t;/b></p><p>  settextstyle(20, 0, _T("宋體"));</p><p>  //標(biāo)注x,y和坐標(biāo)范圍</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() //兩點(diǎn)間的距離函數(shù)</p><p><b>  {</b></p><p>  double a[4],c;</p><p>  printf("請輸入兩點(diǎn)的坐標(biāo):(如: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("兩點(diǎn)間的距離為:%lf\n",c);</p><p><b>  }</b></p><p>  void dt()

66、 //求交點(diǎn)函數(shù)</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("無交點(diǎn)\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("有無數(shù)個交點(diǎn)\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("兩條直線的交點(diǎn)為:%lf,%lf\n",x,y);</p

72、><p><b>  }</b></p><p><b>  }</b></p><p>  void trans(double *x,double *y) //轉(zhuǎn)換坐標(biāo)</p><p><b>  {</b></p>

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

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

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

76、;  6、2輸出圓</b></p><p><b>  6、3輸出直線</b></p><p><b>  6、4求交點(diǎn)</b></p><p><b>  設(shè)計總結(jié)</b></p><p><b>  7、1心得體會</b></p>

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

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

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

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

溫馨提示

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

評論

0/150

提交評論