让我们定义一些符号:
A := (a1, a1).
B := (b1, b2).
C := (c1, c2).
那么矩阵的行列式D
1 a1 a2
1 b1 b2
1 c1 c2
确定C 位于有向线AB 的左侧还是右侧[cf.计算几何 - Berg、van Kreveld、Overmars、Schwarzkopf - 第 1 章,练习 1.4 a)]
现在,您可以从第 2 行和第 3 行中减去第 1 行:
1 a1 a2
0 b1-a1 b2-a2
0 c1-a1 c2-a2
并从第一列计算D得到:
(b1-a1)*(c2-a2) > (c1-a1)*(b2-a2)
作为表示C是否位于AC左侧的条件。当然,在右边(resp.left)躺着意味着角度是180)
示例
A = (0, 0)
B = (0, 1)
C = (1, 0)
那么AB 是垂直线段(y 轴),C 显然在它的右侧。条件
(b1-a1)*(c2-a2) > (c1-a1)*(b2-a2) ineq(1)
变成:
0 > 1
即false,意味着C不在AB的左边(如预期的那样)
可视化
为了可视化条件,我们可以转换三个点 A、B 和 C,直到 A 变为 (0,0)。这是一个无害的转换,因为 ineq(1) 中的条件从B 和C 的坐标中减去a1 和a2。通过这种翻译,ineq(1) 变为:
b1*c2 > c1*b2 ineq(2)
现在,让我们可视化这三个点(暂时忽略相对于C' = (c'1, c'2) 的棕色线):
乘积b1*c2 是红色矩形的面积。乘积c1*b2 是绿色矩形的面积。图片显示RED C在右边。
现在,在脑海中移动C,对C' 说,并可视化新的红色和绿色矩形。只要C 在右边,不等式就仍然有效。
还不相信?好吧,编写一个程序,在更改C 的位置时动态再现这张图片,瞧! (或者再学习一些数学并解决书中的练习;)
注意:请注意,这些矩形有一个标志。在图片中它们都有一个正面区域,但是,一般来说,产品b1*c2 和b2*c1 都会有一个标志。