vector和三角形的相交

我正在尝试为iOS创建一个三角形的触摸表面,用户可以拖动这个三角形内的一个点。 使用这个页面的信息,很容易找出拖动的点是在三角形的内部还是外部。 不过,如果用户在三角形外面拖动,我想要将点指向三角形边缘。

这对AB侧和AC侧来说很容易,因为如果用户的手指拖到这些边缘之外,我只需要将vectoru或v分别设置为零。 但是,我不知道如何find边上BC点。 如果用户在边缘BC之外拖动他们的手指,我需要find这个交点。

带有点和矢量标签的三角形

BC边上的所有点都有| u |的属性 + | v | = 1.减less较长的vector的大小,使这个属性为真会得到你的交点。 在你的图片中,这意味着将v的幅度减小0.245764829343853。 这只适用于你从A线到手指线穿过BC线的情况。

假设你有A,B和C(我们称之为Ax,Ay等)的坐标,并且D = u + v,则交点为:

X = ((Bx - Cx) (Ax * Dy - Ay * Dx) - (Bx * Cy - By * Cx) (Ax - Dx))/((By - Cy) (Ax - Dx) - (Bx - Cx) (Ay - Dy)) Y = ((By - Cy) (Ax * Dy - Ay * Dx) - (Bx * Cy - By * Cx) (Ay - Dy))/((By - Cy) (Ax - Dx) - (Bx - Cx) (Ay - Dy)) 

另请参阅维基百科关于线路交叉点的文章 。