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中操作时间之mktime()方法的使用教程
May 22 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
python绘制直线的方法
Jun 30 Python
python实现决策树分类(2)
Aug 30 Python
Python实现12306火车票抢票系统
Jul 04 Python
基于Python实现签到脚本过程解析
Oct 25 Python
Django框架models使用group by详解
Mar 11 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
python如何安装下载后的模块
Jul 03 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
pandas 实现将NaN转换为None
May 14 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
PHP daddslashes 使用方法介绍
2012/10/26 PHP
如何用php获取文件名后缀
2013/06/09 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
JavaScript 继承详解 第一篇
2009/08/30 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
python计算auc指标实例
2017/07/13 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
会计学应届毕业生推荐信
2013/11/04 职场文书
大学总结自我鉴定
2014/01/18 职场文书
个人收入证明范本
2014/09/18 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
工作失职检讨书范文
2015/05/05 职场文书
Python学习开发之图形用户界面详解
2021/08/23 Python