91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Canvas文本填充線性漸變的案例

發布時間:2021-03-29 14:00:47 來源:億速云 閱讀:169 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關使用Canvas文本填充線性漸變的案例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

前言

在 Canvas 中對文本填充水平或垂直的線性漸變可以輕易實現,而帶角度的漸變就復雜很多;就好像下面這樣,假設文本矩形寬為 W, 高為 H, 左上角坐標為 X, Y

使用Canvas文本填充線性漸變的案例

猜想與答案

給出兩個答案:

使用Canvas文本填充線性漸變的案例

正確答案是圖二,因為這樣得出來的坐標生成的漸變最緊接文本矩形邊界,它的運動軌跡如下動圖:

使用Canvas文本填充線性漸變的案例

(圖來源:Do you really know CSS linear-gradients)

漸變起點與終點坐標的計算

所以,漸變的起點與終點坐標該怎么計算呢?答:

  1. 先求得起點與終點的長度(距離)。

  2. 根據長度與文本矩形的中心點坐標分別計算出起點與終點坐標。

線性漸變長度的計算 W3C 給出了一個公式(A 表示角度):

gradientLineLength = abs(W * sin(A)) + abs(H * cos(A))

不過,該公式主要應用于 CSS 的線性漸變設置,即以 12 點鐘方向為 0°,順時針旋轉。

而我們需要的是以 3 點鐘方向為 0°,逆時針旋轉,即公式為:

gradientLineLength = abs(W * cos(A)) + abs(H * sin(A))

// 半長:
halfGradientLineLength = (abs(W * cos(A)) + abs(H * sin(A))) / 2

那么這個公式是怎么來的呢?以下是筆者的求解:

使用Canvas文本填充線性漸變的案例

由圖可得以下方程組:

使用Canvas文本填充線性漸變的案例

因此可推導出:

使用Canvas文本填充線性漸變的案例

化簡后為:

使用Canvas文本填充線性漸變的案例

所以 c1 + c2 為:

使用Canvas文本填充線性漸變的案例

由三角函數平方公式知:cos(A) * cos(A) = 1 - sin(A) * sin(A), 代入 c1 + c2

使用Canvas文本填充線性漸變的案例

第一步化簡后:

使用Canvas文本填充線性漸變的案例

最后的結果就是:

使用Canvas文本填充線性漸變的案例

因為 sin, cos 在函數周期內存在負值(見下面角度對應的三角函數周期圖),所以線性漸變的長度需要取絕對值。

至此,我們知道了線性漸變長度,文本矩形的中心點坐標很好算,即:

centerX = X + W / 2
centerY = Y + H / 2

所以,起點與終點的坐標分別為:

startX = centerX - cos(A) * halfGradientLineLength
startY = centerY + sin(A) * halfGradientLineLength

endX = centerX + cos(A) * halfGradientLineLength
endY = centerY - sin(A) * halfGradientLineLength

看看最終效果

使用Canvas文本填充線性漸變的案例

經驗注釋

進行三角函數計算時,應盡量避免先用 tan, 因為 tan 在其周期內存在無窮值,需要做特定的條件判斷,而 sin, cos 沒有此類問題,代碼書寫更為簡潔清晰并且不會因疏忽產生錯誤,見下面三角函數與角度的對應關系周期圖。

使用Canvas文本填充線性漸變的案例

關于“使用Canvas文本填充線性漸變的案例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

股票| 马龙县| 禄劝| 永修县| 樟树市| 玛沁县| 林口县| 鄯善县| 衡东县| 绍兴县| 昌都县| 南充市| 新宁县| 公安县| 张家港市| 武邑县| 拜城县| 连山| 延长县| 仲巴县| SHOW| 稻城县| 阳新县| 闸北区| 育儿| 揭西县| 通榆县| 扎囊县| 河曲县| 长顺县| 浦城县| 吉首市| 满洲里市| 瑞丽市| 柏乡县| 应城市| 泗洪县| 滁州市| 社旗县| 藁城市| 襄垣县|