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实现udp数据报传输的方法
Sep 26 Python
python解析基于xml格式的日志文件
Feb 25 Python
Python MySQL数据库连接池组件pymysqlpool详解
Jul 07 Python
使用tensorflow实现线性svm
Sep 07 Python
python实现文本界面网络聊天室
Dec 12 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
Python Flask框架扩展操作示例
May 03 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
python如何查看网页代码
Jun 07 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
python安装cx_Oracle和wxPython的方法
Sep 14 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 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
最省空间的计数器
2006/10/09 PHP
PHPMyAdmin 快速配置方法
2009/05/11 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
js实现弹窗效果
2020/08/09 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
Python的几种主动结束程序方式
2019/11/22 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
迎新春趣味活动方案
2014/08/24 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
邀请函的格式
2015/01/30 职场文书