在工作中遇到这样一个需求:将人物传送至一片四边形区域的随机某个点。在工作的配置中,我可以获取待传送区域的四个点位坐标。

那么将上面的需求简化成数学问题其实就是,输入四个点位坐标,输出其围成的四边形中某个点。

基本思路:

  1. 要获取随机的xy点,首先要随机获取一个点,给定的四个点坐标中可以求出x的范围
  2. 在确定x是值后,接下来就是要确定y的范围。我们作一条直线X=x,将这条直线依次带入四条边的直线公式中。注意:四边形的边直线公式如果斜率不存在,那就不需要带入了,例如:将X=x依次带入另外三条直线中,可以获得三个交点
  3. 判断交点是否在四边形内,存在的交点则是y范围的边界。这样就可以得到y的范围。
    1. 判断交点是否在四边形内可以使用三角形面积法:点和其他四条直线组成多个三角形,这些三角形的面积和如果等于四边形的面积则该点在其中,否则在外面
    2. 使用向量积判断
  4. 在x值已经确定的情况下,随机从y范围取一点,即可得到区域内的随机点了

这个方法中最重要的一步是第三步,这里放一个教程:判断一个点是否在给定的凸四边形内