与其他两个点相比,检测一个点的位置

Syn*_*r0r 2 algorithm 2d

编辑我正在寻找实际的一两个班轮,做了很多upvote建议的答案.

我在一个非常真实的软件中解决了一些问题,我正在寻找一种简单的方法来解决它.

我在屏幕上有两个固定点(它们是固定的,但我事先不知道它们的位置),它们不在同一个位置.这两个固定点形成一条虚线.现在我有第三个点就是那条线的"一边"(它不能在线上).用户可以抓住该点(用户实际抓取我通过其中心跟踪的对象,这是我感兴趣的点)并拖动它.但它无法"穿越"虚线.检测用户是否越过虚线的最简单方法是什么?

积分可能是:

a[] = new int { 30, 50};
b[] = new int { 0, 100 };
c[] = new int { 20, 22 };
Run Code Online (Sandbox Code Playgroud)

示例(不对应上述几点):

      /
     a
c   /
   /    
  /   (c cannot be dragged here) 
 b
/

要么:

         c
---b--------------c--- -- -- -- - -
(c cannot be dragged here)

那么,如果c停留在线的正确"侧",那么容易检测到什么(我在这里画段,但它真的可以被认为是一条线)?

检测这种情况的一种方法是获取目标点d并查看段(c,d)是否与线(a,b)相交,但是不是更简单的方法吗?我不能在这里做一些2D点产品魔术并且基本上有一两个线程解决我的问题吗?

Dre*_*all 8

您可以使用叉积AB x AC的Z分量的符号(将A和B的Z分量隐式地取为0)作为AB点C当前所在的哪一侧的指示.当该符号发生变化时,阻力已经越过或越过了AB段.