查看: 216|回复: 7|关注: 0

[已解决] 生成 50万 个圆,如何优化?

[复制链接]

入门

83 麦片

财富积分


50500


125

主题

312

帖子

0

最佳答案
  • 关注者: 4
本帖最后由 gisjun 于 2019-9-9 23:03 编辑

如题,想利用matlab编程生成50万个圆(圆的半径统一),并随机赋予其圆心位置。用for循环的一个个生成圆太慢了! 可有大神有办法优化?

论坛优秀回答者

8

主题

1440

帖子

247

最佳答案
  • 关注者: 131
发表于 2019-9-10 09:53:46 | 显示全部楼层
你可以生成一个圆在(0,0)点,将圆上坐标存入长度为m的矩阵Ax,Ay
你的问题等价于将这个圆随机的平移。

你只需要生成长度为n随机矩阵Bx,By。

每个圆上点的坐标位置就是m*n的矩阵 Cx,Cy
兴趣是最好的导师——让Matlab入门从游戏开始
https://www.ilovematlab.cn/thread-546885-1-1.html

入门

83 麦片

财富积分


50500


125

主题

312

帖子

0

最佳答案
  • 关注者: 4
 楼主| 发表于 2019-9-11 10:49:02 | 显示全部楼层
本帖最后由 gisjun 于 2019-9-11 10:54 编辑
悟得 发表于 2019-9-10 09:53
你可以生成一个圆在(0,0)点,将圆上坐标存入长度为m的矩阵Ax,Ay
你的问题等价于将这个圆随机的平移。

能否给出代码?:hug::hug:  另外,先不考虑平移,如何不用循环生成50万个圆呢?

论坛优秀回答者

8

主题

1440

帖子

247

最佳答案
  • 关注者: 131
发表于 2019-9-11 13:59:28 | 显示全部楼层
gisjun 发表于 2019-9-11 10:49
能否给出代码?  另外,先不考虑平移,如何不用循环生成50万个圆呢? ...

开数组为什么要用循环。直接生成。
我说的平移是一个等效而已。
兴趣是最好的导师——让Matlab入门从游戏开始
https://www.ilovematlab.cn/thread-546885-1-1.html

入门

83 麦片

财富积分


50500


125

主题

312

帖子

0

最佳答案
  • 关注者: 4
 楼主| 发表于 2019-9-15 12:55:08 来自手机 | 显示全部楼层
悟得 发表于 2019-9-11 13:59
开数组为什么要用循环。直接生成。
我说的平移是一个等效而已。

可否给个实例代码?

入门

145 麦片

财富积分


50500


0

主题

103

帖子

9

最佳答案
  • 关注者: 7
发表于 2019-9-15 13:31:14 | 显示全部楼层 |此回复为最佳答案
有点意思,二楼说的很对啊,平移是有效的。可惜楼主没理解他的意思。
clear;clc
tic
r = 1;
NUM = 500000;
theta = (0:0.3:2*pi)';
x=r*cos(theta); y=r*sin(theta);
pos_x = 1000*rand(NUM,1);
pos_y = 1000*rand(NUM,1);
x5 = repmat( x, 1, NUM ) + repmat(pos_x', length(x), 1);
y5 = repmat( y, 1, NUM ) + repmat(pos_y', length(y), 1);
toc
plot( x5(:), y5(:), '.' )
axis equal

这个是500个圆
untitled2.png
这个是在加一个5000000的,这个用时1.82s
untitled.png

论坛优秀回答者

8

主题

1440

帖子

247

最佳答案
  • 关注者: 131
发表于 7 天前 | 显示全部楼层
chuyanwu2012 发表于 2019-9-15 13:31
有点意思,二楼说的很对啊,平移是有效的。可惜楼主没理解他的意思。
clear;clc
tic

这个本来就没难度,我觉得已经说的很明白了,感觉他只是不想动手……
兴趣是最好的导师——让Matlab入门从游戏开始
https://www.ilovematlab.cn/thread-546885-1-1.html

入门

83 麦片

财富积分


50500


125

主题

312

帖子

0

最佳答案
  • 关注者: 4
 楼主| 发表于 3 天前 | 显示全部楼层
chuyanwu2012 发表于 2019-9-15 13:31
有点意思,二楼说的很对啊,平移是有效的。可惜楼主没理解他的意思。
clear;clc
tic

感谢相助!哎,我基础太菜!太菜!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表