首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >numpy生成三角形内的随机单元

numpy生成三角形内的随机单元
EN

Stack Overflow用户
提问于 2021-03-29 19:53:27
回答 2查看 121关注 0票数 0

我想根据点(0, 0) (0, 1), (1, 0.5)在三角形中生成随机点。我认为最简单的方法是使用numpy生成(0, 0), (0, 1), (1, 1), (1, 0)正方形中的点,然后将其过滤到三角形中。

下面是代码,它将生成该正方形内的点。

代码语言:javascript
运行
复制
pts = np.random.rand(1000, 2)

但是,我不知道如何将numpy数组过滤到该三角形内的点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-29 21:30:14

如果您想要进行过滤方法,您必须找到一个条件来检查哪些点在三角形内。然后,您可以使用numpys argwhere函数来查找所有完全填充条件的点的索引:

代码语言:javascript
运行
复制
pts = np.random.rand(1000, 2)
x_coord = pts[:, 0]
y_coord = pts[:, 1]


def _in_triangle(x, y):
# You might want to doublecheck if this condition is correct, I am sure there is a better way.
    return (((x <= 0.5) & (y <= 2*x)) | ((x <= 0.5) & (y <= 2-2*x))) & (0 <= x) & (x <= 1) & (0 <= y) & (y <= 1)


points_in_triangle = pts[np.argwhere(_in_triangle(x_coord, y_coord))]
票数 2
EN

Stack Overflow用户

发布于 2021-03-29 20:25:13

对于尚未解决的紧急情况,我将尝试一个多管齐下的答案:

如果不需要统一的分布,那么只需从0,1均匀地生成x-coord,然后从0.5-((1-x)/2), 0.5+((1-x)/2)生成y-coord。这使得每个x坐标的可能性相等,因此倾向于以较少的y坐标对应点:三角形顶点附近的点将比靠近基座的点更多地被选中。

在选择y之前,您可以通过x-坐标上的逆变换来纠正这一点:正方形x

如果您需要使用您已经生成的点,那么您别无选择,只能以某种方式过滤它们。其中一半将是不合适的,这些点通过你的数组随机分布。没有办法分割数组来实现这个结果。

编辑斯科特·亨特的信用

但是,您可以过滤和转换不合适的点:用简单的从三角形到内部的转换来映射它们。你的三角形在线的上方。

代码语言:javascript
运行
复制
y = 2x
y = -2x + 2

一个简单的映射是反映这些线之上的每一个点,穿过线段的中点:(0.25,0.5)或(0.75,0.5)。这是一个简单的等式:为了反映点(x, y)跨点(a, b),反射是(2a-x, 2b-y)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66860762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档