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类的基础入门知识
Nov 24 Python
Python实现获取网站PR及百度权重
Jan 21 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
python生成随机图形验证码详解
Nov 08 Python
python编程培训 python培训靠谱吗
Jan 17 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
python实现微信小程序自动回复
Sep 10 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
Python魔法方法详解
Feb 13 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 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
SONY SRF-40W电路分析
2021/03/02 无线电
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
PHP取得一个类的属性和方法的实现代码
2011/05/22 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
利用Python命令行传递实例化对象的方法
2016/11/02 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
python版本五子棋的实现代码
2018/12/11 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
Python饼状图的绘制实例
2019/01/15 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
植树节标语
2014/06/27 职场文书
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android