Matlab任意正六边形随机撒点 实现-----------通信仿真必备

2023-11-16

      任意正六边形随机撒点 是通信仿真里经常用到的,无奈网上资料很少,参照http://www.ilovematlab.cn/thread-136761-1-1.html,我又苦思敏想里一下午,这个问题才得以完美解决。废话不多说了,先来看看怎么画正六边形。

theta = linspace(0,2*pi,7);

plot(cos(theta),sin(theta),'g-');

           两句代码就可以画出一个正六边形了,其中第一句也可以这样写:N=6;
theta = 0:2*pi/N:2*pi;

效果是一样的,无非是通过【cos(theta),sin(theta)】计算出七个点,将这七个点首尾依次相连,画出六条边。

如下图所示:


      这个正六边形有点小特殊,它的中心在坐标轴的原点(0,0)处,边长d=1.网上还有另外一种画正六边的方法,是通过给顶中心O和边长d来计算出每个顶点的位置,用一个for循环画六次,相当麻烦,我未采用。但这种两句话画出的正六边形相当特殊,不能满足使用需要,用这种计算cos、sin得到点坐标的画法,网上再无资料了,怎么用这种画法画出任意中心O,边长d的正六变形呢?先来看我们把边长弄为d。首先看下面的图:

       当边长为1时,正六边形最右边的点C坐标为(cos(0),sin(0)),也就是(1,0),当边长为d时C的坐标变成(d,0),通过计算不难发现A点的坐标变成(d/2, 根号3 *d),也就是(d*cos(theta), d*sin(theta))。所以画出边长为d的正六边形程序改为:

N=6;
theta = 0:2*pi/N:2*pi;
D=1;
plot(D*cos(theta),D*sin(theta),'g-');就可以了,D是边长。假设我们的正六边形中心点P(x,y),而现在的中心在坐标原点O(0,0),两者构成一个向量PO(x,y)。所谓的d*cos(theta),d*sin(theta)算的其实就是六个顶点的坐标,将这些坐标按向量PO平移,得到平移后的6个顶点坐标为:d*cos(theta)+x, d*sin(theta)+y。因此画出边长为D,中心坐标为P(X,Y)的正六边形,程序可以这样写:

theta = linspace(0,2*pi,7);
D=2; %边长
X=1;  %中心横坐标
Y=2;  %中心纵坐标
plot(Dcos(theta)+X,D*sin(theta) + Y,'g-');这远比那个for循环来循环去的方法简单吧!

随机撒点问题:

