我认为这是一个基本问题,但是,我的数学技能缺乏。三角学计算
我正在研究一款iphone游戏,人们在这里绘制自己的平台来反弹蛋。
游戏由一个连接2个节点的平台组成,每个节点都有一个x和y值,这个平台可以以任何角度取决于用户如何绘制它,当有东西碰到这个平台时,我需要它垂直地击中。我知道我需要多少总功率,我怎么会打破它,X和Y我画了一幅画,以更好地解释之间......
这里有两个例子的信息,我有这个问题是节点的X坐标,以及虚线垂直线的长度。我需要找到的是X和Y线的长度,以及X是正向还是负向。
我认为这是一个基本问题,但是,我的数学技能缺乏。三角学计算
我正在研究一款iphone游戏,人们在这里绘制自己的平台来反弹蛋。
游戏由一个连接2个节点的平台组成,每个节点都有一个x和y值,这个平台可以以任何角度取决于用户如何绘制它,当有东西碰到这个平台时,我需要它垂直地击中。我知道我需要多少总功率,我怎么会打破它,X和Y我画了一幅画,以更好地解释之间......
这里有两个例子的信息,我有这个问题是节点的X坐标,以及虚线垂直线的长度。我需要找到的是X和Y线的长度,以及X是正向还是负向。
如果你有两个节点,N1和N2,和L的线路长度,则:
ndx = N1.x - N2.x
ndy = N1.y - N2.y
ndist = sqrt(ndx*ndx + ndy*ndy)
x = ndy * L/ndist
y = ndx * L/ndist
你可能想补充一点,因为玩家可能会想要随时弹出“up”: 'x = y> 0? -x:x' 'y = y> 0? -y:y' – namuol
啊,当然他们是相似的三角形;)谢谢你非常非常 –
如果你的两个点是A
和B
,和您的线路长度为L
,你首先需要找角度AB
使得相对于X轴:
theta = atan((B.x - A.x)/(B.y - A.y))
有了这些,你可以计算出x
和y
正是如此:
x = L * cos(theta)
y = L * sin(theta)
您必须考虑的唯一边缘情况是水平线(在这种情况下,计算θ时由于除以零而导致计算失败)。在水平线的情况下,x=0
和y=L
。
'theta = atan2(B.y - A.y,B.x - A.x)',你不必担心边缘情况。 –
平台是连接两个点的线,对吧?它由两个点完全定义。在哪里“东西”击中它?你想知道什么? – alexis
您可以计算节点线的斜率,然后使用“-1 /斜率”表示垂直。使用'y/x = -1/slope'和毕达哥拉斯定理,你可以设置一个变量的等式。 – pimvdb