【问题标题】:Collision Handling... Confused where to go碰撞处理...困惑去哪里
【发布时间】:2013-12-12 03:21:55
【问题描述】:

所以,我正在开发一个 2D 物理引擎,但我遇到了一个问题。我很难概念化你将如何计算这个:

取两个正方形:它们移动、碰撞,并根据两个正方形的速度和它们的形状在某个矢量上。

我有两个向量列表(二维双列表)代表这两种形状,如何获得法线向量?

就质心的位置而言,命中向量只是(s1 是第一个形状,s2 是第二个)s2 - s1。

现在,我知道法向量是垂直于边的,而且我知道你可以得到直线的垂直向量 90 度,但是边是什么?

我在几个地方读到,它是一个角落碰撞的边缘。你如何确定这一点?

这对我来说毫无意义,你将如何以数学或编程方式确定什么边缘。

谁能指出我在理解上做错了什么?很抱歉没有提供任何代码来解释这一点,因为我在为它编写代码时遇到了问题。

【问题讨论】:

  • 也许this 可能会有所帮助...
  • 检测似乎不是问题,这是处理检测的问题。

标签: java math vector physics collision


【解决方案1】:

图1:在二维中,法向量垂直于切线线

图 2: 在 3D 中,法线向量垂直于切线 平面

图3:对于正方形,如果您不在拐角处,则法向量很容易;它正好垂直于正方形的边(在上图中,n = 1 i + 0 j,对于沿正方形的任何点广场的右侧)。


但是,在拐角处,它变得有点困难,因为切线没有明确定义(就导数而言,切线在拐角处是不连续的,因此垂直是不明确的)。

即使法线向量没有定义在拐角处,它也直接定义在它的左右两侧。因此,您可以使用这两个法线(n1n2)的平均值作为一个角落。

为了不那么技术性,法向量将是从正方形中心到碰撞角的方向。


编辑:在下面的聊天中回答 OP 的进一步问题:“你如何计算两个多边形 s 之间的一般碰撞的法线向量1和 s2 只知道相交的顶点。"

一般来说,你可以这样计算范数(N 是总顶点,m 是碰撞内部顶点):

vcenter = (∑Nvi) / N

v碰撞 = (∑mvi) / m

n = v碰撞 - vcenter

  1. 图。 1 - vcollision 只是一个顶点。
  2. 图。 2 - vcollision 是两个顶点的平均值。
  3. 图。 3 - vcollision 用于通用多边形相交。

【讨论】:

  • 这很有帮助,但这意味着您知道碰撞涉及哪条边,我只知道另一个形状内的顶点是什么?
  • 您最多会在另一个形状内检测到 2 个顶点,然后范数垂直于连接这两个点的线。如果您只检测到另一个形状内的一个顶点,则规范是从该形状的中心到顶点本身(如上图所示)。
  • 这或多或少让我顿悟了,但是如果有很多顶点,比如一个圆转成一个多边形呢?在一次运动中,它们可能是内部的几个顶点,比如说,一个正方形?当然,对于一个圆,您会将其视为一个奇异顶点,但如果您不知道它是一个圆怎么办?
  • 一般来说,你可以取另一个形状内所有顶点的平均位置,称为v_avg,法线将从形状的中心到v_avg。
  • 你,我的朋友,是个天才。非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
相关资源
最近更新 更多