【計算幾何畫圖器 For Pascal V1.01】

來源:互聯網
上載者:User

計算幾何難寫主要的原因就是太不直觀,而手畫圖“精度”有限,效率也不高,怎麼辦?

寫程式畫是一個不錯的想法!

於是我就找盾哥學了一下graph和crt單元的一些用法,做了這樣一個簡陋的畫圖器

為了方便使用,我把這個畫圖器做成了一個庫,要使用就只要uses draw_lib;就可以了

代碼:

unit<br /> draw_lib;<br />interface<br />procedure init(k:longint);<br />procedure putpoint(x,y:longint);<br />procedure putline(x1,y1,x2,y2:longint);<br />procedure putcircle(x,y,r:longint);<br />procedure pause;<br />implementation<br />uses<br /> crt,graph;<br />var<br /> bili:real;<br /> o,max:longint;<br />procedure pause;<br />var c:char;<br />begin<br /> c:=#0;<br /> repeat<br /> c:=readkey;<br /> until c<>#0;<br />end;<br />procedure changexy(var x,y:longint);<br />var t:longint;<br />begin<br /> if o=1 then begin x:=trunc(x*bili); y:=trunc(y*bili) end;<br /> x:=x+50; y:=550-y;<br />end;<br />procedure fill(x,y:longint);<br />var r:longint;<br />begin<br /> circle(x+1,y,2);<br /> circle(x,y+1,2);<br /> circle(x-1,y,2);<br /> circle(x,y-1,2);<br /> settextstyle(0,0,1);<br /> outtextxy(x-3,y-3,#7);<br />end;<br />procedure putpoint(x,y:longint);<br />begin<br /> changexy(x,y);<br /> fill(x,y);<br />end;<br />procedure putline(x1,y1,x2,y2:longint);<br />begin<br /> changexy(x1,y1);<br /> changexy(x2,y2);<br /> if o=1 then begin fill(x1,y1); fill(x2,y2); end;<br /> line(x1,y1,x2,y2);<br />end;<br />function istr(i:longint):string;<br />begin<br /> str(i,istr);<br />end;<br />procedure putcircle(x,y,r:longint);<br />begin<br /> changexy(x,y);<br /> setlinestyle(0,0,2);<br /> circle(x,y,trunc(r*bili));<br /> fill(x,y);<br />end;<br />function f(x:longint):longint;<br />begin<br /> x:=trunc(x/500*max);<br />end;<br />procedure init(k:longint);<br />var i:longint; t1,t2:integer;<br />begin<br /> t1:=d8bit; t2:=m800x600; max:=k;<br /> initgraph(t1,t2,'');<br /> bili:=500/k; o:=0;<br /> setlinestyle(0,0,2);<br /> line(50,550,50,50);<br /> line(50,550,550,550);<br /> line(50,50,45,55);<br /> line(50,50,55,55);<br /> line(550,550,545,545);<br /> line(550,550,545,555);<br /> putpoint(0,0); o:=1;<br /> settextstyle(0,0,2);<br /> outtextxy(36,555,'O');<br /> settextstyle(0,0,1);<br /> for i:=6 to 54 do begin<br /> line(50,i*10,53,i*10);<br /> if i mod 5=0 then outtextxy(26,i*10-2,istr(f((55-i)*10)));<br /> end;<br /> for i:=6 to 54 do begin<br /> line(i*10,550,i*10,547);<br /> if i mod 5=0 then outtextxy(i*10-7,556,istr(f((i-5)*10)));<br /> end;<br />end;<br />begin<br />end.<br /> 

本庫暫時只支援畫非負整數域內的 點、線、圓,如果要畫實數,或負數,可以考慮自己手動先轉化一下再使用

本庫調用了crt和graph單元,你的fp需要有這兩個單元這個庫才能正常使用

使用方法:

1.調用draw_lib單元

2.先調用init(k)過程,初始化座標系,k為座標最大值

3.幾個主要過程的格式

  putpoint(x,y),畫一個座標為(x,y)的點

  putline(x1,y1,x2,y2),畫一條(x1,y1) -> (x2,y2)的線段

  putcircle(x,y,r),畫一個圓心為(x,y),半徑為r的圓

  pause,暫停,按任意鍵繼續(這個功能還有點問題,但要正常使用的話還是可以的,只是要求你的程式不能直接將輸入資料流改成標準檔案輸入input,而是另外弄一個檔案類型的變數作為輸入資料流,原因應該是如果你的程式將輸入資料流重新導向到檔案,程式就不能從鍵盤輸入了)

4.上面提到的所有過程的參數都是整數

5.一個參考的將實數轉化為整數的方法,先乘一個比例係數再round一下;將負數轉化為正數的方法,加上一個比較大的數。-_-!

 

就這樣吧,祝大家使用愉快,有發現bug或好的想法請聯絡我

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.