在三角域内生成随机位置

2024-05-22

我想生成x and y具有均匀分布且受限于[xmin,xmax] and [ymin,ymax]

点 (x,y) 应位于三角形内。

我该如何解决这样的问题?


下面是一些在平面中的任意三角形上均匀生成点的代码。

import random
    
def point_on_triangle(pt1, pt2, pt3):
    """
    Random point on the triangle with vertices pt1, pt2 and pt3.
    """
    x, y = sorted([random.random(), random.random()])
    s, t, u = x, y - x, 1 - y
    return (s * pt1[0] + t * pt2[0] + u * pt3[0],
            s * pt1[1] + t * pt2[1] + u * pt3[1])

这个想法是计算三个顶点的加权平均值,权重由单位间隔的随机中断给出[0, 1]分成三部分(在所有此类中断上统一)。这里x and y表示我们打破单位间隔的地方,并且s, t and u是断裂后碎片的长度。然后我们使用s, t and u as the 重心坐标 https://en.wikipedia.org/wiki/Barycentric_coordinate_system#Barycentric_coordinates_on_triangles三角形中的点。

这是上面的一个变体,它避免了排序的需要,而是使用绝对值调用:

def point_on_triangle2(pt1, pt2, pt3):
    """
    Random point on the triangle with vertices pt1, pt2 and pt3.
    """
    x, y = random.random(), random.random()
    q = abs(x - y)
    s, t, u = q, 0.5 * (x + y - q), 1 - 0.5 * (q + x + y)
    return (
        s * pt1[0] + t * pt2[0] + u * pt3[0],
        s * pt1[1] + t * pt2[1] + u * pt3[1],
    )

以下是在三角形中生成 10000 个点的示例用法:

pt1 = (1, 1)
pt2 = (2, 4)
pt3 = (5, 2)
points = [point_on_triangle(pt1, pt2, pt3) for _ in range(10000)]

从上面获得的图显示了均匀性。该图是由以下代码生成的:

import matplotlib.pyplot as plt
x, y = zip(*points)
plt.scatter(x, y, s=0.1)
plt.show()

这是图片:

由于您使用“numpy”标签标记了问题,因此这里有一个可以一次生成多个样本的 NumPy 版本。请注意,它使用矩阵乘法运算符@,在 Python 3.5 中引入并在 NumPy >= 1.10 中受支持。您需要将其替换为调用np.dot在较旧的 Python 或 NumPy 版本上。

import numpy as np

def points_on_triangle(v, n):
    """
    Give n random points uniformly on a triangle.

    The vertices of the triangle are given by the shape
    (2, 3) array *v*: one vertex per row.
    """
    x = np.sort(np.random.rand(2, n), axis=0)
    return np.column_stack([x[0], x[1]-x[0], 1.0-x[1]]) @ v