首先看这里是往咱们画的第一个正六边形里撒一百个随机点的程序:

  • %%
  • theta = linspace(0,2*pi,7);
  • plot(cos(theta),sin(theta),'g-');
  • axis square

  • i = 0;
  • while i < 100 
  • x = 2*rand(1,2)-1;
  • if (abs(x(1)) + abs(x(2))/sqrt(3) ) <= 1 && abs(x(2)) <= sqrt(3)/2 
  • i = i+1;
  • hold on
  • plot(x(1),x(2),'r*');
  • end
  • end
  • hold off
            这里i是撒点的个数。我们要彻底搞懂这个程序。我们先将这个程序扩展为边长为d的情况。x = 2*rand(1,2)-1;这句话是为了将随机点的横纵坐标锁定在[-1, 1](这是正六变形的最左点和最右点),当边长为d时,这句话变为:x = 2*d*rand(1,2)-d

               最让人蛋疼的是if (abs(x(1)) + abs(x(2))/sqrt(3) ) <= 1 && abs(x(2)) <= sqrt(3)/2 这句话,足足让我想了一个下午!显然这是为了给随机点加限制,保证随机点在正六边形内。这里x(1)是横坐标,x(2)是纵坐标。abs(x(2)) <= sqrt(3)/2,先看这句。在第一象限内,随机点纵坐标的值应该小于第二个图中AB的距离,当边长为d,而AB的最大值 = d*sqrt(3)/2.

          另外一个条件abs(x(1)) + abs(x(2))/sqrt(3) ) <= 1。我们这样想,随机点最边界的情况就是在正六边形的边上,在第一象限为例,当随机点在边AC上时,OB+BC=1,为了和随机点的横纵坐标联系起来,这么写:OB + AB/tan(60) = 1, 边长为d时,边长OB + AB/tan(60) = d,所以临界条件是:OB + AB/tan(60)  <=  d.

    假设中心点坐标为P(x,y),则随机点的坐标也要平移。平移后的坐标变成x(1) + x, x(2) + y,至此大功告成!最终的程序如下,如果需要连续在多个正六边形随机撒点,则要多次调用x = 2*D*rand(1,2)-1*D;
    if (abs(x(1)) + abs(x(2))/sqrt(3) ) <= D && abs(x(2)) <= D*sqrt(3)/2 ,这样就能保证每次撒的随机点一定是随机的,且相互无影响。

    大家可以根据需要把程序封装成函数调用:

    %%
    theta = linspace(0,2*pi,7);
    D=2; %边长
    X=1;  %中心横坐标
    Y=2;  %中心纵坐标
    plot(D*cos(theta)+X,D*sin(theta) + Y,'g-');
    axis square


    i = 0;
    while i < 3
    x = 2*D*rand(1,2)-1*D;
    if (abs(x(1)) + abs(x(2))/sqrt(3) ) <= D && abs(x(2)) <= D*sqrt(3)/2 

    i = i+1;
    hold on
    plot(x(1) + X, x(2) + Y,'r*');     
    end
    end
    hold off

    上面程序画出的图:


  •        这里我们先找到边长为D,中心在(0, 0)时的撒出的随机点,然后通过向量平移plot(x(1) + X, x(2) + Y,'r*')画出中心在(X, Y)时的随机点, 哈哈,高一学的数学还真是有用啊!计算那个不等式关系好像是初三几何里,怀念我的老师们 和 那段难忘的日子!

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

Matlab任意正六边形随机撒点 实现-----------通信仿真必备 的相关文章

  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • 图像处理方面的空间和时间表征有什么区别?

    我是学习图像处理的初学者 我对空间和时间表征的概念有点困惑 那么 对于空间表征来说 是不是像一张二维地图 包含了一些关于地图的统计信息呢 就时间特征而言 值是相对于时间的吗 这意味着什么以及我们为何关心 谢谢 当您在不同时间拍摄一系列图像时
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • 二维随机微分方程 (SDE)

    我第一次研究随机微分方程 我正在寻求模拟和求解二维随机微分方程 模型如下 dp F t p dt G t p dW t where p 是一个 2 1 向量 p theta t phi t F是列向量 F sin theta Psi cos
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • 在 MATLAB 中验证输入的最佳实践

    在验证 MATLAB 函数中的输入时 什么时候使用 inputParser 比使用断言更好 或者还有其他更好的工具可用吗 我个人发现使用 inputParser 不必要地复杂 对于 Matlab 始终需要检查 3 项内容 存在 类型和范围
  • 用于读取csv写入数组的c++程序;然后操作并打印到文本文件中(已经用 matlab 编写)

    我想知道是否有人可以帮助我 我正在尝试构建一个程序 从 csv 文件中读取大小未知的浮点数大数据块 我已经在 MATLAB 中编写了此代码 但想要编译和分发此代码 因此转向 C 我只是在学习并尝试阅读本文以开始 7 5 19892 4 23
  • 如何使用最小生成树方法将边缘连接到图像中的节点

    我正在做我的手写图像图形匹配项目 我想在图形中表示给定的单词图像 我使用下面的算法 Algorithm input Binary image B Grid width w Grid height h Output Graph g V E w
  • 从 3 个向量创建等值线图

    我正在尝试根据这些数据创建等高线图 pH D Tur 5 10 3 79 18918919 5 50 6 92 97297297 5 00 0 50 09009009 5 00 6 90 36036036 5 10 9 91 0810810
  • 如何在 MATLAB 的 for 循环中读取多个图像?

    我已将结果分段放在一个文件夹中 这些需要在 for 循环中读取并在循环中进一步处理 我尝试阅读如下 for i 1 10 file name dir strcat C Users adminp Desktop dinosaurs im im
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • 如何在 MATLAB 中可视化球体的交集?

    似乎这个问题在一些地方被问过 包括SO https stackoverflow com questions 35130336 draws the intersecting volume of two spheres in matlab 我最
  • 如何在Matlab中自定义轮廓线?

    我正在准备一个等高线图 我应该在其中突出显示特定级别的等高线 例如 我的轮廓线值位于 1 和 1 之间 我想突出显示与值 0 相对应的线 我尝试使用以下过程来执行此操作 M c contourf longitude latitude del
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • MATLAB 中时间戳过滤器的优化 - 处理非常大的数据集

    我正在 MATLAB 中编写一个程序 必须使用 MATLAB 并且不能真正使用 MEX 来过滤大量数据 我需要实现的过滤器之一要求我将时间戳向量与其他时间戳不会出现的已知 不良 时间列表进行比较 一个典型的时间戳向量有大约 2 000 00
  • 将自动生成的 Matlab 文档导出为 html

    我想为我开发的 Matlab 工具箱生成完整的帮助 我已经看到如何显示自定义文档 http www mathworks fr fr help matlab matlab prog display custom documentation h

