如何在程式中畫更好看的折線

2022-02-23 16:25:12 字數 1827 閱讀 3698

前言:

做的程式需要兩種線,一種是貝塞爾曲線,一種是折線,貝塞爾線比較簡單,這裡主要說折現,折現的折點不能出現的過多,否則會出現上面的情況

一般這種折現會出現兩種情況,我管著兩種情況叫做凸點,和延伸點(ps:純粹亂起),如上圖所示,左上角的是「凸點」,右下角是「節省點」,折點過多主要是因為這兩種原因造成的,我們可以對這兩種折點進行優化,達到去除折點的作用,下面是一些**片段

合 並凸點 節 省 點

private

void

combine()

else

if ( i == controlpoints.count - 1

)

else

case

brokelinepointdirect.right:

case

brokelinepointdirect.up:

case

brokelinepointdirect.down:}}

i++;

}#region 注釋

#region 凸點

/*找到有效凸點

*/if ( leftlist.count > 0 && rightlist.count > 0

)

else

}/*對稱凸點

*/else}}

}}if ( uplist.count > 0 && downlist.count > 0

)

else

}/*對稱凸點

*/else}}

}}foreach ( controlpoint controlpoint in

removecontrolpointlist )

#endregion

#region 效節省點

/*找到有效省節點

*/list

removecontrollist = new list();

for ( int j = 0; j < leftlist.count; j++)}}

for ( int j = 0; j < rightlist.count; j++)}}

foreach ( controlpoint controlpoint in

removecontrollist )

#endregion

#endregion

}

經過一番調整,效果如下

永遠不會有超過4個的折點(我們判斷是4個),去掉折點標註,效果不錯,注意上面的方法,比如給每個折點加入乙個enum,描述為現在折點的方向,才能進行優化。比如「凸點」的確認方式,就是先上 隔1個 再下 或者 先下 隔1個 再上 或者 先左 隔乙個 再右 或者先右 隔乙個 再左 ;節省點的確認方式,就是 先左 隔乙個 還是左 或者 先右 隔乙個 還是右 即可 上下不用判斷 或者 判斷上下也可以,不判斷左右

ps:可惜最後和要做的效果不符,所以推翻重做,發博文是因為博文太少了,來充數,呵呵,見笑

後續:悲催周五做了一天的工作算是白做了,週六在家加班又改制了乙個好的使用體驗的,程式設計師就是悲催啊

2023年7月28日 於鄭州 天氣:晴            晚上在家加班中。。。

如何在 JavaScript 中更好地使用陣列

本文短小精悍,我保證。在過去的數個月裡,我注意到在我審閱的 pull request 中有四個 關於陣列使用的 錯誤經常出現。同時,我自己也會犯這些錯誤,因此有了這篇文章。讓我們一起學習,以確保以後能正確地使用陣列方法!use strict const characters ironman blac...

如何在Word2003中畫箭頭

word雖說不是什麼製圖軟體,而且製圖的工具也不是很強大,但是我們經常製作文件時可能會用它畫一些簡單的圖形,比如 畫圓形 方塊 畫直線 畫箭頭等等。本次就來為大家詳解,如何利用word2003畫出各種各樣的箭頭來。word2003畫直線箭頭和斜線箭頭這個是最簡單的,一般在word畫圖工具裡面預設就可...

如何在程式中延時

方法一 使用sleep函式,如延時2秒,用sleep 2000 方法二 使用sleep函式的不利在於延時期間不能處理其他的訊息,如果時間太長,就好象宕機一樣,利用coledatetime類和coledatetimespan類實現延時就不會出現那樣的問題 coledatetime start time...