999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于.net平臺的圖形繪制系統實現的關鍵問題

2012-04-29 00:44:03武利翻
科技創新導報 2012年34期

武利翻

摘 要:繪圖系統主要是實現各種標準圖形和任意線條圖形的繪制編輯和變換,其中標準圖形包括直線,多邊形,橢圓,各種曲線等。要實現它們的繪制和各種基本變換(編輯功能),其中最關鍵的問題是曲線的多邊形與曲線的擬合。

關鍵詞:圖形繪制 曲線擬合 圖形編輯

中圖分類號:TP31 文獻標識碼:A 文章編號:1674-098X(2012)12(a)-00-02

在企業計算領域,C#將會變成用于編寫“下一代窗口服務”應用程序的主要語言。而GDI+是Windows 2000及以后版本的一個子系統,同原有的GDI(圖形設備接口)一樣,主要負責對顯示器和打印機進行管理。GDI+為我們提供了在編程時使用的應用程序接口API(Application Programming Interface),通過這些API函數,GDI+讓程序員在設計程序中不必考慮具體的顯示器或打印機,直接使用由GDI+提供的類的方法便可以調用顯示器或打印機,真正做到與設備無關。現在大家通用的繪圖軟件有Photoshop,CAD等。而大部分繪圖軟件都是用C++,VB等語言編寫,而本軟件將用C#和GDI+方面知識[1]。

本系統要求實現在顯示設備上進行繪圖操作,其中繪圖操作是用代碼實現的,而不是有一些預定義的控件或對話框來實現,其實這就是GDI+的實質[2]。GDI+是一個功能強大的工具,有許多.NET 基類都可用于在設備上繪圖。繪圖系統中要進行各種工具的選擇。選擇工具以及完成繪畫功能如畫筆,畫直線、畫矩形、畫圓橢圓,命名與擦除都是在swich語句中進行的。這里不重點介紹,重點介紹多邊形與曲線擬合。這部分實現過程比較難,這部分都用到了動態數組。

1 多邊形的實現

實現繪制任意多邊形的功能。選擇繪圖工具項中的繪制多邊形,當用戶在繪圖區域用鼠標左鍵點擊時,動態數組將記錄各個點的位置,鼠標松開時程序判斷用戶輸入點的數目,當輸入數目大于等于兩個時進行相鄰兩個點的連接,根據程序提示用戶完成時點擊鼠標右鍵。實現工程具體如下。

鼠標按下時添加動態數組元素,

points.Add(new Point(e.X,e.Y));

鼠標松開判斷并進行繪圖,算法主要用到方法如下:

g.DrawLines(new Pen(foreColor,n),pointArray);

ig.DrawLines(new Pen(foreColor,n),pointArray);

點擊鼠標右鍵時結束繪制同時釋放動態數組。

2 曲線擬合的實現

曲線擬和算法設計,是本次設計的最重要的部分,算法的主要思想如下:

要使整個曲線處處光滑,必須是所有的銜接點兩側斜率相等[3]。做法如下:首先對繪圖面上三個點即點1,點2,點3用一條光滑的二次曲線進行擬和,畫出點1到點3的一段曲線,并求出點3在本坐標系下的斜率。再在繪圖面上再點擊一個點4,并針對后三個點進行坐標變換,然后在變換的坐標系下用三次曲線進行擬和,用2,點3和點4的坐標和點3的斜率確定一條光滑的三次曲線,畫出點3到點4的一段曲線,并計算出點4的斜率。再點擊一個點,依照上面的方法繼續進行坐標變換和三次曲線進行擬和,畫出最后兩點間的一段曲線,每次都要用前次的斜率并計算新加入點的斜率。重復加入新點,畫出最后兩點間的一段曲線,直到最后一個點[4]。

擬和部分:

已知:三點坐標(X1,Y1),(X2,Y2),(X3,Y3),Y2'

用三次曲線 A X13 + B X2 + C X + D = Y 擬和,代入三點坐標和Y2' 得:

A X13 + B X12 + C X1 + D = Y1

X23 + B X22 + C X2 + D = Y2

X33 + B X32 + C X3 + D = Y3

3 A X22 +2 B X2 + C = Y2'

以A、B、C、D為變元求解此方程組,得A、B、C、D的值,從X2到X3畫出三次曲線 A X3 + B X2 + C X + D = Y,求出X3點的斜率

3 A X32 +2 B X3 + C

此部分算法主要如下:

g.DrawCurve(new Pen(foreColor,n),pointArray);

ig.DrawCurve(new Pen(foreColor,n),pointArray);

points1 = new ArrayList();

坐標變換部分:

坐標變換引入了對矩陣對象的支持,矩陣是變換的核心,在繪制圖形時,定義圖位置相當重要。GDI+中使用三種坐標系來表示位置信息:世界坐標、頁面坐標、設備坐標。

