添加工具方法
This commit is contained in:
parent
8762ced5f8
commit
ff5ed78027
@ -542,3 +542,68 @@ export function angleOfIncludedAngle(
|
||||
}
|
||||
return angle;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算两点连线的法向量
|
||||
* @param point1
|
||||
* @param point2
|
||||
* @returns 单位法向量
|
||||
*/
|
||||
export function getNormalVector(
|
||||
point1: IPointData,
|
||||
point2: IPointData
|
||||
): number[] {
|
||||
const x1 = point1.x,
|
||||
y1 = point1.y;
|
||||
const x2 = point2.x,
|
||||
y2 = point2.y;
|
||||
const length = Math.sqrt((y2 - y1) ** 2 + (x2 - x1) ** 2);
|
||||
return [(y2 - y1) / length, (x1 - x2) / length];
|
||||
}
|
||||
|
||||
/**
|
||||
* 点延向量方向移动
|
||||
* @param point
|
||||
* @param normal 单位向量
|
||||
* @param length 平移长度
|
||||
* @returns 移动后的点
|
||||
*/
|
||||
export function movePointAlongNormal(
|
||||
point: IPointData,
|
||||
normal: number[],
|
||||
length: number
|
||||
): Point {
|
||||
const newPoint = new Point(
|
||||
point.x + length * normal[0],
|
||||
point.y + length * normal[1]
|
||||
);
|
||||
return newPoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算两组点各自组成直线的相交点(若两线平行 返回第一组坐标第一个点)
|
||||
* @param line1 两点坐标列表
|
||||
* @param line2 两点坐标列表
|
||||
* @returns 相交点
|
||||
*/
|
||||
export function getIntersectionPoint(line1: number[], line2: number[]) {
|
||||
const a1 = line1[0],
|
||||
b1 = line1[1];
|
||||
const a2 = line1[2],
|
||||
b2 = line1[3];
|
||||
const a3 = line2[0],
|
||||
b3 = line2[1];
|
||||
const a4 = line2[2],
|
||||
b4 = line2[3];
|
||||
const denominator = (a3 - a4) * (b1 - b2) - (a1 - a2) * (b3 - b4);
|
||||
if (denominator === 0) {
|
||||
return new Point(a1, b1);
|
||||
}
|
||||
const x =
|
||||
((a3 - a4) * (a2 * b1 - a1 * b2) - (a1 - a2) * (a4 * b3 - a3 * b4)) /
|
||||
denominator;
|
||||
const y =
|
||||
((b3 - b4) * (b2 * a1 - b1 * a2) - (b1 - b2) * (b4 * a3 - b3 * a4)) /
|
||||
-denominator;
|
||||
return new Point(x, y);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user