如下图所示:
两个红色的点分别是这条绳子的两端,坐标都是已知的。
现在我想不要那么长的绳子,只要从左边红点到右边黄点的长度(只要比原来的短就行,短多少可以任意定。) 请问 我能怎么样得出黄色点的坐标? 使左边红点到右边黄点的方向 和左边红点到右边红点的方向是一样的只是长度不同而已?
线段有任意角度 会倾斜,不单单是横向或纵向。
求各位大神解答 谢谢啦!!!
如下图所示:
两个红色的点分别是这条绳子的两端,坐标都是已知的。
现在我想不要那么长的绳子,只要从左边红点到右边黄点的长度(只要比原来的短就行,短多少可以任意定。) 请问 我能怎么样得出黄色点的坐标? 使左边红点到右边黄点的方向 和左边红点到右边红点的方向是一样的只是长度不同而已?
线段有任意角度 会倾斜,不单单是横向或纵向。
求各位大神解答 谢谢啦!!!
// p1是起点,p2是终点,length是长度
function getPoint(p1, p2, length){
// 获得两点之间的距离
let mag = Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
// 获得目标长度的缩放值
let factor = length / mag;
// 计算目标点
let x = p1.x + (p2.x - p1.x) * factor;
let y = p1.y + (p2.y - p1.y) * factor;
return {x, y};
}
计算一下就好了
楼上的方法也是可行的,不过不需要这么麻烦,这个很简单啊。
2点决定了一个向量,设为向量1,你给向量1重新指定一个长度,就是向量2了,新的终点坐标D,就是起点向量0,加上向量2,就是点D的坐标。
向量重新赋值长度方法:先将向量1单位化,然后乘以长度值,即可。
嗯嗯 我试着用了 可以实现 谢谢啦!
嗯嗯 了解~ 这个实现确实简单些 谢谢啦!
提个小建议,creator api带了一些向量运算有助于更方便的计算这类问题:
这个是2.0 ts实现:
let p1: cc.Vec2 = cc.v2(0, 0);//左边红点
let p2: cc.Vec2 = cc.v2(0, 100);//右边红点
function getP3(p1, p2): cc.Vec2 {
return p1.add(
p2.sub(p1).normalize().mul(//方向向量归一化
Math.random()*//0-1的值
p2.sub(p1).mag()));//p1与p2之间的长度
}