赤爷有跟小智见过面吗:好象是和数学有关,进来看就知道了!100分求解

来源:百度文库 编辑:中科新闻网 时间:2024/04/30 15:36:43
我是学游戏开发的,但数学不是太好,所以想请大家帮忙。
X,Y坐标系
一个不规则的图形设为A吧。
一个点设为B,这个点B现在不知道在哪
问: 如何才能知道这个点B坐标是否在A图形中?

什么方法都好,越简单步骤越少越好,非常感谢
http://storage.msn.com/x1pAiu4hyfyKFVJRPbb7RipLbFLi1GQg-MPkj6lFvDdP566g9xrooePhixn3efGcE61WIRE66erW9I7hThXZXFTqXV5qmwuWPJxb0EKJ8BBt03ghRTl5c1cOT3YVeCWPP6Q7bNxkoGrumPMrIEzj35sRA

上面的地址是多边形和点B的图片,大家可以拿来参考.
补充:把图形划分成多个可计算的小图形这个我已经知道了,步骤很多,要存的数据量比较多,游戏开发时需要空间与时间的要求是均衡的,感谢大家的帮助,希望各位能帮小弟找到最快(计算步骤少),最节省空间的算法(存储变量的多少)~!谢谢

图形A的边界应该有一个函数表达式吧(也许很复杂吧)
把这个函数表达式变成f(x,y)=0的形式
把B点的坐标带入f(x,y),得到的结果就能判断
>0:图形A之外
=0:图形A的边界
<0:图形A之内

如果图形A的边界确实没有办法用函数表示,可以把它分割成若干个子图形,比如A1,A2...An
让这些子图形的边界都有一个函数表达式,这一点还是很容易做到的,可能过程有点繁琐而已
然后使用上面的方法,只要B在其中某一个子图形里,那它就在图形A中

大学到小学的 都就饭吃了

很高深,我想高中时好象还可以解决,现在不行,我看一定有巧妙的办法,期待!呵

这个问题可以用凸包来解决,把A划成尽量少的凸包然后求之

从图中看来A是一个多边形,我下面的解法就基于这个假设了
设B的坐标为(x1,y1),做一条过B点的水平线f(x)=y1。
A的所有边均可以一个线形函数来表示(因为是直边),例如f(x)=ax+b=y,c=<x<=d,求出这些边与水平线f(x)=y1的交点,即求使ax+b=y1的x,且需c<x<d (即不包含A的顶点)
交点数目必为偶数个。计算这些交点与x1的关系。若大于x1和小于x1的分别有奇数个,则B在A内,若分别有偶数个(包括0个),则B在A外。若刚好有点和x1重合,则B在A上(一开始先比较一下B与顶点是否重合)具体原因自己画一下图即可知道。
设A有n条边,则该方法的算法复杂度为o(n),确切地讲是n次乘法,n次加减法和3n次比较大小(其中2n用于比较c<x<d,n次用于比较交点横坐标与x1),算法复杂度比求面积或是旋转角度都要低。

同意,
把图形a转换成函数来表达
带入b,如果符合便在a中