在一个四边形中随机获取一点
在工作中遇到这样一个需求:将人物传送至一片四边形区域的随机某个点。在工作的配置中,我可以获取待传送区域的四个点位坐标。
那么将上面的需求简化成数学问题其实就是,输入四个点位坐标,输出其围成的四边形中某个点。
基本思路:
- 要获取随机的xy点,首先要随机获取一个点,给定的四个点坐标中可以求出x的范围
- 在确定x是值后,接下来就是要确定y的范围。我们作一条直线X=x,将这条直线依次带入四条边的直线公式中。注意:四边形的边直线公式如果斜率不存在,那就不需要带入了,例如:将X=x依次带入另外三条直线中,可以获得三个交点
- 判断交点是否在四边形内,存在的交点则是y范围的边界。这样就可以得到y的范围。
- 判断交点是否在四边形内可以使用三角形面积法:点和其他四条直线组成多个三角形,这些三角形的面积和如果等于四边形的面积则该点在其中,否则在外面
- 使用向量积判断
- 在x值已经确定的情况下,随机从y范围取一点,即可得到区域内的随机点了
这个方法中最重要的一步是第三步,这里放一个教程:判断一个点是否在给定的凸四边形内
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