# Example usage
v = np.array([(1, 1), (2, 4), (5, 2)])
points = points_on_triangle(v, 10000)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在三角域内生成随机位置 的相关文章

  • “扩展”numpy ndarray 的好方法?

    有没有 扩展 numpy ndarray 的好方法 假设我有一个像这样的 ndarray 1 2 3 4 我希望每行通过填充零来包含更多元素 1 2 0 0 0 3 4 0 0 0 我知道一定有一些蛮力的方法可以做到这一点 比如构造一个带有
  • Tastypie 与 application/x-www-form-urlencoded

    我有点难以弄清楚下一步应该做什么 我正在使用 tastypie 为我的 Web 应用程序创建 API 从另一个应用程序 特别是 ifbyphone com 我收到一个没有标题的 POST 如下所示 post data http myapp
  • 如何关闭python服务器

    使用此代码来运行 python 服务器 import os from http server import SimpleHTTPRequestHandler HTTPServer os chdir c users owner desktop
  • Python - 定义常量列表或字典的最佳/最简洁的方法

    第一次使用堆栈溢出 我很高兴来到这里 简介 我最近开始了 Python 编程世界的神奇冒险 我喜欢它 现在 在我从 C 语言的尴尬过渡中 一切都进展顺利 但我在创建与标头文件 h 同义的内容时遇到了麻烦 问题 我有中等大小的字典和列表 大约
  • 创建一个行为类似于任何变量但具有更改/读取回调的类

    我想创建一个类 其行为类似于 python 变量 但在更改 读取 变量 时调用一些回调函数 换句话说 我希望能够按如下方式使用该类 x myClass change callback read callback 将 x 定义为 myclas
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • 使用opencv+picamera流IO用树莓派捕获视频

    我使用 Raspberry 来简单地显示一个视频 目前仅此 为此 我必须使用 opencv cv2 我尝试了很多解决方案 但现在我想使用 Picamera 库捕获视频 我将向您展示我的代码 import io import time imp
  • 使用主宰器将实时数据发送给客户端

    我尝试使用 Flask 的主宰框架 以便按照 Flask 代码片段将实时信息发送到客户端浏览器http flask pocoo org snippets 80 http flask pocoo org snippets 80 当我尝试为我的
  • 如何使用子进程打开新的浏览器选项卡?

    我正在打开一个新的 IE 窗口 subprocess Popen r os environ PROGRAMFILES Internet Explorer IEXPLORE EXE Call URL 当 IE 关闭时这很好 但即使打开它也会生
  • 计算二维笛卡尔坐标中不规则形状的边界

    我正在寻找一种计算不规则形状边界的解决方案 Lats take a look at Square example 如果我有Minimum x and y and Maximum x and y like MaxX 5 MinX 1 MaxY
  • 将多个 isinstance 检查转换为结构模式匹配

    我想转换此现有代码以使用模式匹配 if isinstance x int pass elif isinstance x str x int x elif isinstance x float Decimal x round x else r
  • wxPython:更新wx.ListBox列表

    我在 python 程序中有一个 wx ListBox 我不想在 wx Timer 更新时更改其中的列表 我的计时器正在工作 我只是不知道如何更改它显示的列表 这是一个例子 http www daniweb com code snippet
  • Celery 设计帮助:如何防止并发执行任务

    我对 Celery AMQP 相当陌生 正在尝试提出一个任务 队列 工作人员设计来满足以下要求 我有多种类型的 每用户 任务 例如 TaskA TaskB TaskC 这些 每用户 任务中的每一个都为系统中的一个特定用户读取 写入数据 因此
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • python 中的异步编程

    python 中有异步编程的通用概念吗 我可以为一个函数分配一个回调 执行它并立即返回主程序流 无论该函数的执行需要多长时间吗 您所描述的 主程序流程在另一个函数执行时立即恢复 不是通常所说的 异步 又名 事件驱动 编程 而是 多任务 又名
  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • Numba jitclass 不适用于 python 列表

    我在用python 3 6 and numba 0 36 这个问题有一个sister https stackoverflow com questions 48159360 numba custom stack class and pop f
  • Flask APScheduler + Gunicorn 工作人员 - 在套接字修复后仍在运行任务两次

    我有一个 Flask 应用程序 我使用 Flask APScheduler 在我的数据库上运行计划查询并通过 cron 作业发送电子邮件 我通过 Gunicorn 使用以下配置运行我的应用程序并通过主管进行控制 program myapp
  • 磁盘寻道时间测量方法

    我编写了一个脚本来测量 HDD 上的寻道时间 并且其完成方式的微小变化会导致显着不同的时间 第一个周期在磁盘开头的区域内进行跳转 第二个周期选择磁盘上执行查找的随机区域 相同大小 这种方法显然不同 但我不明白为什么它会改变结果 请注意 对于
  • 从 xgb.train() 获取概率

    我是 Python 和机器学习的新手 我在网上搜索了我的问题 并尝试了人们建议的解决方案 但仍然没有得到它 如果有人能帮助我 我将非常感激 我正在开发我的第一个 XGboost 模型 我已经使用 xgb XGBClassifier 调整了参

随机推荐