随机推荐

  • cas 编译安装依赖时提示: Failure to find net.shibboleth.tool:xmlsectool:jar:2.0.0

    错误信息 Could not resolve dependencies for project org apereo cas cas overlay war 1 0 Failure to find net shibboleth tool x
  • 本地 Django 部署 Heroku的时候某个 / 某些数据库显示总是无法创建成功 relation “nnsh_backend_new_userinfo“ does not exist LINE

    文章目录 情景 原因 操作 手动 自动 情景 假设你有一个项目 A 你之前部署了项目 A 里面包含了两个数据库的表 table1 和 table2 他们都顺利部署 然后你相加一些功能 于是又创建了一张表 table3 于是再部署的时候发现
  • glBindFragDataLocation

    异构计算GLSL学习笔记 1 原文地址 http blog csdn net hjimce article details 51475644 作者 hjimce 最近开始学习深度学习的一些gpu编程 大体学了cuda后 感觉要在手机上跑深度
  • python-查看帮助

    help 一 不同的环境下 1 交互模式下 命令行 查看模块的帮助信息 import pickle help pickle 可以看到详细信息 More 上回车 滚动信息 q 退出帮助 2 ide里 需要做一个输出 import pickle
  • unity基础编程(一)

    以此来记录系统学习使用unity的知识方便以后复习使用 如果能得到监督和指导 不胜感激 unity常用使用快捷键 1 Q 抓手工具 W 移动工具 E 旋转工具 R 缩放工具 T 横切面工具 就在键盘一排试一试就会很清楚了 2 Z 轴点模式切
  • 自动在图片上添加页码

    在一次工作中 需要对几百GB的图片文件添加页码 也就是在图片添加一定的流水号 那么 在图片上添加页码 总的需要四个步骤 1 图片重命名 批量修改原图片名 设置流水号作为图片文件名 如 0001 gt 0036 2 添加页码 通iSee软件批
  • Docker赋能物联网:探索软件供应链的优势、挑战和安全性

    作者 JFrog大中华区总经理董任远 随着联网设备硬件性能的日益提升及价格愈发低廉 物联网应用的复杂性随之提升 常用的容器化平台Docker能够帮助精简流程 助力开发人员更轻松地创建和维护物联网应用 本文将探讨Docker为物联网开发带来的
  • 最大熵原理

    最近看到一位高手 说了最大熵原理应用在排名 让我倍感发抖 网上有个人连研究基本步骤都写完了 着实让蛋疼了一小下 就引用一下吧 最大熵原理在1957 年由E T Jaynes 提出的 主要思想是 在只掌握关于未知分布的部分知识时 应该选取符合
  • 第1.2章 神经网络中隐藏层、偏置单元、激活函数的作用(使用激活函数的原因)

    神经网络中隐藏层 偏置单元 激活函数的作用 隐藏层 偏置单元 激活函数 权重 摘要 这篇文章主要是对上一篇文章中所给例题中部分知识点的讲解 较多的参考了网上其他朋友的资料 主要是供大家学习和自己以后查看资料方便 如有侵权 请告知 我会及时修
  • git 回滚

    1 没有push 这种情况发生在你的本地代码仓库 可能你add commit 以后发现代码有点问题 准备取消提交 用到下面命令 reset git reset soft mixed hard 上面常见三种类型 mixed 会保留源码 只是将
  • C语言函数大全-- r 开头的函数

    r 开头的函数 1 raise 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 rand 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 read 3 1 函数说明 3 2 演示示例 3 3 运行结果 4 realloc
  • DFS 刷题记录(laptop part)(2022.2.10)

    namespace matchstick my int isDividedby4 vector
  • 树的遍历(bfs)

    题目链接 https www acwing com problem content 1499 题目 一个二叉树 树中每个节点的权值互不相同 现在给出它的后序遍历和中序遍历 请你输出它的层序遍历 输入格式 第一行包含整数 N N N 表示二叉
  • 初识操作系统

    初识操作系统 1 硬件组成 冯诺依曼体系结构 2 操作系统 Operator System 概念 OS定位 设计OS的目的 3 进程 进程的初步认识 时间片 并发与并行 内核态与用户态 进程中的上下文 进程状态 进程 线程小结 进程小结 线
  • Gitee使用

    文章目录 前言 一 Gitee简介 二 使用Gitee 1 创建仓库 2 上传代码 3 团队协作 4 Issue管理 5 CI CD集成 6 社交化 结语 前言 开源软件开发是当今互联网时代的一项重要活动 在开源社区 有许多平台可以帮助开发
  • 多核编程学习笔记之OpenMP(一)

    多核编程学习笔记之OpenMP 一 I 配置及简介 1 1 在VC 2008 VC9 0 中 如果没有任何设置 在代码中使用编译指导语句将不会报错 但是也不起作用 1 2 OpenMP发展与优势 1 2 1 OpemMP的规范由SGI发起
  • 天刀论剑显示服务器,天涯明月刀天刀论剑怎么进入_天涯明月刀天刀论剑进入方法_快吧游戏...

    天涯明月刀论剑系统已经在昨天正式开放了 估计不少小伙伴已经体验到了这个玩法 论剑论剑 其实说白了就是竞技场系统 目前天刀中的竞技场暂时只有1V1的模式 作为试开放的一个系统 昨天不少地方让玩家们纷纷表示太过坑爹 下面就跟随小编一起 欢乐的来
  • Access-Control-Allow-Origin header contains multiple values ‘http://xx, *‘, but only one is allowed

    SpringBoot Access to XMLHttpRequest at http xx from origin http xx has been blocked by CORS policy The Access Control Al
  • 连接Windows服务器出现Credssp错误的解决方法

    连接Windows服务器出现Credssp错误的解决方法 问题描述 在使用远程桌面连接登录Windows系统的服务器时 提示以下信息 经过排查 确认用户名和密码都没问题 重置密码也无法登录 热门活动 2020年阿里云双12爆款拼团特惠活动
  • Matlab任意正六边形随机撒点 实现-----------通信仿真必备

    任意正六边形随机撒点 是通信仿真里经常用到的 无奈网上资料很少 参照http www ilovematlab cn thread 136761 1 1 html 我又苦思敏想里一下午 这个问题才得以完美解决 废话不多说了 先来看看怎么画正六