c - 作业——二维空间中3点的叉积

标签 c math vector

我主要不熟悉 vector ,所以想知道我是否可以在这里得到一些帮助。

我正在二维空间中进行凸包项目。我正在处理的具体功能需要确定一个点是在线的左侧、右侧还是直接在线上。

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

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

我的问题是我对叉积不熟悉,我所做的研究并没有阐明如何用 3 点来做到这一点。我的直觉是,这与使用 2 个 vector 的过程相同,但如果是这种情况,我不知道如何将我的 3 个点准确地转换为 2 个 vector 。

非常感谢!

最佳答案

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

(q - p) x (r - p)

a x b行列式

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

有时也称为“二维叉积”(参见示例 http://mathworld.wolfram.com/CrossProduct.html ).

关于c - 作业——二维空间中3点的叉积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156646/

相关文章:

文件和 vector 的 C++ 长度

c++ - 如果我在 std::remove 函数中直接传递数组元素 ar[0] 而不是 x,为什么会得到不同的结果?

c - 如何使用 GNU make 将多个不相关的源文件编译为多个不相关的目标文件?

c - 库包含在 tkill 中

c++ - 确定平方根是否为整数

java - 想要提高编程的数学技能

c++ - 将临时右值绑定(bind)到 std::vector 构造函数中的引用左值

c++ - Windows 中最流行的 C++ gui 框架是什么?

c - 为什么 v[i] = i++ 在 C 中是未定义的行为?

algorithm - 曝光布局算法