我需要一个方程来找到点F. 点A,B和D是已知的。点F是未知的。 F点在AB线上。 AB线垂直于DF线。什么是F的等式?LineSegments的滑动碰撞方程
回答
首先,找到线AB的使用A和B的坐标点斜式的斜率: Point Slope Formula
然后可以找到b键完成了线AB的方程: y = mx + b
其中m是斜率你已经找到了,b是你刚发现的y截距。
线DF的斜率将是线AB的斜率的负倒数。将其插入公式中: y = mx + b其中m是AB线斜率的负倒数,b后来出现。
现在,使用点D的x和y值求解b,并将其插入等式中。
您现在应该有一个线DF的方程和AB线的另一个方程。现在通过设置它们相等来解决这两个方程的截距,并首先求解x,然后插入x并找到y。
下面是一个例子。
A =(1,2)。 B =(4,8)。 D =(2,5)。
线AB:
(y - y1) = m*(x - x1)
(1 - 4) = m*(2 - 8)
-3 = m*(-6)
0.5 = m
y = (0.5)*x + b
2 = (0.5)*1 + b
2 = (0.5) + b
1.5 = b
y = 0.5*x + 1.5
线DF:
m = -(1/mAB)
m = -(1/0.5)
m = -2
y = -2*x + b
5 = -2*2 + b
5 = -4 + b
9 = b
y = -2*x + 9
AB和DF(即点的坐标F)的交叉口
Line DF: y = -2*x + 9
Line AB: y = 0.5*x + 1.5
-2*x + 9 = 0.5*x + 1.5
9 = 2.5*x + 1.5
7.5 = 2.5*x
x = 3
y = -2*x + 9
y = -2*3 + 9
y = -6 + 9
y = 3
F = (3, 3)
您还没有确切位置指定F点沿着DF线,因此没有单个答案。如果您只是试图沿着与AB线垂直的线从D点找到某点,那么
F.x = D.x + (B.y - A.y)
F.y = D.y + (B.x - A.x)
将起作用。
F在AB线上,而DF线垂直于AB。 A,B和D是2D平面上的所有已知点。 F是AB和DF相交的地方,因为它们是垂直的。 – GreenFox 2011-06-06 10:20:53
它是唯一的 - DF是三角形ADB的“高度”,因为AB和DF是垂直的。这个问题不是出色的措辞,用图表会更好。 – 2011-06-06 11:11:59
我假设你想要的东西计算速度快,因为你提到'碰撞',这是堆栈溢出。首先,图:
我们要计算的组件AF,我们将标签˚F = Q 我 + P Ĵ。 AFD形成三角形,所以我们可以从AD得到f的长度,我们将标签和。我们用斜体标出长方体与斜体:
f = d cos(θ)。
但是trig在计算上很昂贵。因此,让我们使用以下事实:b(AB)和d之间的矢量点积是:
b·d = b d COS(θ)
的角度是相同的,因为AF和AB在同一条线上。代在 d COS(θ):
b·d = b˚F
˚F =(b·d)/ b
现在我们有 f,但是w e想要它的组件p和q。调用与水平面倾斜φ:
Q = ˚F COS(φ)
P = ˚F罪(φ)
但同样我们避免TRIG。我们知道,˚F是沿b,所以˚F = K b,实际上使用的的方向的单位矢量b:
˚F = ˚F(b/ b)
代我们对表达式f:
˚F = [(b·d)/ b](b/ b)
= [(b/ b)·d ](b/ b)
= [b·d] b /( b )
定义因子k,其是常见的两种组分:
K =(B X d X + b y d y)/ b
通过保持 b 分开的,我们能够避免平方根操作,以沿着b
我们的组件获得的单位矢量,则:
Q = KB X
p = KB ý
最后,加回在点A
Fx的=斧+ Q
Fy的= Ay的+ P
所以,伪码的偏移量:
var vbx = Bx - Ax; //vector b x component
var vby = By - Ay; //vector b y component
var dot = vbx*(Dx-Ax) + vby*(Dy-Ay); // dot product of b and d
var k = dot/(vbx*vbx + vby*vby); // inverse of square of vector b length
var fx = Ax + k*vbx
var fy = Ay + k*vby
没有平方根呼叫,无触发,8次加法/减法,6次乘法,1次除法。我能看到的唯一不稳定性是:当A和B位于同一位置时除以零,如果AB很大且AD很大,则可能溢出计算dot
。
- 1. 滑动响应指向 - 广场碰撞
- 2. 拖动碰撞
- 3. GameObject的快速滑动移动不会与Colliders碰撞
- 4. AndEngine Box2D。移除碰撞后的碰撞游戏碰撞
- 5. 碰撞?
- 6. 碰撞响应方法
- 7. 对象似乎不会碰撞使用AABB碰撞方法
- 8. Flex 3:碰撞检测和碰撞后移动对象
- 9. sprite碰撞cocos2d。每帧碰撞
- 10. 2D碰撞(返回碰撞端)
- 11. 碰撞检测和碰撞响应
- 12. Phaser P2碰撞杀死碰撞精灵
- 13. 可拖动对象碰撞
- 14. 碰撞:“死神”动画
- 15. 碰撞触发动画
- 16. 2D矩形滑动碰撞不起作用
- 17. 物理圈碰撞弹出并滑动边界
- 18. 子弹碰撞
- 19. 碰撞检测
- 20. 圆碰撞Javascript
- 21. 球线碰撞
- 22. css list碰撞
- 23. 画布碰撞?
- 24. 圈碰撞式
- 25. 女王碰撞
- 26. Jquery DIV碰撞
- 27. Javascript碰撞
- 28. ImagePickerController碰撞
- 29. 碰撞as3 dectect
- 30. Pygame碰撞
aight,现在让我看看我能不能找出如何实现这一点。我可以看到一个情况,其中AB是一条垂直线,这将导致一个零的分解......我想我只需要写一个情况,其中只需要A或B的Y值和X的值D找到F. – GreenFox 2011-06-06 10:43:31