真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

WPF如何繪制光滑連續(xù)貝塞爾曲線示例代碼-創(chuàng)新互聯(lián)

1.需求

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出桃城免費(fèi)做網(wǎng)站回饋大家。

WPF本身沒有直接把點(diǎn)集合繪制成曲線的函數(shù)??梢酝ㄟ^(guò)貝塞爾曲線函數(shù)來(lái)繪制?! ?/p>

貝茲曲線由線段與節(jié)點(diǎn)組成,節(jié)點(diǎn)是可拖動(dòng)的支點(diǎn),線段像可伸縮的皮筋,我們?cè)诶L圖工具上看到的鋼筆工具就是來(lái)做這種矢量曲線的。當(dāng)然在一些比較成熟的位圖軟件中也有貝塞爾曲線工具,如PhotoShop等。

貝塞爾曲線類是:BezierSegment,三次貝塞爾曲線,通過(guò)兩個(gè)控制點(diǎn)來(lái)控制開始和結(jié)束方向。

QuadraticBezierSegment,二次貝塞爾,通過(guò)一個(gè)控制點(diǎn)來(lái)控制彎曲方向。

本文使用的是三次。

WPF如何繪制光滑連續(xù)貝塞爾曲線示例代碼 

圖片來(lái)源維基百科

2.思路

大值思路是根據(jù)當(dāng)前點(diǎn),前一個(gè)點(diǎn),后一個(gè)點(diǎn),再后一個(gè)點(diǎn)。共四個(gè)點(diǎn),來(lái)生成一條三次貝塞爾曲線。

WPF如何繪制光滑連續(xù)貝塞爾曲線示例代碼

曲線需要(開始點(diǎn),結(jié)束點(diǎn),控制點(diǎn)1,控制點(diǎn)2),圖中標(biāo)識(shí)的兩個(gè)紅色點(diǎn)即是控制點(diǎn)。

代碼主要是計(jì)算兩個(gè)紅色的控制點(diǎn)。

先計(jì)算相鄰點(diǎn)的中點(diǎn)【橙色】。

再將中點(diǎn)的連線平移到相鄰的位置【藍(lán)色點(diǎn)】,取得虛線,得到虛線的端點(diǎn)【紅色】。

紅色,即為控制點(diǎn)。

3.主要代碼

/// 
 /// 獲得貝塞爾曲線
 /// 
 /// 當(dāng)前點(diǎn)
 /// 上一個(gè)點(diǎn)
 /// 下一個(gè)點(diǎn)1
 /// 下一個(gè)點(diǎn)2
 /// 
 private BezierSegment GetBezierSegment(Point currentPt, Point lastPt, Point nextPt1, Point nextPt2)
 {
  //計(jì)算中點(diǎn)
  var lastC = GetCenterPoint(lastPt, currentPt);
  var nextC1 = GetCenterPoint(currentPt, nextPt1); //貝塞爾控制點(diǎn)
  var nextC2 = GetCenterPoint(nextPt1, nextPt2);
  //計(jì)算相鄰中點(diǎn)連線跟目的點(diǎn)的垂足
  //效果并不算太好,因?yàn)榭赡茳c(diǎn)在兩個(gè)線上或者線的延長(zhǎng)線上,計(jì)算會(huì)有誤差
  //所以就直接使用中點(diǎn)平移方法。
  //var C1 = GetFootPoint(lastC, nextC1, currentPt);
  //var C2 = GetFootPoint(nextC1, nextC2, nextPt1);
  //計(jì)算“相鄰中點(diǎn)”的中點(diǎn)
  var c1 = GetCenterPoint(lastC, nextC1);
  var c2 = GetCenterPoint(nextC1, nextC2);
  //計(jì)算【"中點(diǎn)"的中點(diǎn)】需要的點(diǎn)位移
  var controlPtOffset1 = currentPt - c1;
  var controlPtOffset2 = nextPt1 - c2;
  //移動(dòng)控制點(diǎn)
  var controlPt1 = nextC1 + controlPtOffset1;
  var controlPt2 = nextC1 + controlPtOffset2;
  //如果覺得曲線幅度太大,可以將控制點(diǎn)向當(dāng)前點(diǎn)靠近一定的系數(shù)。
  controlPt1 = controlPt1 + 0 * (currentPt - controlPt1);
  controlPt2 = controlPt2 + 0 * (nextPt1 - controlPt2);
  var bzs = new BezierSegment(controlPt1, controlPt2, nextPt1, true);
  return bzs;
 }

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前文章:WPF如何繪制光滑連續(xù)貝塞爾曲線示例代碼-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://weahome.cn/article/digphs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部