将点分布在边界内的表面上

2024-01-28

我对一种在 4 面(如正方形)上分布预定义数量的点的方法(算法)感兴趣。

主要问题是每个点必须具有彼此之间的最小和最大接近度(两个预定义值之间的随机值)。基本上,任何两点的距离不应小于 2,也不应大于 3。

我的代码将用 ruby​​ 实现(点是位置,表面是地图),但任何想法或片段绝对受到欢迎,因为我的所有想法都包含相当多的蛮力。


Try 这张纸 http://diwww.epfl.ch/w3lsp/publications/colour/prhsfcabp_93.html。它有一个很好、直观的算法,可以满足您的需要。

在我们的建模中,我们采用了另一种模型:我们认为每个中心都通过排斥弦与其所有邻居相关。

在模拟开始时,中心是随机分布的,并且各中心的强度也是随机分布的 字符串。我们随机选择移动一个中心;然后我们计算所有引起的合力 给定中心的邻居,我们计算成比例且定向的位移 就合力而言。

经过一定次数的迭代(这取决于迭代次数) 中心和初始随机性程度)系统变得稳定。

如果从图中看不清楚,这种方法会生成均匀分布的点。您可以使用在边界内为零的力(例如,在 2 到 3 之间),否则使用非零力(如果点太近则为排斥力,如果太远则为吸引力)。

这是我的 Python 实现(抱歉,我不懂 ruby​​)。只需导入它并调用uniform()即可获取点列表。

import numpy as np
from numpy.linalg import norm
import pylab as pl

# find the nearest neighbors (brute force)
def neighbors(x, X, n=10):
  dX = X - x
  d = dX[:,0]**2 + dX[:,1]**2
  idx = np.argsort(d)
  return X[idx[1:11]]

# repulsion force, normalized to 1 when d == rmin
def repulsion(neib, x, d, rmin):
  if d == 0:
    return np.array([1,-1])

  return 2*(x - neib)*rmin/(d*(d + rmin))

def attraction(neib, x, d, rmax):
  return rmax*(neib - x)/(d**2)

