
我正在嘗試確定沿黑色路徑的藍線和紅線的角度,以使藍線和紅線的角度平分相鄰點之間的角度。為此,我嘗試了兩種不同的方法,但都以突出顯示的點失敗。
第一種方法是使用從所述線的中點開始的兩條相鄰正交線的交點。
const mP1 = { x: (p1.x p2.x) / 2, y: (p1.y p2.y) / 2 },
mP2 = { x: (p2.x p3.x) / 2, y: (p2.y p3.y) / 2 };
// Determining the perpendicular slopes -> -1/slope
const pS1 = -1 / ((p2.y - p1.y) / (p2.x - p1.x)),
pS2 = -1 / ((p3.y - p2.y) / (p3.x - p2.x));
// Determining the intersection of the slopes
const j = (pS1 * (mP1.x - mP2.x) - mP1.y mP2.y) / (pS1 - pS2);
// point of intersection
const iP = { x: p2.x j, y: p2.y j * ((pS1 pS2) / 2) };
// determining intersecting slope
const iS = (p2.y - iP.y) / (p2.x - iP.x);
第二種方法是找到相鄰三個點的中心。
// determining the distance of all points
const a1 = p1.x - p2.x,
b1 = p1.y - p2.y,
a2 = p2.x - p3.x,
b2 = p2.y - p3.y,
a3 = p3.x - p1.x,
b3 = p3.y - p1.y;
const d1 = Math.sqrt(a1 * a1 b1 * b1),
d2 = Math.sqrt(a2 * a2 b2 * b2),
d3 = Math.sqrt(a3 * a3 b3 * b3);
// point of intersection
const iP = {
x: (d1 * p1.x d2 * p2.x d3 * p3.x) / (d1 d2 d3),
y: (d1 * p1.y d2 * p2.y d3 * p3.y) / (d1 d2 d3)
};
// determining intersecting slope
const iS = -1 / (p2.y - iP.y) / (p2.x - iP.x);
我遇到的問題是在兩點之間的斜率為 0 或未定義的邊緣情況下。在這些情況下,我嘗試過的兩種方法都不能產生可行的斜坡。任何幫助將不勝感激,謝謝。
uj5u.com熱心網友回復:
有很多方法可以做到這一點
添加線法線。
只要兩條線段的長度都不為零,這將適用于任何路徑。
使用下圖作為參考。箭頭表示向量的方向。

對于路徑ABC找到通過B平分的DE線
其中點A,B,C是已知的,并以形式表示 2D 坐標{x, y}
1:歸一化向量AB和BC
vAB = {x: B.x -A.x, y: B.x -A.y}
vBC = {x: C.x -B.x, y: C.x -B.y}
lAB = 1.0 / Math.hypot(vAB.x, vAB.y)
vAB.x *= lAB
vAB.y *= lAB
lBC = 1.0 / Math.hypot(vBC.x, vBC.y)
vBC.x *= lBC
vBC.y *= lBC
2:將兩個向量旋轉 90 度以獲得線AB和BC的法線
[vAB.x, vAB.y] = [-vAB.y, vAB.x]
[vBC.x, vBC.y] = [-vBC.y, vBC.x]
3:將兩個向量相加并歸一化
vDE = {x: vAB.x vBC.x, y: vAB.y vBC.y}
lDE = 1.0 / Math.hypot(vDE.x, vDE.y)
vDE.x *= lDE
vDE.y *= lDE
vDE是您正在尋找的單位向量。
得到線DE
vDE從點B減去向量得到點D- 將向量
vDE與B點相加得到E點
(縮放哪里dist是從B點D和E的距離)
dist = 20
vDE.x *= dist
vDE.y *= dist
D = {x: B.x - vDE.x, y: B.y - vDE.y}
E = {x: B.x vDE.x, y: B.y vDE.y}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/490050.html
上一篇:提高具有許多影片的網站的性能
