构造一个向量与向量A->B垂直。称其为 向量M.
则 下两个内积异号:
(向量A->C)*M 与 (向量A->C')*M 异号
补充:
设向量A->B=(x,y), 取 M = (y, -x) 指向右边,
凡是 (向量A->C)*M > 0 的C都在右边。
凡是 (向量A->C)*M < 0 的C都在左边。
你可以这样考虑,如果你可以知道A点和B点的坐标的话,那么可以写出A和B所确定的直线的方程,假设为ax+by+c=0,那么可以通过ax+by+c>0还是ax+by+c<0来判断C点在在AB的哪边。比如你图中的AB,ax+by+c<0时,则点(x,y)在AB左边;ax+by+c>0时,则点(x,y)在AB右边。
/** author: jave.lin, date: 2017-12-05 */
已知点A(ax,ay),B(bx,by),C(cx,cy),C'(cpx,cpy)
V(A指向B)=简写V(AB)
V(A->B) = B-A=(bx-ax,by-ay)
V(A->C) = C-A=(cx-ax,cy-ay)
V(A->C') = C'-A=(cpx-ax,cpy-ay)
使用向量叉乘
如有向量P(px,py),Q(qx,qy)
PxQ=px * qy - py * qx (这是单位向量下可以使用的简化写法,具体大家去百度:向量叉乘)
结果是个标量,叉乘标量结果有个特性:
PxQ<0说明P在Q的逆时针方位
PxQ>0说明P在Q的顺时针方位
PxQ=0说明P、Q共线(同向、反向)
value = V(A->B) x V(A->C)
if ( value < 0 )
printf("向量V(A->B在向量V(A->C)的左边");
else if ( value > 0 )
printf("向量V(A->B在向量V(A->C)的右边");
else
printf("向量V(A->B、向量V(A->C)共线");
// 同理以下 V(A->B) x V(A->C')可与同上求法处理
value = V(A->B) x V(A->C')
// 判断value结果即可
把向量A.B的中点的横坐标求出来,和C点的很坐标比一下,C点大的话就在右边,反之在左边。当然要排除向量AB不和X轴平行,不然就无左右之分了