目錄
前言?
計算圓心坐標
計算兩條直線的角平分線
計算dir1 dir2的夾角
計算圓心到直線交點的距離
計算圓心
計算從正X軸算起曲線開始、終止的角度
計算垂足與兩直線交點距離
計算垂足
?計算垂線
計算兩垂線與x軸的夾角
?編輯?計算圓弧是否按照順時針方向來繪制
?成功畫弧線
多個圓弧的應用
前言?
圓弧使用?ArcCurve 繪制,那么需要以下參數
我們拿3個點制作一個圓弧
計算圓心坐標
由 p1 - p2和p3 - p2構成兩個向量dir1 dir2? 這三個點構成的兩條線的方向,????????
計算兩條直線的角平分線
dir1 dir2 向量相加得到兩條向量的角平分線
計算dir1 dir2的夾角
通過點乘計算兩向量的余弦值,然后通過反余弦得到夾角
計算圓心到直線交點的距離
設圓弧半徑為R,設圓心到直線交點距離為L,R = L * Sin(夾角/2)? ==> L = R /?Sin(夾角/2)
計算圓心
角平分線方向知道了,兩向量交點到圓心的距離L知道了,那么圓心坐標就等于 起點+角平分線方向*L
計算從正X軸算起曲線開始、終止的角度
計算垂足與兩直線交點距離
計算垂足
垂足向量等于p2起點+各方向*垂足到兩直線交點距離
?
?計算垂線
計算兩垂線與x軸的夾角
設x軸向量為(1, 0, 0)。
這里需要注意點乘的操作是基于180度有效的,也就是余弦在180度內有效為一個周期,如果垂線的y小于0,需要一個圓周 減去 點乘所算的夾角,如下圖示意,點乘算的是黑色弧度角,但真正的垂線與x軸夾角是彩色弧度
?計算圓弧是否按照順時針方向來繪制
根據WebGL右手螺旋定則,dir1 叉乘 dir2 得到的法線向量,判斷這個向量的方向是否大于0
?成功畫弧線
多個圓弧的應用
邏輯和單個圓弧是一樣的,需要注意的是,如果多個點之間并不存在弧度,就不需要做弧度處理,可以用兩直線向量叉乘計算,如果叉乘結果是0向量(正弦值為0,兩向量相反即夾角180度)則說明兩條直線沒有夾角。
?
?