在不规则四边形的内部随机一个点

问题:给定一个非平行四边形,在内部随机一个点。此问题只针对【凸多边形】这个问题很有趣,上面一个问题是给定一个点,判断是否在四边形内, 这个问题正好是返过来思路1, 随机一个位置, 判断是否在四边形内。不是的话就重新随机答:这个方法好low于是就有了思路2思路2,取四个点的minX, maxX, 然后根据X, 求出这个X值在四条边上的点的位置(有可能相交, 有可能不相交,不相交的话就不考...
摘要由CSDN通过智能技术生成

问题:给定一个非平行四边形,在内部随机一个点。

此问题只针对【凸多边形

这个问题很有趣,上面一个问题是给定一个点,判断是否在四边形内, 这个问题正好是返过来
思路1, 随机一个位置, 判断是否在四边形内。不是的话就重新随机
答:这个方法好low
于是就有了思路2
思路2,取四个点的minX, maxX, 然后根据X, 求出这个X值在四条边上的点的位置(有可能相交, 有可能不相交,不相交的话就不考虑进去)

如图
图示
这个时候再随机A和B之间就得到了Y值,和之前取出的X值就构成了一个点。 完成。 上代码
代码是lua写的

local pos1 = cc.p(200, 200)
local pos2 = cc.p(500, 200)
local pos3 = cc.p(450, 500)
local pos4 = cc.p(150, 500)
local minx = math.min(pos1.x, pos2.x, pos3.x, pos4.x)
local maxx = math.max(pos1.x, pos2.x, pos3.x, pos4.x)
local miny = math.min(pos1.y, pos2.y, pos3.y, pos4.y)
local maxy = math.max(pos1.
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中,可以使用Random.Range()方法生成随机数,然后通过这些随机数计算出一个四边形中的随机点。具体步骤如下: 1. 首先,需要确定四边形的四个顶点的位置。假设这四个顶点的位置分别为A、B、C、D。 2. 根据四边形的顶点计算出它的边界。可以使用Vector3类的Lerp()方法,该方法接受两个Vector3参数和一个0到1之间的插值因子t,返回两个向量之间的插值。例如,可以使用以下代码计算从点A到点B之间的一个随机点: ```csharp Vector3 randomPointOnAB = Vector3.Lerp(A, B, Random.Range(0f, 1f)); ``` 3. 使用Vector3的Cross()方法计算出四边形的法向量,以便确保生成的随机点在四边形内部。例如,可以使用以下代码计算出四边形的法向量: ```csharp Vector3 normal = Vector3.Cross(B-A, C-A).normalized; ``` 4. 对于四边形内的每个随机点,需要随机生成两个插值因子t1和t2,然后使用它们计算出随机点的位置。例如,可以使用以下代码生成这些插值因子: ```csharp float t1 = Random.Range(0f, 1f); float t2 = Random.Range(0f, 1f); ``` 5. 最后,可以将这些插值因子应用于四边形的两个边界向量,然后使用它们的线性组合计算出随机点的位置。例如,可以使用以下代码计算从点AB到点CD之间的一个随机点: ```csharp Vector3 randomPointOnABCD = Vector3.Lerp(Vector3.Lerp(A, B, t1), Vector3.Lerp(C, D, t1), t2); ``` 这样就可以在一个四边形中生成随机点了。需要注意的是,这个方法只适用于凸四边形,对于非凸四边形可能需要使用其他方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值