def uniform(n=25, rmin=0.1, rmax=0.15):
  # Generate randomly distributed points
  X = np.random.random_sample( (n, 2) )

  # Constants
  # step is how much each point is allowed to move
  #   set to a lower value when you have more points
  step = 1./50.

  # maxk is the maximum number of iterations
  #   if step is too low, then maxk will need to increase
  maxk = 100

  k = 0

  # Force applied to the points
  F = np.zeros(X.shape)

  # Repeat for maxk iterations or until all forces are zero
  maxf = 1.
  while maxf > 0 and k < maxk:
    maxf = 0
    for i in xrange(n):
      # Force calculation for the i-th point
      x = X[i]
      f = np.zeros(x.shape)

      # Interact with at most 10 neighbors
      Neib = neighbors(x, X, 10)

      # dmin is the distance to the nearest neighbor
      dmin = norm(Neib[0] - x)

      for neib in Neib:
        d = norm(neib - x)
        if d < rmin:
          # feel repulsion from points that are too near
          f += repulsion(neib, x, d, rmin)
        elif dmin > rmax:
          # feel attraction if there are no neighbors closer than rmax
          f += attraction(neib, x, d, rmax)

      # save all forces and the maximum force to normalize later
      F[i] = f
      if norm(f) <> 0:
        maxf = max(maxf, norm(f))

    # update all positions using the forces
    if maxf > 0:
      X += (F/maxf)*step

    k += 1

  if k == maxk:
    print "warning: iteration limit reached"

  return X
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将点分布在边界内的表面上 的相关文章

  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 使用 Ruby 获取 AWS 区域名称

    我正在为 AWS 开发 Rails 应用程序 并希望为区域名称创建下拉菜单 例如 us east 1 等 如果有人已经创建了 gem 来获取它们 我想使用它 有人知道这样的 gem 或有用的 API 吗 适用于 Ruby 的 AWS 开发工
  • Ruby on Rails 最酷的功能是什么,为什么选择它? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我问这个问题之前 我浏览了 SO 上 Ruby on Rails 的搜索结果 找不到太多 但以下 在此页面上找到 https stackove
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • (在 Ruby 中)允许混合类方法访问类常量

    我有一个为其定义常量的类 然后我定义了一个类方法来访问该类常量 这很好用 一个例子 usr bin env ruby class NonInstantiableClass Const hello world class lt lt self
  • 由于符号链接错误,无法在 Mac OSX 10.8.1 中安装 ruby​​-1.9.2

    首先 我尝试了常见的rvm安装 rvm安装1 9 2 但是 显示了以下错误 The provided compiler usr bin gcc is LLVM based it is not yet fully supported by r
  • 使用 YAML.load 解析 json 安全吗?

    我使用的是红宝石2 1 0 我有一个 json 文件 例如 测试 json item apple 1 banana 2 使用 YAML load 加载此文件是否安全 YAML load File read test json 我正在尝试加载
  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • ||= 是什么意思? [复制]

    这个问题在这里已经有答案了 我的应用程序控制器中有一个受保护的方法 def current user current user User find by id session user id end 我想知道什么 方法 我一直在努力寻找和找
  • 将 ruby​​ 类转换为模块比使用改进更好的方法?

    Module refine http ruby doc org core 2 0 0 Module html method i refine方法接受一个类和一个块并返回一个细化模块 所以我想我可以定义 class Class def inc
  • 有没有可以在 HTML 文档之间进行比较的 ruby​​ gem?

    事实证明 对两个不同的 html 文档进行比较是一个完全不同的问题 而不仅仅是对纯文本进行比较 例如 如果我在以下之间进行简单的 LCS 差异 Google and Google diff 结果不是 but a gt github com
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 求先递增后递减列表的最大值和最小值

    我尝试用谷歌搜索这个问题 但没有取得太大成功 我确信这个问题或类似问题有一个技术名称 但我似乎找不到答案 给定一个列表L整数 即严格递增 然后严格递减 找到该列表的最大值和最小值 例如 L可能 1 2 3 4 5 4 3 2 or 2 4
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • 两个 ruby​​ 进程之间的通信可能/容易吗?

    如果我有一个 ruby 脚本Daemon顾名思义 它作为守护进程运行 监视系统的某些部分并能够执行需要身份验证的命令 例如更改权限 是否有一种简单的方法来拥有第二个 ruby 脚本 例如client 与该脚本通信并向其发送命令 询问信息 我
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • 在一个区域中拟合二维多边形的算法?

    这有标准吗 算法名称 说 我有 10 个不同大小的多边形 我有一个特定大小的区域 我想知道如何填充该区域中的最多多边形 以及它们是如何拟合的 笔记 多边形可以根据限制集进行旋转 一个可能的名称是包装问题 http en wikipedia
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid

