读书人

◆触碰算法! 有一个多边形.他们的边的

发布时间: 2012-04-01 17:23:46 作者: rapoo

◆触碰算法! 有一个多边形.他们的边的坐标分别是....
有一个多边形.他们的边的坐标分别是:
156,109 173,154 211,146 217,120 181,99
另外有两个点A(156,164)和B(200,85)
请问A点直线移动到B点第一次经过这个多边形的边上的点坐标是多少呢?

也就是点到点经过图像上的第一次坐标的算法。
这些数学问题我已忘完了。
求助具体过程和方法。

[解决办法]
多边形的问题,一般都可以分解为线段的问题

1,判断直线相交,根据点积和叉积,有现成代码
2,求交点是解二元线性方程,代码也可以找到
3,判断这个点是不是经过了这个多边形,是碰撞问题,需要判断端点的x轴延长线是在某条线的两侧

以上3个问题有不同的快速求法.
建议买本<<算法几何>>的书,会很受启发.
[解决办法]
设A,B两点坐标为(Xa, Ya)和(Xb, Yb)
AB直线上一点为P(X, Y)
那么二维矢量P = A+u(B-A)
也就是
X = Xa + u(Xb-Xa)
Y = Ya + u(Yb-Ya)
其中当u在[0,1]内表示P在线段AB中间
对多边形上每一条线段找一个方程来求出这个u,从而求出这个u,最小的[0,1]之间的u就是离A最近的点。
譬如多边形上线段CD,
那么应该有
(Y-Yc)*(Xd-Xc) = (Yd-Yc)*(X-Xc)
[解决办法]
计算经过A,B两点的直线的函数
然后计算和多边形每一条边的交点
并从焦点中筛选介于A,B两点之间的交点

读书人网 >软件架构设计

热点推荐