已知两个点(x1,y1)(x2,y2), 求出这个射线为指定值的一个点;
是我没有说清楚,我是已知两个点startPoint、endPoint, 然后求一个计算距离startPoint距离为distance的点,且此点在startPoint->endPoint上,当超出endPoint取endPoint
interface IPoint {
x: number;
y: number;
}
function getExpectPoint(startPoint: IPoint, endPoint: IPoint, distance: number = 50) {
let y = endPoint.y - startPoint.y;
let x = endPoint.x - startPoint.x;
if (x === 0) {
if(startPoint.y > endPoint.y) {
return { x: endPoint.x, y: startPoint.y - distance };
}
return { x: endPoint.x, y: startPoint.y + distance };
}
if(y === 0) {
if(startPoint.x > endPoint.x) {
return { x: endPoint.x - distance, y: startPoint.y }
}
return { x: endPoint.x + distance, y: startPoint.y }
}
const result = Math.atan(y / x);
const cos = Math.cos(result) * distance;
const sin = Math.sin(result) * distance;
let point = { x: 0, y: 0 };
if (x > 0 && y > 0) {
point = { x: startPoint.x + cos, y: startPoint.y + sin }
}
if (x < 0 && y > 0) {
point = { x: startPoint.x - cos, y: startPoint.y - sin }
}
if (x > 0 && y < 0) {
point = { x: startPoint.x + cos, y: startPoint.y + sin }
}
if (x < 0 && y < 0) {
return { x: startPoint.x - cos, y: startPoint.y - sin }
}
const len = (point.x - startPoint.x)**2 + (point.y - startPoint.y)**2;
const originLen = (endPoint.x - startPoint.x)**2 + (endPoint.y - startPoint.y)**2;
if(len >= originLen) {
return endPoint;
}
return point;
}
就是为了计算方块下面的原点绘制的距离(已完成了)