随机推荐

  • 将 Typeahead.js 与 ASP.Net Webmethod 集成

    我正在寻找将 Typeahead js 与 Asp Net Webmethod 一起使用的示例 我有来自的例子http twitter github io typeahead js examples http twitter github
  • SQL Server 2012-数据库主数据库中的创建数据库权限被拒绝(错误 262)

    我想使用 SQL Server Management studio 在 SQL Server 2012 上创建一个新数据库 我以管理员身份运行 SQL Server Management studio 并使用 Windows 身份验证登录
  • 性能问题 - iOS 中的 plist 与 sqlite

    我需要跟踪一些变量并经常保存它们 我不需要复杂的搜索和排序 只需要简单的读 写 plist 和 sqlite 的读 写性能有什么区别 除了上述两种方法之外 我还应该使用 core data 吗 请给我一些提示 Thanks 在 SQlite
  • 无法加载 libhdfs

    尝试使用 pyarrow 访问 hdfs 文件但无法使其工作 下面是代码 非常感谢您 rxie cedgedev03 code python Python 2 7 12 Anaconda 4 2 0 64 bit default Jul 2
  • 电子如何允许不安全的https

    Loading https github com https github com例如 工作正常 但是加载不安全的https 页面显示为空 我做了一些研究并尝试了 3 个标志 webSecurity allowDisplayingInsec
  • 如何清除服务器端文件上传文本(c#)

    我想清除文件上传的文件路径 文件上传位于更新面板内 我正在使用AsyncFileUpload 如何清除文件并更改文件上传的背景颜色 btnAudUpload Click 方法 string filename FileUpload FileN
  • gcc优化说明

    出于黑客的好奇心 我想知道如何gcc能巧妙地优化下面的功能吗 int c int i j 0 for i 0 i lt 10 i j i return j objdump D c o下面是针对arm的 但x86在逻辑上没有什么不同 0000
  • 清除标准输入缓冲区?

    我正在编写一些代码并使用 fgets 来获取用户输入 然后我在代码上编写了一个循环 以不断要求用户输入 直到用户打印退出 但第二次询问时 它写了 2 次 请输入您的输入 而不是 1 次 并且第一次没有等待我的输入 所以 我用谷歌搜索它 发现
  • 如何使用原子操作切换一个文档中的布尔字段?

    有没有办法通过原子操作来切换 MongoDB 中一个文档的布尔字段 说 用Python cl update id toggle field 1 目前 我认为通过一次手术不可能做到这一点 按位运算符 http www mongodb org
  • Oracle 中的匿名 TABLE 或 VARRAY 类型

    在 Oracle 中 我有时想创建诸如此类的构造 SELECT FROM TABLE STRINGS a b c SELECT FROM TABLE NUMBERS 1 2 3 显然 我可以为上述声明我自己的类型 我可以选择TABLE an
  • MediatR 发布和 MediatR 发送

    我已经尝试使用 MediatR 的 CQRS 模式 并且喜欢正在处理的应用程序正在转换的干净状态 在我见过和使用的所有例子中 我总是这样做 await Mediator Send command 查询也是一样的 var data await
  • float32 和 float64 之间的真正区别

    我想了解之间的实际区别float16 and float32从结果精度来看 例如 NumPy 允许您选择所需数据类型的范围 np float16 np float32 np float64 我担心的是 如果我决定使用 float16 来保留
  • 删除默认构造函数令人头疼

    我的 C 书是这么说的 lippman c Primer 第五版 第 508 页 如果类 有一个 const 成员 其类型未显式定义默认构造函数 则合成的默认构造函数被定义为已删除and该成员没有类内初始值设定项 强调我的 那么为什么这段代
  • 使用套接字 io 向所有浏览器发送消息

    我正在摆弄socket io和node js 并且想知道如何完成以下任务 我有一个简单的表单 将文本字符串发送到服务器 服务器将其发回 并将其附加到div中 我想做的是为所有浏览器中的所有用户更新该 div 目前它只更新发送消息的浏览器 来
  • 拒绝应用来自...的样式,因为其 MIME 类型('text/html')不是受支持的样式表 MIME 类型,并且启用了严格的 MIME 检查

    此错误仅在 Chrome 中显示 我正在搜索这个问题 但还没有找到令人满意的解决方案 我附上了该错误的屏幕截图 请为此提出一些想法 错误图像 https i stack imgur com 6IAxV png 样式表的 MIME 类型应为t
  • 是否可以在 Wear OS 中永久可靠地运行网络 ping 服务?

    我正在尝试找到一种在 Wear OS 上以可靠的方式运行网络心跳服务的方法 目标是有一个进程每 x 分钟发送一次网络请求 无论设备的状态如何 屏幕开 关 充电 关闭充电器等 有可能实现吗 我的方法是运行前台服务 https develope
  • SSDT 创建回滚部署脚本?

    我们可以使用TFS SSDT创建SQLServer部署脚本 但是有没有办法创建回滚脚本 以便我们可以回滚部署 谢谢 由于 SSDT 和类似产品 都是通过将项目中的模式与实时数据库进行比较来使数据库与模型同步来工作的 因此没有直接的方法来创建
  • 可以使用 Window.Onscroll 方法来检测滚动方向吗?

    可以使用 Window Onscroll 方法来检测滚动方向吗 如果您在页面加载时以及每次发生滚动事件时记录scrollX和scrollY 那么您可以将以前的值与新值进行比较 以了解滚动的方向 这是概念证明 function scrollF
  • 从 .NET Windows 服务调用本机 DLL 失败

    我有一个本机 dll 形式的第 3 方 API 我使用 C 调用它DllImport 此本机 dll 依赖于打开的第 3 方应用程序 当我正常运行代码时 API 会执行预期的操作并驱动应用程序 然而 当我运行与 Windows 服务相同的代
  • 将点分布在边界内的表面上

    我对一种在 4 面 如正方形 上分布预定义数量的点的方法 算法 感兴趣 主要问题是每个点必须具有彼此之间的最小和最大接近度 两个预定义值之间的随机值 基本上 任何两点的距离不应小于 2 也不应大于 3 我的代码将用 ruby 实现 点是位置