/**
* 通过坐标计算角度
* @param PointA A坐标
* @param PointB B坐标
*/
function angleOfLine(PointA, PointB) {
return Math.atan2((PointB.y - PointA.y), (PointB.x - PointA.x)) * 180 / Math.PI;
}
/**
* 通过角度和直径求X点余弦值
* @param angle 角度
* @param bevel 直径
*/
function angleOfMarginX(angle, bevel) {
var radian = parseFloat(angle * Math.PI / 180);
var xMargin = parseFloat(Math.cos(radian) * bevel);
return xMargin;
}
/**
* 通过角度和直径求Y点正弦值
* @param angle 角度
* @param bevel 直径
*/
function angleOfMarginY(angle, bevel) {
var radian = parseFloat(angle * Math.PI / 180);
var yMargin = parseFloat(Math.sin(radian) * bevel);
return yMargin;
}
/**
* 2个线段是否相交,相交则需要返回坐标
* @param a 线段A_1{x:0,y:0}
* @param b 线段A_2{x:0,y:0}
* @param c 线段B_1{x:0,y:0}
* @param d 线段B_2{x:0,y:0}
*/
function segmentsIntr(a, b, c, d) {
var area_abc = (a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x);
var area_abd = (a.x - d.x) * (b.y - d.y) - (a.y - d.y) * (b.x - d.x);
if (area_abc * area_abd > 0) {
return { state: false };
}
var area_cda = (c.x - a.x) * (d.y - a.y) - (c.y - a.y) * (d.x - a.x);
var area_cdb = area_cda + area_abc - area_abd;
if (area_cda * area_cdb > 0) {
return { state: false };
}
var t = area_cda / (area_abd - area_abc);
var dx = t * (b.x - a.x),
dy = t * (b.y - a.y);
var x = +(a.x + dx);
var y = +(a.y + dy);
return { state: true, x: x, y: y };
}
/**
* 根据一坐标,半径,角度获取对应的另一坐标
* @param obj
* 格式
* { x: 起始位置x, y: 起始位置y, radius: 半径,angle:角度 }
*/
function angleXY(obj) {
var angle = obj.angle;//角度
var mPointX = obj.x;//x
var mPointY = obj.y;//y
var mRadius = obj.radius;//半径
return { x: Math.cos(angle / 180 * Math.PI) * mRadius + mPointX, y: - Math.sin(angle / 180 * Math.PI) * mRadius + mPointY };
}
评论11