2012-06-08 83 views
1

我认为这是一个基本问题,但是,我的数学技能缺乏。三角学计算

我正在研究一款iphone游戏,人们在这里绘制自己的平台来反弹蛋。

游戏由一个连接2个节点的平台组成,每个节点都有一个x和y值,这个平台可以以任何角度取决于用户如何绘制它,当有东西碰到这个平台时,我需要它垂直地击中。我知道我需要多少总功率,我怎么会打破它,X和Y我画了一幅画,以更好地解释之间......

Two examples of my problem each for a different direction

这里有两个例子的信息,我有这个问题是节点的X坐标,以及虚线垂直线的长度。我需要找到的是X和Y线的长度,以及X是正向还是负向。

+0

平台是连接两个点的线,对吧?它由两个点完全定义。在哪里“东西”击中它?你想知道什么? – alexis

+0

您可以计算节点线的斜率,然后使用“-1 /斜率”表示垂直。使用'y/x = -1/slope'和毕达哥拉斯定理,你可以设置一个变量的等式。 – pimvdb

回答

2

如果你有两个节点,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 
+0

你可能想补充一点,因为玩家可能会想要随时弹出“up”: 'x = y> 0? -x:x' 'y = y> 0? -y:y' – namuol

+0

啊,当然他们是相似的三角形;)谢谢你非常非常 –

1

如果你的两个点是AB,和您的线路长度为L,你首先需要找角度AB使得相对于X轴:

theta = atan((B.x - A.x)/(B.y - A.y)) 

有了这些,你可以计算出xy正是如此:

x = L * cos(theta) 
y = L * sin(theta) 

您必须考虑的唯一边缘情况是水平线(在这种情况下,计算θ时由于除以零而导致计算失败)。在水平线的情况下,x=0y=L

+1

'theta = atan2(B.y - A.y,B.x - A.x)',你不必担心边缘情况。 –