2014-03-03 35 views
0

我大多不熟悉矢量,所以想知道我是否可以在这里得到一些帮助。家庭作业 - 在2D空间中交叉积分3分

我正在2d空间中进行凸包工程。我正在处理的特定功能需要确定一个点位于行左边,右边还是直接位于行上。

我被告知要使用交叉产品来做到这一点。这三点在二维空间中创建了一个三角形。计算交叉产品应该给我三角形的面积。如果面积为正,点p-> q-> r逆时针工作,这意味着点r位于线p-q的左侧。同样,如果面积为负值,点p-> q-> r顺时针方向运行,点r位于线p-q的右侧。如果面积为0,则r位于线p-q上。

我知道如何处理最终结果,我只是不知道我应该使用什么公式。

我的问题是我对跨产品不熟悉,而且我所做的研究没有阐明如何用3分做到这一点。我的直觉是,这与使用2个向量的过程相同,但如果是这种情况,我不知道如何将我的3个点转换为2个向量。

非常感谢!

+0

这个问题似乎是题外话题,因为它是关于数学,并且与编程几乎没有关系。请参阅http://math.stackexchange.com/。 – Vache

+0

请注意,叉积定义在向量之间而非点。对于三点,您可以在其两边声明两个向量,如下面由Martin R给出的答案。 –

+0

@Vache我的歉意,这将是一个更好的地方,把这个。 – bumbleBumble

回答

2

你的三角形有边q-pr-p,所以你必须计算

(q - p) x (r - p) 

其中a x b决定

a x b = (a.x * b.y - a.y * b.x) 

有时被称为 “2维积” (例如参见 http://mathworld.wolfram.com/CrossProduct.html)。

+0

所以如果p =(1,4); q =(2,5); r =(3,6);它会是a =(1,1)和b =(2,2)?因此,a x b =(1 * 2 -1 * 2)=(2-2)= 0?也许我的随机数字不是很理想,如果它是0,但是这个过程是否正确? – bumbleBumble

+0

@bumbleBumble:这是正确的。这三点是一条直线,因此结果为零。 –

+0

非常感谢!这就说得通了。 – bumbleBumble