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 相关文章推荐
Python与shell的3种交互方式介绍
Apr 11 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
python实现俄罗斯方块游戏
Mar 25 Python
解决python 自动安装缺少模块的问题
Oct 22 Python
python tkinter窗口最大化的实现
Jul 15 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
python代码xml转txt实例
Mar 10 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
python实现图片转换成素描和漫画格式
Aug 19 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+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
Python设计模式之代理模式实例
2014/04/26 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
python 实现单通道转3通道
2019/12/03 Python
Python标准库itertools的使用方法
2020/01/17 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
会计专业的自荐信
2013/12/12 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
锦旗标语大全
2014/06/23 职场文书
篮球社团活动总结
2014/06/27 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
同意迁入证明模板
2014/10/26 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
基于JavaScript实现年月日三级联动
2021/06/22 Javascript
Go语言安装并操作redis的go-redis库
2022/04/14 Golang