本部分所說的坐標變換是指從頁面坐標到頁面坐標的變換,即重新設置頁面坐標,而且坐標原點、X軸、Y軸都要變換。實現坐標變換的過程是:取數組的后兩個元素,即后兩個點連成一條直線且直線作為X軸,通過新加入的點向直線做垂線,并設置其交點為新的原點,垂線作為Y軸。示意圖如圖1。

圖1 坐標變換示意圖

坐標變換過程要用到平移變換和旋轉變換:平移變換,假設有一個點A,其坐標為(x,y),對A點進行平移變換(以dx,dy做為在水平和垂直方向的變化量)的結果是A點的新坐標(x1,y1)為:x1=x+dx,y1=y+dy.用到的相應的變換矩陣為:

旋轉變換,假設有一個點A,其坐標為(x,y),對A點進行旋轉(角度為a),轉換結果是,點的新坐標(x1,y1)為:

x1=x*cos(a)+y*sia(a),y1=x*sia(a)+y*cos(a).

旋轉變換對應的變換矩陣為:

坐標變換的結果都體現在矩陣變換的疊加上。

主要代碼如下:

Matrix myMatri = new Matrix();

myMatrix.Rotate(30.0f)//旋轉30度

myMatrix.Translate(1.0f,2.0f,MatrixOrder.Append);

//垂直方向上放大兩倍

…………………

myMatrix.Translate(5.0f,0.0f,MatrixOrder.Append);

//水平方向上平移5個單位

參考文獻

[1] 駱開華,李紹強.在.NET中使用X mL的安全性研究[J].科技信息,2010(17).

[2] 田原.VB.NET繪圖功能研究[J].軟件導刊,2005(22).

[3] 王雪,晉浩.NET中繪圖控件的編程技術與實現[J].電腦知識與技術(學術交流),2006(36).

[4] 王美瓊.用VB編程繪制圖形的方法和技巧[J].考試周刊,2009(49).

主站蜘蛛池模板: 在线观看视频一区二区| 男人天堂亚洲天堂| 亚洲欧洲免费视频| 五月婷婷导航| 精久久久久无码区中文字幕| 免费 国产 无码久久久| 操美女免费网站| 美女无遮挡被啪啪到高潮免费| 伊人婷婷色香五月综合缴缴情 | 国产一区二区三区夜色| 伊人91视频| 色妞www精品视频一级下载| 91在线一9|永久视频在线| 十八禁美女裸体网站| 国产99欧美精品久久精品久久| 激情综合婷婷丁香五月尤物| 国产又爽又黄无遮挡免费观看 | 亚洲人成日本在线观看| 日本手机在线视频| 亚洲AV成人一区国产精品| 欧美一级高清免费a| 亚洲人视频在线观看| 国产99视频精品免费视频7| 国产精品无码作爱| 在线免费无码视频| 日韩欧美国产另类| 天堂网亚洲系列亚洲系列| 国产人人射| 高清免费毛片| 久久精品波多野结衣| lhav亚洲精品| 凹凸国产分类在线观看| 亚洲国产一区在线观看| 国产本道久久一区二区三区| 久久99热66这里只有精品一| 99久久精品国产综合婷婷| 婷婷六月激情综合一区| 国产亚洲欧美另类一区二区| 久草中文网| 1769国产精品视频免费观看| 日韩专区欧美| 无码粉嫩虎白一线天在线观看| 亚洲专区一区二区在线观看| 伊人大杳蕉中文无码| 日韩成人免费网站| 亚洲精品视频免费| 日本不卡在线播放| 国产主播喷水| 午夜少妇精品视频小电影| 欧美一区二区三区国产精品| 特级aaaaaaaaa毛片免费视频 | 久久久久亚洲Av片无码观看| yjizz国产在线视频网| 亚洲美女操| 久久夜夜视频| 一级爱做片免费观看久久| www.国产福利| 色视频久久| 中文字幕欧美成人免费| 欧美19综合中文字幕| 欧美日韩久久综合| 国产成人无码Av在线播放无广告| 自拍偷拍一区| 亚洲国产精品美女| 国产三级毛片| 91精品专区国产盗摄| 亚洲欧美自拍中文| 中文字幕在线欧美| 亚洲色成人www在线观看| 老司机午夜精品网站在线观看| 国产精品网址你懂的| www中文字幕在线观看| 亚洲精品福利视频| 久久这里只有精品免费| 97在线视频免费观看| 曰韩人妻一区二区三区| 亚洲色精品国产一区二区三区| 色综合天天综合| 亚洲女同欧美在线| 91视频精品| 亚洲精品午夜天堂网页| 亚洲视频免|