Godot在多边形内随机获取点

前言:

我做了一个随机生成器,可以生成游戏道具,之前是矩形比较好算,随着关卡设计我需要多边形的生成方式。

在矩形内获取随机点:

func generateRandomCoordinateInRect(pos,size):
	"""根据范围生成随机坐标"""
	var rect_min = pos
	var rect_max = pos + size
	var x = rand_range(rect_min.x, rect_max.x)
	var y = rand_range(rect_min.y, rect_max.y)
	var randomCoordinate = Vector2(x, y)
	return randomCoordinate

在Polygon2D内获取随机点:

# 区域内获取随机点
func getRandomPoint():
	var triangles = Geometry.triangulate_polygon(self.polygon)
	var n = triangles.size() / 3
	var x = randi() % n * 3
	var p0 = self.polygon[triangles[x]]
	var p1 = self.polygon[triangles[x+1]]
	var p2 = self.polygon[triangles[x+2]]
	var p3 = lerp(p0,p1,rand_range(0, 1))
	var p4 = lerp(p2,p3,rand_range(0, 1))
	return p4

原理:

首先获取多边形所有的点,然后转换为三角形索引数组

随机获取一个三角形,并在三角形内随机获取点,方法如下:

在AB上随机抽取一个点,命名为D,然后再在CD上随机抽取一个点

代码中p0,p1,p2是三角形的ABC三个点

 

参考链接:

https://www.jianshu.com/p/36fa431311ac

https://www.reddit.com/r/godot/comments/mqp29g/how_do_i_get_a_random_position_inside_a_collision/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值