Python实现将n个点均匀地分布在球面上的方法


Posted in Python onMarch 12, 2015

本文实例讲述了Python实现将n个点均匀地分布在球面上的方法。分享给大家供大家参考。具体分析如下:

最近工作上遇到一个需求,将10000左右个点均匀地分布在一个球面上。所谓的均匀,即相邻的两个点之间的距离尽量一致。
我的算法是用基于正多面体剖分球面,我选的是正八面体。

1. 效果图如下:

Python实现将n个点均匀地分布在球面上的方法

2.sphere.py代码如下

#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
class Spherical(object):
  '''球坐标系'''
  def __init__(self, radial = 1.0, polar = 0.0, azimuthal = 0.0):
    self.radial = radial
    self.polar = polar
    self.azimuthal = azimuthal
  def toCartesian(self):
    '''转直角坐标系'''
    r = math.sin(self.azimuthal) * self.radial
    x = math.cos(self.polar) * r
    y = math.sin(self.polar) * r
    z = math.cos(self.azimuthal) * self.radial
    return x, y, z
def splot(limit):
  s = Spherical()
  n = int(math.ceil(math.sqrt((limit - 2) / 4)))
  azimuthal = 0.5 * math.pi / n
  for a in range(-n, n + 1):
    s.polar = 0
    size = (n - abs(a)) * 4 or 1
    polar = 2 * math.pi / size
    for i in range(size):
      yield s.toCartesian()
      s.polar += polar
    s.azimuthal += azimuthal
for point in splot(input('')):
  print("%f %f %f" % point)

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
python使用matplotlib绘制热图
Nov 07 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
Pytorch释放显存占用方式
Jan 13 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
Python求解平方根的方法
Mar 11 #Python
python自动格式化json文件的方法
Mar 11 #Python
python处理csv数据的方法
Mar 11 #Python
python模拟鼠标拖动操作的方法
Mar 11 #Python
Python创建系统目录的方法
Mar 11 #Python
Python实现从订阅源下载图片的方法
Mar 11 #Python
Python获取网页上图片下载地址的方法
Mar 11 #Python
You might like
社区(php&&mysql)六
2006/10/09 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
javascript void(0)的妙用
2009/10/21 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
python实现简单遗传算法
2020/09/18 Python
python打包多类型文件的操作方法
2020/09/21 Python
解释下面关于J2EE的名词
2013/11/15 面试题
致标枪运动员广播稿
2014/02/06 职场文书
业务员的岗位职责
2014/03/15 职场文书
文明倡议书范文
2014/04/15 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
不同意离婚答辩状
2015/05/22 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书