已知线段的两点坐标 若起点和方向不变 只是长度变短 终点坐标该怎么求呢?

如下图所示:

两个红色的点分别是这条绳子的两端,坐标都是已知的。

现在我想不要那么长的绳子,只要从左边红点到右边黄点的长度(只要比原来的短就行,短多少可以任意定。) 请问 我能怎么样得出黄色点的坐标? 使左边红点到右边黄点的方向 和左边红点到右边红点的方向是一样的只是长度不同而已?

线段有任意角度 会倾斜,不单单是横向或纵向。

求各位大神解答 谢谢啦!!!

// 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之间的长度
  }
3赞