假设我在网格中有2个图块。
Tile1[x,y] //stationary thing
Tile2[x,y] //movable thing
我将它们视为半径为1的圆圈并尝试进行碰撞交互。
我可以确定距离,因此如果他们接触了,但是在确定别的东西时我很难过(我不知道我正在寻找的东西的话)。我希望能够说“找到位于Tile1-> Tile2线上的新点[x,y],但距离Tile1只有2.01个单位”。
我想我需要找到角度,然后是斜边长度,并假设斜纹长度百分比为2,然后将该数字乘以x和y差。是否有更好(或更正确)的方法呢?
答案 0 :(得分:2)
lNewPoint.x = Tile1.x + (Tile2.x - Tile1.x) * 2.01 / d;
lNewPoint.y = Tile1.y + (Tile2.y - Tile1.y) * 2.01 / d;
d
是从Tile1
到Tile2
第二个共线(您正在寻找的术语)点可在以下位置找到:
lNewPoint.x = Tile1.x - (Tile2.x - Tile1.x) * 2.01 / d;
lNewPoint.y = Tile1.y - (Tile2.y - Tile1.y) * 2.01 / d;
解决方案假定Tile1
和Tile2
不相同。在这种情况下d == 0
,解决方案是一个圆圈,其Tile1
位于其中心,半径为2.01
。
答案 1 :(得分:1)
你不需要斜边长度;一旦你有角度(通过atan2()
,你可以将其插入sin()
和cos()
以获得单位距离的偏移量,然后将每个乘以2.01。